diff --git a/.gitignore b/.gitignore index 934c1fb..74411b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ */.env +*.pyc \ No newline at end of file diff --git a/site/real_game/class/Map.js b/site/real_game/class/Map.js new file mode 100644 index 0000000..adb8e1c --- /dev/null +++ b/site/real_game/class/Map.js @@ -0,0 +1,58 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Map.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hubourge +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/08/20 14:52:55 by hubourge #+# #+# */ +/* Updated: 2024/08/20 16:34:25 by hubourge ### ########.fr */ +/* */ +/* ************************************************************************** */ + +import * as THREE from 'three'; + + + +class Map +{ + scene = null; + arrObject = []; + + constructor(scene, length) + { + this.scene = scene; + scene.add(this.#createPlanes(7.5, length, -(Math.PI / 2), "plane1")); + // scene.add(this.#createWalls(0, 0, 0, "wallLeft")); + }; + + #createPlanes(x, y, rot, name) // passer un materiel + { + for (let i = 0; i < this.arrObject.length; i++) + { + if (this.arrObject[i].name == name) + throw Error("Name already exist."); + } + const geometry = new THREE.PlaneGeometry(x, y); + const material = new THREE.MeshPhysicalMaterial() + const mesh = new THREE.Mesh(geometry, material); + + mesh.rotateX(rot); + mesh.position.set(0, 0.15, -6); + this.arrObject.push({mesh: mesh, name: name}); + return (mesh); + }; + + // #createWalls(x, y, z, name) + // { + // const geometry = new THREE.BoxGeometry(20, 20, 20); + // const material = new THREE.MeshPhysicalMaterial(); + // const mesh = new THREE.Mesh(geometry, material); + + // mesh.position.set(x, y, z); + // this.arrObject.push({mesh: mesh, name: name}); + // return (mesh); + // }; +}; + +export { Map }; \ No newline at end of file diff --git a/site/real_game/class/Player.js b/site/real_game/class/Player.js index 7424919..983ea16 100644 --- a/site/real_game/class/Player.js +++ b/site/real_game/class/Player.js @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* Player.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: edbernar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/18 00:30:31 by edbernar #+# #+# */ -/* Updated: 2024/08/20 14:33:51 by edbernar ### ########.fr */ +/* Updated: 2024/08/20 16:00:24 by hubourge ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,8 +51,8 @@ let playerExist = false; const limits = { up : 3, down: 0.2, - left: -4, - right: 4, + left: -3, + right: 3, } class Player diff --git a/site/real_game/main.js b/site/real_game/main.js index 2c60732..2e34410 100644 --- a/site/real_game/main.js +++ b/site/real_game/main.js @@ -3,15 +3,17 @@ /* ::: :::::::: */ /* main.js :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: edbernar +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/08/18 00:53:53 by edbernar #+# #+# */ -/* Updated: 2024/08/19 23:08:38 by edbernar ### ########.fr */ +/* Updated: 2024/08/20 16:11:26 by hubourge ### ########.fr */ /* */ /* ************************************************************************** */ import * as THREE from 'three'; import { Player } from './class/Player' +import { Map } from './class/Map' +import { OrbitControls } from 'three/examples/jsm/Addons.js'; function createBarPlayer(color) { @@ -41,18 +43,17 @@ function createMap() const scene = new THREE.Scene(); +const map = new Map(scene, 13); const bar = createBarPlayer(0xed56ea); const renderer = new THREE.WebGLRenderer({antialias: true}); const player = new Player(bar); const spotLight = new THREE.SpotLight(0xffffff, 10000, 0, Math.PI / 4); const ambiantLight = new THREE.AmbientLight(0xffffff, 1); -const map = createMap(); scene.add(player.object); scene.add(ambiantLight); spotLight.position.set(0, 100, 0); scene.add(spotLight); -scene.add(map); scene.background = new THREE.Color(0x1a1a1a); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); diff --git a/site/real_game/node_modules/.vite/deps/_metadata.json b/site/real_game/node_modules/.vite/deps/_metadata.json index 6a3e58d..45ef828 100644 --- a/site/real_game/node_modules/.vite/deps/_metadata.json +++ b/site/real_game/node_modules/.vite/deps/_metadata.json @@ -1,25 +1,34 @@ { - "hash": "b5ed7c4e", - "configHash": "4027b9ee", + "hash": "fba7eca6", + "configHash": "345fb419", "lockfileHash": "cd36b699", - "browserHash": "32c4be3f", + "browserHash": "dfa6d36e", "optimized": { "three": { "src": "../../three/build/three.module.js", "file": "three.js", - "fileHash": "aeffa42d", + "fileHash": "4b6b8fed", + "needsInterop": false + }, + "three/examples/jsm/Addons.js": { + "src": "../../three/examples/jsm/Addons.js", + "file": "three_examples_jsm_Addons__js.js", + "fileHash": "4877cb36", "needsInterop": false }, "three/examples/jsm/controls/OrbitControls.js": { "src": "../../three/examples/jsm/controls/OrbitControls.js", "file": "three_examples_jsm_controls_OrbitControls__js.js", - "fileHash": "fcc35eca", + "fileHash": "0cee644c", "needsInterop": false } }, "chunks": { - "chunk-IS2ZBFBB": { - "file": "chunk-IS2ZBFBB.js" + "chunk-7WGWDPRB": { + "file": "chunk-7WGWDPRB.js" + }, + "chunk-33KXLYU5": { + "file": "chunk-33KXLYU5.js" } } } \ No newline at end of file diff --git a/site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js b/site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js similarity index 99% rename from site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js rename to site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js index 18a4a04..14d8d68 100644 --- a/site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js +++ b/site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js @@ -1,3 +1,9 @@ +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; + // node_modules/three/build/three.module.js var REVISION = "167"; var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; @@ -30704,6 +30710,7 @@ if (typeof window !== "undefined") { } export { + __export, REVISION, MOUSE, TOUCH, @@ -31132,4 +31139,4 @@ three/build/three.module.js: * SPDX-License-Identifier: MIT *) */ -//# sourceMappingURL=chunk-IS2ZBFBB.js.map +//# sourceMappingURL=chunk-33KXLYU5.js.map diff --git a/site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map b/site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js.map similarity index 69% rename from site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map rename to site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js.map index cd4aafa..371ccb7 100644 --- a/site/real_game/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map +++ b/site/real_game/node_modules/.vite/deps/chunk-33KXLYU5.js.map @@ -2,6 +2,6 @@ "version": 3, "sources": ["../../three/build/three.module.js"], "sourcesContent": ["/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '167';\n\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst ConstantColorFactor = 211;\nconst OneMinusConstantColorFactor = 212;\nconst ConstantAlphaFactor = 213;\nconst OneMinusConstantAlphaFactor = 214;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\nconst AgXToneMapping = 6;\nconst NeutralToneMapping = 7;\nconst AttachedBindMode = 'attached';\nconst DetachedBindMode = 'detached';\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst UnsignedInt5999Type = 35902;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RGB_BPTC_SIGNED_Format = 36494;\nconst RGB_BPTC_UNSIGNED_Format = 36495;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst RGBDepthPacking = 3202;\nconst RGDepthPacking = 3203;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\nconst LinearDisplayP3ColorSpace = 'display-p3-linear';\n\nconst LinearTransfer = 'linear';\nconst SRGBTransfer = 'srgb';\n\nconst Rec709Primaries = 'rec709';\nconst P3Primaries = 'p3';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst NeverCompare = 512;\nconst LessCompare = 513;\nconst EqualCompare = 514;\nconst LessEqualCompare = 515;\nconst GreaterCompare = 516;\nconst NotEqualCompare = 517;\nconst GreaterEqualCompare = 518;\nconst AlwaysCompare = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(\n\t0.8224621, 0.177538, 0.0,\n\t0.0331941, 0.9668058, 0.0,\n\t0.0170827, 0.0723974, 0.9105199,\n);\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(\n\t1.2249401, - 0.2249404, 0.0,\n\t- 0.0420569, 1.0420571, 0.0,\n\t- 0.0196376, - 0.0786361, 1.0982735\n);\n\n/**\n * Defines supported color spaces by transfer function and primaries,\n * and provides conversions to/from the Linear-sRGB reference space.\n */\nconst COLOR_SPACES = {\n\t[ LinearSRGBColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color,\n\t\tfromReference: ( color ) => color,\n\t},\n\t[ SRGBColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear(),\n\t\tfromReference: ( color ) => color.convertLinearToSRGB(),\n\t},\n\t[ LinearDisplayP3ColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),\n\t},\n\t[ DisplayP3ColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),\n\t},\n};\n\nconst SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\t_workingColorSpace: LinearSRGBColorSpace,\n\n\tget workingColorSpace() {\n\n\t\treturn this._workingColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tif ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {\n\n\t\t\tthrow new Error( `Unsupported working color space, \"${ colorSpace }\".` );\n\n\t\t}\n\n\t\tthis._workingColorSpace = colorSpace;\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;\n\t\tconst targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;\n\n\t\treturn targetFromReference( sourceToReference( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this._workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this._workingColorSpace );\n\n\t},\n\n\tgetPrimaries: function ( colorSpace ) {\n\n\t\treturn COLOR_SPACES[ colorSpace ].primaries;\n\n\t},\n\n\tgetTransfer: function ( colorSpace ) {\n\n\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\treturn COLOR_SPACES[ colorSpace ].transfer;\n\n\t},\n\n\tgetLuminanceCoefficients: function ( target, colorSpace = this._workingColorSpace ) {\n\n\t\treturn target.fromArray( COLOR_SPACES[ colorSpace ].luminanceCoefficients );\n\n\t},\n\n};\n\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\t\tthis.dataReady = true;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tthis.colorSpace = colorSpace;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass RenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1\n\t\t}, options );\n\n\t\tconst texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\ttexture.flipY = false;\n\t\ttexture.generateMipmaps = options.generateMipmaps;\n\t\ttexture.internalFormat = options.internalFormat;\n\n\t\tthis.textures = [];\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\tthis.depthBuffer = options.depthBuffer;\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\tthis.samples = options.samples;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass WebGLRenderTarget extends RenderTarget {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// sets this quaternion to a uniform random unit quaternnion\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$3.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$3 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$3, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$3 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.isSphere = true;\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$4.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$4.elements[ 0 ] *= invSX;\n\t\t_m1$4.elements[ 1 ] *= invSX;\n\t\t_m1$4.elements[ 2 ] *= invSX;\n\n\t\t_m1$4.elements[ 4 ] *= invSY;\n\t\t_m1$4.elements[ 5 ] *= invSY;\n\t\t_m1$4.elements[ 6 ] *= invSY;\n\n\t\t_m1$4.elements[ 8 ] *= invSZ;\n\t\t_m1$4.elements[ 9 ] *= invSZ;\n\t\t_m1$4.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$4 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$4 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$3 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nconst _childaddedEvent = { type: 'childadded', child: null };\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$3.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$3.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$3 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$3.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$3 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$3.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$3.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$3 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.visibility = this._visibility;\n\t\t\tobject.active = this._active;\n\t\t\tobject.bounds = this._bounds.map( bound => ( {\n\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\tboxMin: bound.box.min.toArray(),\n\t\t\t\tboxMax: bound.box.max.toArray(),\n\n\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\tsphereRadius: bound.sphere.radius,\n\t\t\t\tsphereCenter: bound.sphere.center.toArray()\n\t\t\t} ) );\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) object.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = {\n\t\t\t\t\tcenter: object.boundingSphere.center.toArray(),\n\t\t\t\t\tradius: object.boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = {\n\t\t\t\t\tmin: object.boundingBox.min.toArray(),\n\t\t\t\t\tmax: object.boundingBox.max.toArray()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$3 );\n\t\tconst dot02 = _v0$2.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$2.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\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\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\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 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nlet _materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\t\tthis.blendAlpha = 0;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {\n\n\t\tconsole.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {\n\n\t\tconsole.warn( 'Material: onBeforeRender() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\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.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\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\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.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\tapplyQuaternion( q ) {\n\n\t\t_m1$2.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\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 position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\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\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\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.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\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\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\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\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\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 BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _normalA = /*@__PURE__*/ new Vector3();\nconst _normalB = /*@__PURE__*/ new Vector3();\nconst _normalC = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv1, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv1, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\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\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\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\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\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\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\tconsole.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.forceSinglePass = true;\n\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Copies the result into the target Vector2, where x is width and y is height.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\t\tthis.coordinateSystem = null;\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\t\tcameraPX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\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\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$5.center.set( 0, 0, 0 );\n\t\t_sphere$5.radius = 0.7071067811865476;\n\t\t_sphere$5.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute._updateRange; // @deprecated, r159\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 && updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t}\n\n\t\tif ( updateRanges.length !== 0 ) {\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\t// @deprecated, r159\n\t\tif ( updateRange.count !== - 1 ) {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\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\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\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec3 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n\\tvColor.xyz *= batchingColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"\\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\\n\\tvec3( 0.8224621, 0.177538, 0.0 ),\\n\\tvec3( 0.0331941, 0.9668058, 0.0 ),\\n\\tvec3( 0.0170827, 0.0723974, 0.9105199 )\\n);\\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.2249401, - 0.2249404, 0.0 ),\\n\\tvec3( - 0.0420569, 1.0420571, 0.0 ),\\n\\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\\n);\\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\\n}\\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\\n}\\nvec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\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\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\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\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\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\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\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.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\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\\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\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\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\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\t\\n\\t\\tfloat lightToPositionLength = length( lightToPosition );\\n\\t\\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t\\n\\t\\t#else\\n\\t\\t\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _e1$1 = /*@__PURE__*/ new Euler();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\t_e1$1.copy( scene.backgroundRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1$1.x *= - 1; _e1$1.y *= - 1; _e1$1.z *= - 1;\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1$1.y *= - 1;\n\t\t\t\t_e1$1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) );\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + 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\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\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 ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + 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\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\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 ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ], counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\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}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported equirectangular image size is 64 x 32.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported cube size is 16 x 16.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\t\tconst n = this._lodPlanes.length;\n\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\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}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tconst array = geometry.morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.remove( array[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else if ( geometryPosition !== undefined ) {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = LessEqualCompare; // #28670\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\tconst encodingPrimaries = ColorManagement.getPrimaries( colorSpace );\n\n\tlet gamutMapping;\n\n\tif ( workingPrimaries === encodingPrimaries ) {\n\n\t\tgamutMapping = '';\n\n\t} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {\n\n\t\tgamutMapping = 'LinearDisplayP3ToLinearSRGB';\n\n\t} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {\n\n\t\tgamutMapping = 'LinearSRGBToLinearDisplayP3';\n\n\t}\n\n\tswitch ( colorSpace ) {\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase LinearDisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t\tcase SRGBColorSpace:\n\t\tcase DisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\treturn `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase AgXToneMapping:\n\t\t\ttoneMappingName = 'AgX';\n\t\t\tbreak;\n\n\t\tcase NeutralToneMapping:\n\t\t\ttoneMappingName = 'Neutral';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0$1 );\n\n\tconst r = _v0$1.x.toFixed( 4 );\n\tconst g = _v0$1.y.toFixed( 4 );\n\tconst b = _v0$1.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\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// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id$1 = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id$1 ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\tsupportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading === true,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 19 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1,\n\n\t\t\tnumLightProbes: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {}\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );\n\t\tconst fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null || toVSM === true || fromVSM === true ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\trenderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\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.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\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.WebGLState: Invalid blending: ', blending );\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\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n\n\n/**\n * Given the width, height, format, and type of a texture. Determines how many\n * bytes must be used to represent the texture.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceAlphaFormat:\n\t\t\treturn width * height * 2;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\nconst TextureUtils = {\n\tcontain,\n\tcover,\n\tfill,\n\tgetByteLength\n};\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\tconsole.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\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\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 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\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\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} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\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 ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\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\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\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 ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\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\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 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} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\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\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\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 ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ 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\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\tconst isUseMultisampledRTT = useMultisampledRTT( renderTarget );\n\t\t\tif ( isUseMultisampledRTT ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\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\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\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\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\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\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\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\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\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 ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\nclass WebXRDepthSensing {\n\n\tconstructor() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t\tthis.depthNear = 0;\n\t\tthis.depthFar = 0;\n\n\t}\n\n\tinit( renderer, depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst texProps = renderer.properties.get( texture );\n\t\t\ttexProps.__webglTexture = depthData.texture;\n\n\t\t\tif ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\t\tcameraXR.layers.enable( 1 );\n\t\tcameraXR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tcamera.near = depthSensing.depthNear;\n\t\t\t\tcamera.far = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t\tcameraL.near = _currentDepthNear;\n\t\t\t\tcameraL.far = _currentDepthFar;\n\t\t\t\tcameraR.near = _currentDepthNear;\n\t\t\t\tcameraR.far = _currentDepthFar;\n\n\t\t\t\tcameraL.updateProjectionMatrix();\n\t\t\t\tcameraR.updateProjectionMatrix();\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\n\t\t\t\tif ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( renderer, depthData, session.renderState );\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\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _e1 = /*@__PURE__*/ new Euler();\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t_e1.copy( envMapRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1.y *= - 1;\n\t\t\t\t_e1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\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\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass WebGLRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t} = parameters;\n\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.shadowMap = shadowMap;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = targetFormat === RGBAIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RGIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RedIntegerFormat;\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = targetType === UnsignedByteType ||\n\t\t\t\t\t\ttargetType === UnsignedIntType ||\n\t\t\t\t\t\ttargetType === UnsignedShortType ||\n\t\t\t\t\t\ttargetType === UnsignedInt248Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort4444Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort5551Type;\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tcubeuvmaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( object._multiDrawInstances !== null ) {\n\n\t\t\t\t\trenderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\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\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\trenderStateStack.pop();\n\t\t\tcurrentRenderState = null;\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\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 if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, 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\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 ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: 4,\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst object = renderItem.object;\n\t\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\t\tconst material = renderItem.material;\n\t\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );\n\t\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet useDefaultFramebuffer = true;\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\t\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound && useDefaultFramebuffer ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\t\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\t\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\n\t\t\t\t\t\t} finally {\n\n\t\t\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn buffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\t// support previous signature with position first\n\t\t\tif ( texture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );\n\n\t\t\t\tposition = arguments[ 0 ] || null;\n\t\t\t\ttexture = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with dstPosition first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );\n\n\t\t\t\tdstPosition = arguments[ 0 ] || null;\n\t\t\t\tsrcTexture = arguments[ 1 ];\n\t\t\t\tdstTexture = arguments[ 2 ];\n\t\t\t\tlevel = arguments[ 3 ] || 0;\n\t\t\t\tsrcRegion = null;\n\n\t\t\t}\n\n\t\t\tlet width, height, minX, minY;\n\t\t\tlet dstX, dstY;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\n\t\t\t} else {\n\n\t\t\t\twidth = srcTexture.image.width;\n\t\t\t\theight = srcTexture.image.height;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t\t// As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with source box first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );\n\n\t\t\t\tsrcRegion = arguments[ 0 ] || null;\n\t\t\t\tdstPosition = arguments[ 1 ] || null;\n\t\t\t\tsrcTexture = arguments[ 2 ];\n\t\t\t\tdstTexture = arguments[ 3 ];\n\t\t\t\tlevel = arguments[ 4 ] || 0;\n\n\t\t\t}\n\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.max.z - srcRegion.min.z;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.min.z;\n\n\t\t\t} else {\n\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tdepth = image.depth;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\t\tgl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\n\t}\n\n}\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\t\tthis.backgroundRotation = new Euler();\n\n\t\tthis.environmentIntensity = 1;\n\t\tthis.environmentRotation = new Euler();\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\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.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material;\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = AttachedBindMode;\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix$1 = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix$1;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\t\tthis.morphTexture = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$3 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( drawRange, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: - 1,\n\t\t\t\tcount: - 1,\n\t\t\t\tz: - 1,\n\t\t\t\tindex: - 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = drawRange.start;\n\t\titem.count = drawRange.count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _invMatrixWorld = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _projScreenMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// @TODO: SkinnedMesh support?\n// @TODO: geometry.groups support?\n// @TODO: geometry.drawRange support?\n// @TODO: geometry.morphAttributes support?\n// @TODO: Support uniform parameter per geometry\n// @TODO: Add an \"optimize\" function to pack geometry and remove data gaps\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\nclass BatchedMesh extends Mesh {\n\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\tthis.isBatchedMesh = true;\n\t\tthis.perObjectFrustumCulled = true;\n\t\tthis.sortObjects = true;\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per object\n\t\tthis._drawInfo = [];\n\n\t\t// geometry information\n\t\tthis._drawRanges = [];\n\t\tthis._reservedRanges = [];\n\t\tthis._bounds = [];\n\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tthis._geometryInitialized = false;\n\t\tthis._geometryCount = 0;\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\t\tthis._multiDrawInstances = null;\n\t\tthis._visibilityChanged = true;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxIndexCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\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 geometryCount = this._geometryCount;\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\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\tconst boundingSphere = this.boundingSphere;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\taddInstance( geometryId ) {\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tthis._drawInfo.push( {\n\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\n\t\t} );\n\n\t\t// initialize the matrix\n\t\tconst drawId = this._drawInfo.length - 1;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = matricesTexture.image.data;\n\t\t_identityMatrix.toArray( matricesArray, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\treturn drawId;\n\n\t}\n\n\taddGeometry( geometry, vertexCount = - 1, indexCount = - 1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\t// get the necessary range fo the geometry\n\t\tconst reservedRange = {\n\t\t\tvertexStart: - 1,\n\t\t\tvertexCount: - 1,\n\t\t\tindexStart: - 1,\n\t\t\tindexCount: - 1,\n\t\t};\n\n\t\tlet lastRange = null;\n\t\tconst reservedRanges = this._reservedRanges;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst bounds = this._bounds;\n\t\tif ( this._geometryCount !== 0 ) {\n\n\t\t\tlastRange = reservedRanges[ reservedRanges.length - 1 ];\n\n\t\t}\n\n\t\tif ( vertexCount === - 1 ) {\n\n\t\t\treservedRange.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexCount = vertexCount;\n\n\t\t}\n\n\t\tif ( lastRange === null ) {\n\n\t\t\treservedRange.vertexStart = 0;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount;\n\n\t\t}\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tif ( indexCount\t=== - 1 ) {\n\n\t\t\t\treservedRange.indexCount = index.count;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexCount = indexCount;\n\n\t\t\t}\n\n\t\t\tif ( lastRange === null ) {\n\n\t\t\t\treservedRange.indexStart = 0;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexStart = lastRange.indexStart + lastRange.indexCount;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (\n\t\t\treservedRange.indexStart !== - 1 &&\n\t\t\treservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount ||\n\t\t\treservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tconst geometryId = this._geometryCount;\n\t\tthis._geometryCount ++;\n\n\t\t// add the reserved range and draw range objects\n\t\treservedRanges.push( reservedRange );\n\t\tdrawRanges.push( {\n\t\t\tstart: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart,\n\t\t\tcount: - 1\n\t\t} );\n\t\tbounds.push( {\n\t\t\tboxInitialized: false,\n\t\t\tbox: new Box3(),\n\n\t\t\tsphereInitialized: false,\n\t\t\tsphere: new Sphere()\n\t\t} );\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\treturn geometryId;\n\n\t}\n\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst reservedRange = this._reservedRanges[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > reservedRange.indexCount ||\n\t\t\tgeometry.attributes.position.count > reservedRange.vertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry over\n\t\tconst vertexStart = reservedRange.vertexStart;\n\t\tconst vertexCount = reservedRange.vertexCount;\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = vertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, vertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = reservedRange.indexStart;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedRange.indexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, reservedRange.indexCount );\n\n\t\t}\n\n\t\t// store the bounding boxes\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbound.box.copy( geometry.boundingBox );\n\t\t\tbound.boxInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.boxInitialized = false;\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbound.sphere.copy( geometry.boundingSphere );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.sphereInitialized = false;\n\n\t\t}\n\n\t\t// set drawRange count\n\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\tconst posAttr = geometry.getAttribute( 'position' );\n\t\tdrawRange.count = hasIndex ? srcIndex.count : posAttr.count;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn geometryId;\n\n\t}\n\n\t/*\n\tdeleteGeometry( geometryId ) {\n\n\t\t// TODO: delete geometry and associated instances\n\n\t}\n\t*/\n\n\t/*\n\tdeleteInstance( instanceId ) {\n\n\t\t// Note: User needs to call optimize() afterward to pack the data.\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].active = false;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\t*/\n\n\t// get bounding box and compute it if it doesn't exist\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst box = bound.box;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.boxInitialized === false ) {\n\n\t\t\tbox.makeEmpty();\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tbound.boxInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( box );\n\t\treturn target;\n\n\t}\n\n\t// get bounding sphere and compute it if it doesn't exist\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst sphere = bound.sphere;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.sphereInitialized === false ) {\n\n\t\t\tsphere.makeEmpty();\n\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( sphere );\n\t\treturn target;\n\n\t}\n\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\t// @TODO: Map geometryId to index of the arrays because\n\t\t// optimize() can make geometryId mismatch the index\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn matrix.fromArray( matricesArray, instanceId * 16 );\n\n\t}\n\n\tsetColorAt( instanceId, color ) {\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\t// @TODO: Map id to index of the arrays because\n\t\t// optimize() can make id mismatch the index\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcolor.toArray( colorsArray, instanceId * 4 );\n\t\tcolorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( instanceId, color ) {\n\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn color.fromArray( colorsArray, instanceId * 4 );\n\n\t}\n\n\tsetVisibleAt( instanceId, value ) {\n\n\t\t// if the geometry is out of range, not active, or visibility state\n\t\t// does not change then return early\n\t\tconst drawInfo = this._drawInfo;\n\t\tif (\n\t\t\tinstanceId >= drawInfo.length ||\n\t\t\tdrawInfo[ instanceId ].active === false ||\n\t\t\tdrawInfo[ instanceId ].visible === value\n\t\t) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].visible = value;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetVisibleAt( instanceId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn drawInfo[ instanceId ].visible;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! drawInfo[ i ].visible || ! drawInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t// ge the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._drawRanges = source._drawRanges.map( range => ( { ...range } ) );\n\t\tthis._reservedRanges = source._reservedRanges.map( range => ( { ...range } ) );\n\n\t\tthis._drawInfo = source._drawInfo.map( inf => ( { ...inf } ) );\n\t\tthis._bounds = source._bounds.map( bound => ( {\n\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\tbox: bound.box.clone(),\n\n\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\tsphere: bound.sphere.clone()\n\t\t} ) );\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._geometryCount = source._geometryCount;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tconst bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t_projScreenMatrix$2\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$2,\n\t\t\t\trenderer.coordinateSystem\n\t\t\t);\n\n\t\t}\n\n\t\tlet count = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_invMatrixWorld.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _invMatrixWorld );\n\t\t\t_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _invMatrixWorld );\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward );\n\t\t\t\t\t\t_renderList.push( drawRanges[ geometryId ], z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ count ] = item.start * bytesPerElement;\n\t\t\t\tmultiDrawCounts[ count ] = item.count;\n\t\t\t\tindirectArray[ count ] = item.index;\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst range = drawRanges[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ count ] = range.start * bytesPerElement;\n\t\t\t\t\t\tmultiDrawCounts[ count ] = range.count;\n\t\t\t\t\t\tindirectArray[ count ] = i;\n\t\t\t\t\t\tcount ++;\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\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = count;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\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.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: a,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\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.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass CompressedCubeTexture extends CompressedTexture {\n\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\tthis.isCompressedCubeTexture = true;\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\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( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\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\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tlength: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\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\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\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\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\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\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\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\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\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\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\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 applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\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\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\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// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\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\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\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 ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = 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\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\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\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\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\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\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\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\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\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\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\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\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 a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\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\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\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\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).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 + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.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\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\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\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\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( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\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\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\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\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\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( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\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\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\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\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\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\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\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\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\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// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\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\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\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.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\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.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\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.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\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\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\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.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\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.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\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\t\tthis.gradientMap = source.gradientMap;\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.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\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\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\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.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\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.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\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\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader 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\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.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( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader 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 images = [];\n\n\t\tconst texture = new CompressedTexture();\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( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader 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 texture = new DataTexture();\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( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( error );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader 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 texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\t\tif ( this.target !== undefined ) data.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.intensity = 1;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.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\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\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\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\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( JSON.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( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) { // @deprecated, r165\n\n\t\tconsole.warn( 'THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.' );\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader 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( JSON.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( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader 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 = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || 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\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || 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\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\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\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\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\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._visibility = data.visibility;\n\t\t\t\tobject._active = data.active;\n\t\t\t\tobject._bounds = data.bounds.map( bound => {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tbox.min.fromArray( bound.boxMin );\n\t\t\t\t\tbox.max.fromArray( bound.boxMax );\n\n\t\t\t\t\tconst sphere = new Sphere();\n\t\t\t\t\tsphere.radius = bound.sphereRadius;\n\t\t\t\t\tsphere.center.fromArray( bound.sphereCenter );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\t\t\tbox: box,\n\n\t\t\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\t\t\tsphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\t\t\t\tif ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\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\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t\treturn imageBitmap;\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tCache.remove( url );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( url, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader 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.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} ).catch( handleError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( 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\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\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}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, - 1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.\n * theta (the azimuthal angle) is measured from the positive z-axis.\n */\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\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}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\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}\n\nclass Matrix2 {\n\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\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\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\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\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).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\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\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( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\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\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 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\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\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( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\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\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tconsole.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the \"count\" parameter to enable MRT.' );\n\n\t\tsuper( width, height, { ...options, count } );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures;\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, createCanvasElement };\n"], - "mappings": "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", + "mappings": "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", "names": ["tmp", "sign", "data", "tmp2", "indices", "intersects", "intersect", "width", "height", "depth", "fov", "aspect", "renderer", "scene", "alpha", "attributes", "precision", "x", "fill", "self", "_frustum", "drawBuffers", "scissor", "viewport", "_canvas", "texture", "i", "cameraL", "cameraR", "cameras", "cameraXR", "info", "chunkOffset", "_projScreenMatrix", "_vector3", "stencil", "drawCount", "materials", "currentRenderList", "parameters", "framebuffer", "l", "vertex", "detail", "radius", "azimuth", "px", "py", "bs", "contour", "p", "q", "json", "now", "shapes", "tmpPath", "tmpShape"] } diff --git a/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js b/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js new file mode 100644 index 0000000..96b2bb4 --- /dev/null +++ b/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js @@ -0,0 +1,791 @@ +import { + EventDispatcher, + MOUSE, + MathUtils, + Plane, + Quaternion, + Ray, + Spherical, + TOUCH, + Vector2, + Vector3 +} from "./chunk-33KXLYU5.js"; + +// node_modules/three/examples/jsm/controls/OrbitControls.js +var _changeEvent = { type: "change" }; +var _startEvent = { type: "start" }; +var _endEvent = { type: "end" }; +var _ray = new Ray(); +var _plane = 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(_changeEvent); + scope.update(); + state = STATE.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 position = scope.object.position; + offset.copy(position).sub(scope.target); + offset.applyQuaternion(quat); + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE.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 max = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max)) { + if (min < -Math.PI) min += twoPI; + else if (min > Math.PI) min -= twoPI; + if (max < -Math.PI) max += twoPI; + else if (max > Math.PI) max -= twoPI; + if (min <= max) { + spherical.theta = Math.max(min, Math.min(max, spherical.theta)); + } else { + spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, 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 * scale); + zoomChanged = prevRadius != spherical.radius; + } + offset.setFromSpherical(spherical); + offset.applyQuaternion(quatInverse); + position.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 * scale); + 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 / scale)); + 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 { + _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); + _ray.intersectPlane(_plane, 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 / scale)); + if (prevZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + zoomChanged = true; + } + } + scale = 1; + performCursorZoom = false; + if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS || lastTargetPosition.distanceToSquared(scope.target) > EPS) { + scope.dispatchEvent(_changeEvent); + 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", onContextMenu); + scope.domElement.removeEventListener("pointerdown", onPointerDown); + scope.domElement.removeEventListener("pointercancel", onPointerUp); + scope.domElement.removeEventListener("wheel", onMouseWheel); + scope.domElement.removeEventListener("pointermove", onPointerMove); + scope.domElement.removeEventListener("pointerup", onPointerUp); + const document2 = scope.domElement.getRootNode(); + document2.removeEventListener("keydown", interceptControlDown, { capture: true }); + if (scope._domElementKeyEvents !== null) { + scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + scope._domElementKeyEvents = null; + } + }; + const scope = this; + const STATE = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + let state = STATE.NONE; + const EPS = 1e-6; + const spherical = new Spherical(); + const sphericalDelta = new Spherical(); + let scale = 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 position = scope.object.position; + offset.copy(position).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) { + scale /= 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) { + scale *= dollyScale; + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function updateZoomParameters(x, y) { + if (!scope.zoomToCursor) { + return; + } + performCursorZoom = true; + const rect = scope.domElement.getBoundingClientRect(); + const dx = x - rect.left; + const dy = y - 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 position = getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + rotateStart.set(x, y); + } + } + function handleTouchStartPan(event) { + if (pointers.length === 1) { + panStart.set(event.pageX, event.pageY); + } else { + const position = getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + panStart.set(x, y); + } + } + function handleTouchStartDolly(event) { + const position = getSecondPointerPosition(event); + const dx = event.pageX - position.x; + const dy = event.pageY - position.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 position = getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + rotateEnd.set(x, y); + } + 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 position = getSecondPointerPosition(event); + const x = 0.5 * (event.pageX + position.x); + const y = 0.5 * (event.pageY + position.y); + panEnd.set(x, y); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + const position = getSecondPointerPosition(event); + const dx = event.pageX - position.x; + const dy = event.pageY - position.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 + position.x) * 0.5; + const centerY = (event.pageY + position.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 onPointerDown(event) { + if (scope.enabled === false) return; + if (pointers.length === 0) { + scope.domElement.setPointerCapture(event.pointerId); + scope.domElement.addEventListener("pointermove", onPointerMove); + scope.domElement.addEventListener("pointerup", onPointerUp); + } + if (isTrackingPointer(event)) return; + addPointer(event); + if (event.pointerType === "touch") { + onTouchStart(event); + } else { + onMouseDown(event); + } + } + function onPointerMove(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchMove(event); + } else { + onMouseMove(event); + } + } + function onPointerUp(event) { + removePointer(event); + switch (pointers.length) { + case 0: + scope.domElement.releasePointerCapture(event.pointerId); + scope.domElement.removeEventListener("pointermove", onPointerMove); + scope.domElement.removeEventListener("pointerup", onPointerUp); + scope.dispatchEvent(_endEvent); + state = STATE.NONE; + break; + case 1: + const pointerId = pointers[0]; + const position = pointerPositions[pointerId]; + onTouchStart({ pointerId, pageX: position.x, pageY: position.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 = STATE.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE.PAN; + } else { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } else { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE.PAN; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.dispatchEvent(_startEvent); + } + } + function onMouseMove(event) { + switch (state) { + case STATE.ROTATE: + if (scope.enableRotate === false) return; + handleMouseMoveRotate(event); + break; + case STATE.DOLLY: + if (scope.enableZoom === false) return; + handleMouseMoveDolly(event); + break; + case STATE.PAN: + if (scope.enablePan === false) return; + handleMouseMovePan(event); + break; + } + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE) return; + event.preventDefault(); + scope.dispatchEvent(_startEvent); + handleMouseWheel(customWheelEvent(event)); + scope.dispatchEvent(_endEvent); + } + 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 document2 = scope.domElement.getRootNode(); + document2.addEventListener("keyup", interceptControlUp, { passive: true, capture: true }); + } + } + function interceptControlUp(event) { + if (event.key === "Control") { + controlActive = false; + const document2 = scope.domElement.getRootNode(); + document2.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 = STATE.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (scope.enablePan === false) return; + handleTouchStartPan(event); + state = STATE.TOUCH_PAN; + break; + default: + state = STATE.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchStartDollyPan(event); + state = STATE.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchStartDollyRotate(event); + state = STATE.TOUCH_DOLLY_ROTATE; + break; + default: + state = STATE.NONE; + } + break; + default: + state = STATE.NONE; + } + if (state !== STATE.NONE) { + scope.dispatchEvent(_startEvent); + } + } + function onTouchMove(event) { + trackPointer(event); + switch (state) { + case STATE.TOUCH_ROTATE: + if (scope.enableRotate === false) return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE.TOUCH_PAN: + if (scope.enablePan === false) return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: + state = STATE.NONE; + } + } + function onContextMenu(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 position = pointerPositions[event.pointerId]; + if (position === void 0) { + position = new Vector2(); + pointerPositions[event.pointerId] = position; + } + position.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", onContextMenu); + scope.domElement.addEventListener("pointerdown", onPointerDown); + scope.domElement.addEventListener("pointercancel", onPointerUp); + scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); + const document = scope.domElement.getRootNode(); + document.addEventListener("keydown", interceptControlDown, { passive: true, capture: true }); + this.update(); + } +}; + +export { + OrbitControls +}; +//# sourceMappingURL=chunk-7WGWDPRB.js.map diff --git a/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js.map b/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js.map new file mode 100644 index 0000000..3c34e53 --- /dev/null +++ b/site/real_game/node_modules/.vite/deps/chunk-7WGWDPRB.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../three/examples/jsm/controls/OrbitControls.js"], + "sourcesContent": ["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"], + "mappings": "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", + "names": ["domElement", "document", "panLeft", "panUp", "pan"] +} diff --git a/site/real_game/node_modules/.vite/deps/three.js b/site/real_game/node_modules/.vite/deps/three.js index b18b524..6f744c1 100644 --- a/site/real_game/node_modules/.vite/deps/three.js +++ b/site/real_game/node_modules/.vite/deps/three.js @@ -417,7 +417,7 @@ import { ZeroSlopeEnding, ZeroStencilOp, createCanvasElement -} from "./chunk-IS2ZBFBB.js"; +} from "./chunk-33KXLYU5.js"; export { ACESFilmicToneMapping, AddEquation, 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 new file mode 100644 index 0000000..f15ca2f --- /dev/null +++ b/site/real_game/node_modules/.vite/deps/three_examples_jsm_Addons__js.js @@ -0,0 +1,120183 @@ +import { + OrbitControls +} from "./chunk-7WGWDPRB.js"; +import { + ACESFilmicToneMapping, + AddEquation, + AddOperation, + AdditiveBlending, + AgXToneMapping, + AmbientLight, + AnimationClip, + AnimationMixer, + BackSide, + Bone, + BooleanKeyframeTrack, + Box2, + Box3, + Box3Helper, + BoxGeometry, + BufferAttribute, + BufferGeometry, + BufferGeometryLoader, + Camera, + CanvasTexture, + CapsuleGeometry, + CineonToneMapping, + ClampToEdgeWrapping, + Clock, + Color, + ColorKeyframeTrack, + ColorManagement, + CompressedArrayTexture, + CompressedCubeTexture, + CompressedTexture, + CompressedTextureLoader, + ConeGeometry, + CubeTexture, + Curve, + CustomBlending, + CylinderGeometry, + Data3DTexture, + DataTexture, + DataTextureLoader, + DataUtils, + DefaultLoadingManager, + DepthStencilFormat, + DepthTexture, + DirectionalLight, + DisplayP3ColorSpace, + DoubleSide, + DstAlphaFactor, + DstColorFactor, + DynamicDrawUsage, + EllipseCurve, + EqualStencilFunc, + EquirectangularReflectionMapping, + EquirectangularRefractionMapping, + Euler, + EventDispatcher, + ExtrudeGeometry, + FileLoader, + Float32BufferAttribute, + FloatType, + FramebufferTexture, + FrontSide, + Frustum, + GridHelper, + Group, + HalfFloatType, + ImageBitmapLoader, + IncrementStencilOp, + InstancedBufferAttribute, + InstancedBufferGeometry, + InstancedInterleavedBuffer, + InstancedMesh, + Int32BufferAttribute, + InterleavedBuffer, + InterleavedBufferAttribute, + Interpolant, + InterpolateDiscrete, + InterpolateLinear, + Layers, + LightProbe, + Line, + Line3, + LineBasicMaterial, + LineLoop, + LineSegments, + LinearDisplayP3ColorSpace, + LinearFilter, + LinearMipMapLinearFilter, + LinearMipmapLinearFilter, + LinearMipmapNearestFilter, + LinearSRGBColorSpace, + LinearToneMapping, + Loader, + LoaderUtils, + LoadingManager, + MOUSE, + Material, + MathUtils, + Matrix3, + Matrix4, + Mesh, + MeshBasicMaterial, + MeshDepthMaterial, + MeshLambertMaterial, + MeshNormalMaterial, + MeshPhongMaterial, + MeshPhysicalMaterial, + MeshStandardMaterial, + MirroredRepeatWrapping, + MultiplyOperation, + NearestFilter, + NearestMipmapLinearFilter, + NearestMipmapNearestFilter, + NeutralToneMapping, + NoBlending, + NoColorSpace, + NormalBlending, + NumberKeyframeTrack, + Object3D, + OctahedronGeometry, + OneMinusSrcAlphaFactor, + OrthographicCamera, + Path, + PerspectiveCamera, + Plane, + PlaneGeometry, + PointLight, + Points, + PointsMaterial, + PropertyBinding, + Quaternion, + QuaternionKeyframeTrack, + REVISION, + RGBADepthPacking, + RGBAFormat, + RGBA_ASTC_4x4_Format, + RGBA_ASTC_6x6_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_2BPPV1_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT1_Format, + RGBA_S3TC_DXT3_Format, + RGBA_S3TC_DXT5_Format, + RGB_BPTC_SIGNED_Format, + RGB_BPTC_UNSIGNED_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_2BPPV1_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_S3TC_DXT1_Format, + RGFormat, + RGIntegerFormat, + RawShaderMaterial, + Ray, + Raycaster, + RectAreaLight, + RedFormat, + RedIntegerFormat, + ReinhardToneMapping, + RepeatWrapping, + SRGBColorSpace, + SRGBTransfer, + Scene, + ShaderChunk, + ShaderLib, + ShaderMaterial, + Shape, + ShapePath as ShapePath2, + ShapeUtils, + Skeleton, + SkeletonHelper, + SkinnedMesh, + Source, + Sphere, + SphereGeometry, + Spherical, + SphericalHarmonics3, + SpotLight, + Sprite, + SpriteMaterial, + SrcAlphaFactor, + StereoCamera, + TOUCH, + TangentSpaceNormalMap, + Texture, + TextureLoader, + TorusGeometry, + Triangle, + TriangleFanDrawMode, + TriangleStripDrawMode, + TrianglesDrawMode, + UVMapping, + Uint16BufferAttribute, + Uniform, + UniformsLib, + UniformsUtils, + UnsignedByteType, + UnsignedInt248Type, + UnsignedShortType, + Vector2, + Vector3, + Vector4, + VectorKeyframeTrack, + WebGLCubeRenderTarget, + WebGLRenderTarget, + WebGLRenderer, + WireframeGeometry, + ZeroFactor, + __export +} from "./chunk-33KXLYU5.js"; + +// node_modules/three/examples/jsm/animation/AnimationClipCreator.js +var AnimationClipCreator = class { + static CreateRotationAnimation(period, axis = "x") { + const times = [0, period], values2 = [0, 360]; + const trackName = ".rotation[" + axis + "]"; + const track = new NumberKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, period, [track]); + } + static CreateScaleAxisAnimation(period, axis = "x") { + const times = [0, period], values2 = [0, 1]; + const trackName = ".scale[" + axis + "]"; + const track = new NumberKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, period, [track]); + } + static CreateShakeAnimation(duration, shakeScale) { + const times = [], values2 = [], tmp = new Vector3(); + for (let i = 0; i < duration * 10; i++) { + times.push(i / 10); + tmp.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1).multiply(shakeScale).toArray(values2, values2.length); + } + const trackName = ".position"; + const track = new VectorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreatePulsationAnimation(duration, pulseScale) { + const times = [], values2 = [], tmp = new Vector3(); + for (let i = 0; i < duration * 10; i++) { + times.push(i / 10); + const scaleFactor = Math.random() * pulseScale; + tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values2, values2.length); + } + const trackName = ".scale"; + const track = new VectorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreateVisibilityAnimation(duration) { + const times = [0, duration / 2, duration], values2 = [true, false, true]; + const trackName = ".visible"; + const track = new BooleanKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } + static CreateMaterialColorAnimation(duration, colors) { + const times = [], values2 = [], timeStep = duration / colors.length; + for (let i = 0; i < colors.length; i++) { + times.push(i * timeStep); + const color = colors[i]; + values2.push(color.r, color.g, color.b); + } + const trackName = ".material.color"; + const track = new ColorKeyframeTrack(trackName, times, values2); + return new AnimationClip(null, duration, [track]); + } +}; + +// node_modules/three/examples/jsm/animation/CCDIKSolver.js +var _q = new Quaternion(); +var _targetPos = new Vector3(); +var _targetVec = new Vector3(); +var _effectorPos = new Vector3(); +var _effectorVec = new Vector3(); +var _linkPos = new Vector3(); +var _invLinkQ = new Quaternion(); +var _linkScale = new Vector3(); +var _axis = new Vector3(); +var _vector = new Vector3(); +var _matrix = new Matrix4(); +var CCDIKSolver = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Array} iks + */ + constructor(mesh, iks = []) { + this.mesh = mesh; + this.iks = iks; + this._valid(); + } + /** + * Update all IK bones. + * + * @return {CCDIKSolver} + */ + update() { + const iks = this.iks; + for (let i = 0, il = iks.length; i < il; i++) { + this.updateOne(iks[i]); + } + return this; + } + /** + * Update one IK bone + * + * @param {Object} ik parameter + * @return {CCDIKSolver} + */ + updateOne(ik) { + const bones = this.mesh.skeleton.bones; + const math = Math; + const effector = bones[ik.effector]; + const target = bones[ik.target]; + _targetPos.setFromMatrixPosition(target.matrixWorld); + const links = ik.links; + const iteration = ik.iteration !== void 0 ? ik.iteration : 1; + for (let i = 0; i < iteration; i++) { + let rotated = false; + for (let j = 0, jl = links.length; j < jl; j++) { + const link = bones[links[j].index]; + if (links[j].enabled === false) break; + const limitation = links[j].limitation; + const rotationMin = links[j].rotationMin; + const rotationMax = links[j].rotationMax; + link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale); + _invLinkQ.invert(); + _effectorPos.setFromMatrixPosition(effector.matrixWorld); + _effectorVec.subVectors(_effectorPos, _linkPos); + _effectorVec.applyQuaternion(_invLinkQ); + _effectorVec.normalize(); + _targetVec.subVectors(_targetPos, _linkPos); + _targetVec.applyQuaternion(_invLinkQ); + _targetVec.normalize(); + let angle = _targetVec.dot(_effectorVec); + if (angle > 1) { + angle = 1; + } else if (angle < -1) { + angle = -1; + } + angle = math.acos(angle); + if (angle < 1e-5) continue; + if (ik.minAngle !== void 0 && angle < ik.minAngle) { + angle = ik.minAngle; + } + if (ik.maxAngle !== void 0 && angle > ik.maxAngle) { + angle = ik.maxAngle; + } + _axis.crossVectors(_effectorVec, _targetVec); + _axis.normalize(); + _q.setFromAxisAngle(_axis, angle); + link.quaternion.multiply(_q); + if (limitation !== void 0) { + let c2 = link.quaternion.w; + if (c2 > 1) c2 = 1; + const c22 = math.sqrt(1 - c2 * c2); + link.quaternion.set( + limitation.x * c22, + limitation.y * c22, + limitation.z * c22, + c2 + ); + } + if (rotationMin !== void 0) { + link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin)); + } + if (rotationMax !== void 0) { + link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax)); + } + link.updateMatrixWorld(true); + rotated = true; + } + if (!rotated) break; + } + return this; + } + /** + * Creates Helper + * + * @param {number} sphereSize + * @return {CCDIKHelper} + */ + createHelper(sphereSize) { + return new CCDIKHelper(this.mesh, this.iks, sphereSize); + } + // private methods + _valid() { + const iks = this.iks; + const bones = this.mesh.skeleton.bones; + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const effector = bones[ik.effector]; + const links = ik.links; + let link0, link1; + link0 = effector; + for (let j = 0, jl = links.length; j < jl; j++) { + link1 = bones[links[j].index]; + if (link0.parent !== link1) { + console.warn("THREE.CCDIKSolver: bone " + link0.name + " is not the child of bone " + link1.name); + } + link0 = link1; + } + } + } +}; +function getPosition(bone, matrixWorldInv) { + return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv); +} +function setPositionOfBoneToAttributeArray(array, index2, bone, matrixWorldInv) { + const v = getPosition(bone, matrixWorldInv); + array[index2 * 3 + 0] = v.x; + array[index2 * 3 + 1] = v.y; + array[index2 * 3 + 2] = v.z; +} +var CCDIKHelper = class extends Object3D { + constructor(mesh, iks = [], sphereSize = 0.25) { + super(); + this.root = mesh; + this.iks = iks; + this.matrix.copy(mesh.matrixWorld); + this.matrixAutoUpdate = false; + this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8); + this.targetSphereMaterial = new MeshBasicMaterial({ + color: new Color(16746632), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.effectorSphereMaterial = new MeshBasicMaterial({ + color: new Color(8978312), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.linkSphereMaterial = new MeshBasicMaterial({ + color: new Color(8947967), + depthTest: false, + depthWrite: false, + transparent: true + }); + this.lineMaterial = new LineBasicMaterial({ + color: new Color(16711680), + depthTest: false, + depthWrite: false, + transparent: true + }); + this._init(); + } + /** + * Updates IK bones visualization. + */ + updateMatrixWorld(force) { + const mesh = this.root; + if (this.visible) { + let offset = 0; + const iks = this.iks; + const bones = mesh.skeleton.bones; + _matrix.copy(mesh.matrixWorld).invert(); + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const targetBone = bones[ik.target]; + const effectorBone = bones[ik.effector]; + const targetMesh = this.children[offset++]; + const effectorMesh = this.children[offset++]; + targetMesh.position.copy(getPosition(targetBone, _matrix)); + effectorMesh.position.copy(getPosition(effectorBone, _matrix)); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = ik.links[j]; + const linkBone = bones[link.index]; + const linkMesh = this.children[offset++]; + linkMesh.position.copy(getPosition(linkBone, _matrix)); + } + const line2 = this.children[offset++]; + const array = line2.geometry.attributes.position.array; + setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix); + setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = ik.links[j]; + const linkBone = bones[link.index]; + setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix); + } + line2.geometry.attributes.position.needsUpdate = true; + } + } + this.matrix.copy(mesh.matrixWorld); + super.updateMatrixWorld(force); + } + /** + * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. + */ + dispose() { + this.sphereGeometry.dispose(); + this.targetSphereMaterial.dispose(); + this.effectorSphereMaterial.dispose(); + this.linkSphereMaterial.dispose(); + this.lineMaterial.dispose(); + const children = this.children; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.isLine) child.geometry.dispose(); + } + } + // private method + _init() { + const scope = this; + const iks = this.iks; + function createLineGeometry(ik) { + const geometry = new BufferGeometry(); + const vertices = new Float32Array((2 + ik.links.length) * 3); + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + return geometry; + } + function createTargetMesh() { + return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial); + } + function createEffectorMesh() { + return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial); + } + function createLinkMesh() { + return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial); + } + function createLine(ik) { + return new Line(createLineGeometry(ik), scope.lineMaterial); + } + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + this.add(createTargetMesh()); + this.add(createEffectorMesh()); + for (let j = 0, jl = ik.links.length; j < jl; j++) { + this.add(createLinkMesh()); + } + this.add(createLine(ik)); + } + } +}; + +// node_modules/three/examples/jsm/animation/MMDPhysics.js +var MMDPhysics = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Array} rigidBodyParams + * @param {Array} (optional) constraintParams + * @param {Object} params - (optional) + * @param {Number} params.unitStep - Default is 1 / 65. + * @param {Integer} params.maxStepNum - Default is 3. + * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 ) + */ + constructor(mesh, rigidBodyParams, constraintParams = [], params = {}) { + if (typeof Ammo === "undefined") { + throw new Error("THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js"); + } + this.manager = new ResourceManager(); + this.mesh = mesh; + this.unitStep = params.unitStep !== void 0 ? params.unitStep : 1 / 65; + this.maxStepNum = params.maxStepNum !== void 0 ? params.maxStepNum : 3; + this.gravity = new Vector3(0, -9.8 * 10, 0); + if (params.gravity !== void 0) this.gravity.copy(params.gravity); + this.world = params.world !== void 0 ? params.world : null; + this.bodies = []; + this.constraints = []; + this._init(mesh, rigidBodyParams, constraintParams); + } + /** + * Advances Physics calculation and updates bones. + * + * @param {Number} delta - time in second + * @return {MMDPhysics} + */ + update(delta) { + const manager = this.manager; + const mesh = this.mesh; + let isNonDefaultScale = false; + const position2 = manager.allocThreeVector3(); + const quaternion = manager.allocThreeQuaternion(); + const scale2 = manager.allocThreeVector3(); + mesh.matrixWorld.decompose(position2, quaternion, scale2); + if (scale2.x !== 1 || scale2.y !== 1 || scale2.z !== 1) { + isNonDefaultScale = true; + } + let parent2; + if (isNonDefaultScale) { + parent2 = mesh.parent; + if (parent2 !== null) mesh.parent = null; + scale2.copy(this.mesh.scale); + mesh.scale.set(1, 1, 1); + mesh.updateMatrixWorld(true); + } + this._updateRigidBodies(); + this._stepSimulation(delta); + this._updateBones(); + if (isNonDefaultScale) { + if (parent2 !== null) mesh.parent = parent2; + mesh.scale.copy(scale2); + } + manager.freeThreeVector3(scale2); + manager.freeThreeQuaternion(quaternion); + manager.freeThreeVector3(position2); + return this; + } + /** + * Resets rigid bodies transorm to current bone's. + * + * @return {MMDPhysics} + */ + reset() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].reset(); + } + return this; + } + /** + * Warm ups Rigid bodies. Calculates cycles steps. + * + * @param {Integer} cycles + * @return {MMDPhysics} + */ + warmup(cycles) { + for (let i = 0; i < cycles; i++) { + this.update(1 / 60); + } + return this; + } + /** + * Sets gravity. + * + * @param {Vector3} gravity + * @return {MMDPhysicsHelper} + */ + setGravity(gravity) { + this.world.setGravity(new Ammo.btVector3(gravity.x, gravity.y, gravity.z)); + this.gravity.copy(gravity); + return this; + } + /** + * Creates MMDPhysicsHelper + * + * @return {MMDPhysicsHelper} + */ + createHelper() { + return new MMDPhysicsHelper(this.mesh, this); + } + // private methods + _init(mesh, rigidBodyParams, constraintParams) { + const manager = this.manager; + const parent2 = mesh.parent; + if (parent2 !== null) mesh.parent = null; + const currentPosition = manager.allocThreeVector3(); + const currentQuaternion = manager.allocThreeQuaternion(); + const currentScale = manager.allocThreeVector3(); + currentPosition.copy(mesh.position); + currentQuaternion.copy(mesh.quaternion); + currentScale.copy(mesh.scale); + mesh.position.set(0, 0, 0); + mesh.quaternion.set(0, 0, 0, 1); + mesh.scale.set(1, 1, 1); + mesh.updateMatrixWorld(true); + if (this.world === null) { + this.world = this._createWorld(); + this.setGravity(this.gravity); + } + this._initRigidBodies(rigidBodyParams); + this._initConstraints(constraintParams); + if (parent2 !== null) mesh.parent = parent2; + mesh.position.copy(currentPosition); + mesh.quaternion.copy(currentQuaternion); + mesh.scale.copy(currentScale); + mesh.updateMatrixWorld(true); + this.reset(); + manager.freeThreeVector3(currentPosition); + manager.freeThreeQuaternion(currentQuaternion); + manager.freeThreeVector3(currentScale); + } + _createWorld() { + const config = new Ammo.btDefaultCollisionConfiguration(); + const dispatcher = new Ammo.btCollisionDispatcher(config); + const cache = new Ammo.btDbvtBroadphase(); + const solver = new Ammo.btSequentialImpulseConstraintSolver(); + const world2 = new Ammo.btDiscreteDynamicsWorld(dispatcher, cache, solver, config); + return world2; + } + _initRigidBodies(rigidBodies) { + for (let i = 0, il = rigidBodies.length; i < il; i++) { + this.bodies.push(new RigidBody( + this.mesh, + this.world, + rigidBodies[i], + this.manager + )); + } + } + _initConstraints(constraints) { + for (let i = 0, il = constraints.length; i < il; i++) { + const params = constraints[i]; + const bodyA = this.bodies[params.rigidBodyIndex1]; + const bodyB = this.bodies[params.rigidBodyIndex2]; + this.constraints.push(new Constraint(this.mesh, this.world, bodyA, bodyB, params, this.manager)); + } + } + _stepSimulation(delta) { + const unitStep = this.unitStep; + let stepTime = delta; + let maxStepNum = (delta / unitStep | 0) + 1; + if (stepTime < unitStep) { + stepTime = unitStep; + maxStepNum = 1; + } + if (maxStepNum > this.maxStepNum) { + maxStepNum = this.maxStepNum; + } + this.world.stepSimulation(stepTime, maxStepNum, unitStep); + } + _updateRigidBodies() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].updateFromBone(); + } + } + _updateBones() { + for (let i = 0, il = this.bodies.length; i < il; i++) { + this.bodies[i].updateBone(); + } + } +}; +var ResourceManager = class { + constructor() { + this.threeVector3s = []; + this.threeMatrix4s = []; + this.threeQuaternions = []; + this.threeEulers = []; + this.transforms = []; + this.quaternions = []; + this.vector3s = []; + } + allocThreeVector3() { + return this.threeVector3s.length > 0 ? this.threeVector3s.pop() : new Vector3(); + } + freeThreeVector3(v) { + this.threeVector3s.push(v); + } + allocThreeMatrix4() { + return this.threeMatrix4s.length > 0 ? this.threeMatrix4s.pop() : new Matrix4(); + } + freeThreeMatrix4(m) { + this.threeMatrix4s.push(m); + } + allocThreeQuaternion() { + return this.threeQuaternions.length > 0 ? this.threeQuaternions.pop() : new Quaternion(); + } + freeThreeQuaternion(q2) { + this.threeQuaternions.push(q2); + } + allocThreeEuler() { + return this.threeEulers.length > 0 ? this.threeEulers.pop() : new Euler(); + } + freeThreeEuler(e) { + this.threeEulers.push(e); + } + allocTransform() { + return this.transforms.length > 0 ? this.transforms.pop() : new Ammo.btTransform(); + } + freeTransform(t3) { + this.transforms.push(t3); + } + allocQuaternion() { + return this.quaternions.length > 0 ? this.quaternions.pop() : new Ammo.btQuaternion(); + } + freeQuaternion(q2) { + this.quaternions.push(q2); + } + allocVector3() { + return this.vector3s.length > 0 ? this.vector3s.pop() : new Ammo.btVector3(); + } + freeVector3(v) { + this.vector3s.push(v); + } + setIdentity(t3) { + t3.setIdentity(); + } + getBasis(t3) { + var q2 = this.allocQuaternion(); + t3.getBasis().getRotation(q2); + return q2; + } + getBasisAsMatrix3(t3) { + var q2 = this.getBasis(t3); + var m = this.quaternionToMatrix3(q2); + this.freeQuaternion(q2); + return m; + } + getOrigin(t3) { + return t3.getOrigin(); + } + setOrigin(t3, v) { + t3.getOrigin().setValue(v.x(), v.y(), v.z()); + } + copyOrigin(t1, t22) { + var o = t22.getOrigin(); + this.setOrigin(t1, o); + } + setBasis(t3, q2) { + t3.setRotation(q2); + } + setBasisFromMatrix3(t3, m) { + var q2 = this.matrix3ToQuaternion(m); + this.setBasis(t3, q2); + this.freeQuaternion(q2); + } + setOriginFromArray3(t3, a2) { + t3.getOrigin().setValue(a2[0], a2[1], a2[2]); + } + setOriginFromThreeVector3(t3, v) { + t3.getOrigin().setValue(v.x, v.y, v.z); + } + setBasisFromArray3(t3, a2) { + var thQ = this.allocThreeQuaternion(); + var thE = this.allocThreeEuler(); + thE.set(a2[0], a2[1], a2[2]); + this.setBasisFromThreeQuaternion(t3, thQ.setFromEuler(thE)); + this.freeThreeEuler(thE); + this.freeThreeQuaternion(thQ); + } + setBasisFromThreeQuaternion(t3, a2) { + var q2 = this.allocQuaternion(); + q2.setX(a2.x); + q2.setY(a2.y); + q2.setZ(a2.z); + q2.setW(a2.w); + this.setBasis(t3, q2); + this.freeQuaternion(q2); + } + multiplyTransforms(t1, t22) { + var t3 = this.allocTransform(); + this.setIdentity(t3); + var m1 = this.getBasisAsMatrix3(t1); + var m2 = this.getBasisAsMatrix3(t22); + var o1 = this.getOrigin(t1); + var o2 = this.getOrigin(t22); + var v12 = this.multiplyMatrix3ByVector3(m1, o2); + var v2 = this.addVector3(v12, o1); + this.setOrigin(t3, v2); + var m3 = this.multiplyMatrices3(m1, m2); + this.setBasisFromMatrix3(t3, m3); + this.freeVector3(v12); + this.freeVector3(v2); + return t3; + } + inverseTransform(t3) { + var t22 = this.allocTransform(); + var m1 = this.getBasisAsMatrix3(t3); + var o = this.getOrigin(t3); + var m2 = this.transposeMatrix3(m1); + var v12 = this.negativeVector3(o); + var v2 = this.multiplyMatrix3ByVector3(m2, v12); + this.setOrigin(t22, v2); + this.setBasisFromMatrix3(t22, m2); + this.freeVector3(v12); + this.freeVector3(v2); + return t22; + } + multiplyMatrices3(m1, m2) { + var m3 = []; + var v10 = this.rowOfMatrix3(m1, 0); + var v11 = this.rowOfMatrix3(m1, 1); + var v12 = this.rowOfMatrix3(m1, 2); + var v20 = this.columnOfMatrix3(m2, 0); + var v21 = this.columnOfMatrix3(m2, 1); + var v22 = this.columnOfMatrix3(m2, 2); + m3[0] = this.dotVectors3(v10, v20); + m3[1] = this.dotVectors3(v10, v21); + m3[2] = this.dotVectors3(v10, v22); + m3[3] = this.dotVectors3(v11, v20); + m3[4] = this.dotVectors3(v11, v21); + m3[5] = this.dotVectors3(v11, v22); + m3[6] = this.dotVectors3(v12, v20); + m3[7] = this.dotVectors3(v12, v21); + m3[8] = this.dotVectors3(v12, v22); + this.freeVector3(v10); + this.freeVector3(v11); + this.freeVector3(v12); + this.freeVector3(v20); + this.freeVector3(v21); + this.freeVector3(v22); + return m3; + } + addVector3(v12, v2) { + var v = this.allocVector3(); + v.setValue(v12.x() + v2.x(), v12.y() + v2.y(), v12.z() + v2.z()); + return v; + } + dotVectors3(v12, v2) { + return v12.x() * v2.x() + v12.y() * v2.y() + v12.z() * v2.z(); + } + rowOfMatrix3(m, i) { + var v = this.allocVector3(); + v.setValue(m[i * 3 + 0], m[i * 3 + 1], m[i * 3 + 2]); + return v; + } + columnOfMatrix3(m, i) { + var v = this.allocVector3(); + v.setValue(m[i + 0], m[i + 3], m[i + 6]); + return v; + } + negativeVector3(v) { + var v2 = this.allocVector3(); + v2.setValue(-v.x(), -v.y(), -v.z()); + return v2; + } + multiplyMatrix3ByVector3(m, v) { + var v4 = this.allocVector3(); + var v0 = this.rowOfMatrix3(m, 0); + var v12 = this.rowOfMatrix3(m, 1); + var v2 = this.rowOfMatrix3(m, 2); + var x2 = this.dotVectors3(v0, v); + var y2 = this.dotVectors3(v12, v); + var z = this.dotVectors3(v2, v); + v4.setValue(x2, y2, z); + this.freeVector3(v0); + this.freeVector3(v12); + this.freeVector3(v2); + return v4; + } + transposeMatrix3(m) { + var m2 = []; + m2[0] = m[0]; + m2[1] = m[3]; + m2[2] = m[6]; + m2[3] = m[1]; + m2[4] = m[4]; + m2[5] = m[7]; + m2[6] = m[2]; + m2[7] = m[5]; + m2[8] = m[8]; + return m2; + } + quaternionToMatrix3(q2) { + var m = []; + var x2 = q2.x(); + var y2 = q2.y(); + var z = q2.z(); + var w = q2.w(); + var xx = x2 * x2; + var yy = y2 * y2; + var zz = z * z; + var xy = x2 * y2; + var yz = y2 * z; + var zx = z * x2; + var xw = x2 * w; + var yw = y2 * w; + var zw = z * w; + m[0] = 1 - 2 * (yy + zz); + m[1] = 2 * (xy - zw); + m[2] = 2 * (zx + yw); + m[3] = 2 * (xy + zw); + m[4] = 1 - 2 * (zz + xx); + m[5] = 2 * (yz - xw); + m[6] = 2 * (zx - yw); + m[7] = 2 * (yz + xw); + m[8] = 1 - 2 * (xx + yy); + return m; + } + matrix3ToQuaternion(m) { + var t3 = m[0] + m[4] + m[8]; + var s, x2, y2, z, w; + if (t3 > 0) { + s = Math.sqrt(t3 + 1) * 2; + w = 0.25 * s; + x2 = (m[7] - m[5]) / s; + y2 = (m[2] - m[6]) / s; + z = (m[3] - m[1]) / s; + } else if (m[0] > m[4] && m[0] > m[8]) { + s = Math.sqrt(1 + m[0] - m[4] - m[8]) * 2; + w = (m[7] - m[5]) / s; + x2 = 0.25 * s; + y2 = (m[1] + m[3]) / s; + z = (m[2] + m[6]) / s; + } else if (m[4] > m[8]) { + s = Math.sqrt(1 + m[4] - m[0] - m[8]) * 2; + w = (m[2] - m[6]) / s; + x2 = (m[1] + m[3]) / s; + y2 = 0.25 * s; + z = (m[5] + m[7]) / s; + } else { + s = Math.sqrt(1 + m[8] - m[0] - m[4]) * 2; + w = (m[3] - m[1]) / s; + x2 = (m[2] + m[6]) / s; + y2 = (m[5] + m[7]) / s; + z = 0.25 * s; + } + var q2 = this.allocQuaternion(); + q2.setX(x2); + q2.setY(y2); + q2.setZ(z); + q2.setW(w); + return q2; + } +}; +var RigidBody = class { + constructor(mesh, world2, params, manager) { + this.mesh = mesh; + this.world = world2; + this.params = params; + this.manager = manager; + this.body = null; + this.bone = null; + this.boneOffsetForm = null; + this.boneOffsetFormInverse = null; + this._init(); + } + /** + * Resets rigid body transform to the current bone's. + * + * @return {RigidBody} + */ + reset() { + this._setTransformFromBone(); + return this; + } + /** + * Updates rigid body's transform from the current bone. + * + * @return {RidigBody} + */ + updateFromBone() { + if (this.params.boneIndex !== -1 && this.params.type === 0) { + this._setTransformFromBone(); + } + return this; + } + /** + * Updates bone from the current ridid body's transform. + * + * @return {RidigBody} + */ + updateBone() { + if (this.params.type === 0 || this.params.boneIndex === -1) { + return this; + } + this._updateBoneRotation(); + if (this.params.type === 1) { + this._updateBonePosition(); + } + this.bone.updateMatrixWorld(true); + if (this.params.type === 2) { + this._setPositionFromBone(); + } + return this; + } + // private methods + _init() { + function generateShape(p2) { + switch (p2.shapeType) { + case 0: + return new Ammo.btSphereShape(p2.width); + case 1: + return new Ammo.btBoxShape(new Ammo.btVector3(p2.width, p2.height, p2.depth)); + case 2: + return new Ammo.btCapsuleShape(p2.width, p2.height); + default: + throw new Error("unknown shape type " + p2.shapeType); + } + } + const manager = this.manager; + const params = this.params; + const bones = this.mesh.skeleton.bones; + const bone = params.boneIndex === -1 ? new Bone() : bones[params.boneIndex]; + const shape = generateShape(params); + const weight = params.type === 0 ? 0 : params.weight; + const localInertia = manager.allocVector3(); + localInertia.setValue(0, 0, 0); + if (weight !== 0) { + shape.calculateLocalInertia(weight, localInertia); + } + const boneOffsetForm = manager.allocTransform(); + manager.setIdentity(boneOffsetForm); + manager.setOriginFromArray3(boneOffsetForm, params.position); + manager.setBasisFromArray3(boneOffsetForm, params.rotation); + const vector = manager.allocThreeVector3(); + const boneForm = manager.allocTransform(); + manager.setIdentity(boneForm); + manager.setOriginFromThreeVector3(boneForm, bone.getWorldPosition(vector)); + const form = manager.multiplyTransforms(boneForm, boneOffsetForm); + const state = new Ammo.btDefaultMotionState(form); + const info = new Ammo.btRigidBodyConstructionInfo(weight, state, shape, localInertia); + info.set_m_friction(params.friction); + info.set_m_restitution(params.restitution); + const body = new Ammo.btRigidBody(info); + if (params.type === 0) { + body.setCollisionFlags(body.getCollisionFlags() | 2); + body.setActivationState(4); + } + body.setDamping(params.positionDamping, params.rotationDamping); + body.setSleepingThresholds(0, 0); + this.world.addRigidBody(body, 1 << params.groupIndex, params.groupTarget); + this.body = body; + this.bone = bone; + this.boneOffsetForm = boneOffsetForm; + this.boneOffsetFormInverse = manager.inverseTransform(boneOffsetForm); + manager.freeVector3(localInertia); + manager.freeTransform(form); + manager.freeTransform(boneForm); + manager.freeThreeVector3(vector); + } + _getBoneTransform() { + const manager = this.manager; + const p2 = manager.allocThreeVector3(); + const q2 = manager.allocThreeQuaternion(); + const s = manager.allocThreeVector3(); + this.bone.matrixWorld.decompose(p2, q2, s); + const tr = manager.allocTransform(); + manager.setOriginFromThreeVector3(tr, p2); + manager.setBasisFromThreeQuaternion(tr, q2); + const form = manager.multiplyTransforms(tr, this.boneOffsetForm); + manager.freeTransform(tr); + manager.freeThreeVector3(s); + manager.freeThreeQuaternion(q2); + manager.freeThreeVector3(p2); + return form; + } + _getWorldTransformForBone() { + const manager = this.manager; + const tr = this.body.getCenterOfMassTransform(); + return manager.multiplyTransforms(tr, this.boneOffsetFormInverse); + } + _setTransformFromBone() { + const manager = this.manager; + const form = this._getBoneTransform(); + this.body.setCenterOfMassTransform(form); + this.body.getMotionState().setWorldTransform(form); + manager.freeTransform(form); + } + _setPositionFromBone() { + const manager = this.manager; + const form = this._getBoneTransform(); + const tr = manager.allocTransform(); + this.body.getMotionState().getWorldTransform(tr); + manager.copyOrigin(tr, form); + this.body.setCenterOfMassTransform(tr); + this.body.getMotionState().setWorldTransform(tr); + manager.freeTransform(tr); + manager.freeTransform(form); + } + _updateBoneRotation() { + const manager = this.manager; + const tr = this._getWorldTransformForBone(); + const q2 = manager.getBasis(tr); + const thQ = manager.allocThreeQuaternion(); + const thQ2 = manager.allocThreeQuaternion(); + const thQ3 = manager.allocThreeQuaternion(); + thQ.set(q2.x(), q2.y(), q2.z(), q2.w()); + thQ2.setFromRotationMatrix(this.bone.matrixWorld); + thQ2.conjugate(); + thQ2.multiply(thQ); + thQ3.setFromRotationMatrix(this.bone.matrix); + this.bone.quaternion.copy(thQ2.multiply(thQ3).normalize()); + manager.freeThreeQuaternion(thQ); + manager.freeThreeQuaternion(thQ2); + manager.freeThreeQuaternion(thQ3); + manager.freeQuaternion(q2); + manager.freeTransform(tr); + } + _updateBonePosition() { + const manager = this.manager; + const tr = this._getWorldTransformForBone(); + const thV = manager.allocThreeVector3(); + const o = manager.getOrigin(tr); + thV.set(o.x(), o.y(), o.z()); + if (this.bone.parent) { + this.bone.parent.worldToLocal(thV); + } + this.bone.position.copy(thV); + manager.freeThreeVector3(thV); + manager.freeTransform(tr); + } +}; +var Constraint = class { + /** + * @param {THREE.SkinnedMesh} mesh + * @param {Ammo.btDiscreteDynamicsWorld} world + * @param {RigidBody} bodyA + * @param {RigidBody} bodyB + * @param {Object} params + * @param {ResourceManager} manager + */ + constructor(mesh, world2, bodyA, bodyB, params, manager) { + this.mesh = mesh; + this.world = world2; + this.bodyA = bodyA; + this.bodyB = bodyB; + this.params = params; + this.manager = manager; + this.constraint = null; + this._init(); + } + // private method + _init() { + const manager = this.manager; + const params = this.params; + const bodyA = this.bodyA; + const bodyB = this.bodyB; + const form = manager.allocTransform(); + manager.setIdentity(form); + manager.setOriginFromArray3(form, params.position); + manager.setBasisFromArray3(form, params.rotation); + const formA = manager.allocTransform(); + const formB = manager.allocTransform(); + bodyA.body.getMotionState().getWorldTransform(formA); + bodyB.body.getMotionState().getWorldTransform(formB); + const formInverseA = manager.inverseTransform(formA); + const formInverseB = manager.inverseTransform(formB); + const formA2 = manager.multiplyTransforms(formInverseA, form); + const formB2 = manager.multiplyTransforms(formInverseB, form); + const constraint = new Ammo.btGeneric6DofSpringConstraint(bodyA.body, bodyB.body, formA2, formB2, true); + const lll = manager.allocVector3(); + const lul = manager.allocVector3(); + const all = manager.allocVector3(); + const aul = manager.allocVector3(); + lll.setValue( + params.translationLimitation1[0], + params.translationLimitation1[1], + params.translationLimitation1[2] + ); + lul.setValue( + params.translationLimitation2[0], + params.translationLimitation2[1], + params.translationLimitation2[2] + ); + all.setValue( + params.rotationLimitation1[0], + params.rotationLimitation1[1], + params.rotationLimitation1[2] + ); + aul.setValue( + params.rotationLimitation2[0], + params.rotationLimitation2[1], + params.rotationLimitation2[2] + ); + constraint.setLinearLowerLimit(lll); + constraint.setLinearUpperLimit(lul); + constraint.setAngularLowerLimit(all); + constraint.setAngularUpperLimit(aul); + for (let i = 0; i < 3; i++) { + if (params.springPosition[i] !== 0) { + constraint.enableSpring(i, true); + constraint.setStiffness(i, params.springPosition[i]); + } + } + for (let i = 0; i < 3; i++) { + if (params.springRotation[i] !== 0) { + constraint.enableSpring(i + 3, true); + constraint.setStiffness(i + 3, params.springRotation[i]); + } + } + if (constraint.setParam !== void 0) { + for (let i = 0; i < 6; i++) { + constraint.setParam(2, 0.475, i); + } + } + this.world.addConstraint(constraint, true); + this.constraint = constraint; + manager.freeTransform(form); + manager.freeTransform(formA); + manager.freeTransform(formB); + manager.freeTransform(formInverseA); + manager.freeTransform(formInverseB); + manager.freeTransform(formA2); + manager.freeTransform(formB2); + manager.freeVector3(lll); + manager.freeVector3(lul); + manager.freeVector3(all); + manager.freeVector3(aul); + } +}; +var _position = new Vector3(); +var _quaternion = new Quaternion(); +var _scale = new Vector3(); +var _matrixWorldInv = new Matrix4(); +var MMDPhysicsHelper = class extends Object3D { + /** + * Visualize Rigid bodies + * + * @param {THREE.SkinnedMesh} mesh + * @param {Physics} physics + */ + constructor(mesh, physics) { + super(); + this.root = mesh; + this.physics = physics; + this.matrix.copy(mesh.matrixWorld); + this.matrixAutoUpdate = false; + this.materials = []; + this.materials.push( + new MeshBasicMaterial({ + color: new Color(16746632), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this.materials.push( + new MeshBasicMaterial({ + color: new Color(8978312), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this.materials.push( + new MeshBasicMaterial({ + color: new Color(8947967), + wireframe: true, + depthTest: false, + depthWrite: false, + opacity: 0.25, + transparent: true + }) + ); + this._init(); + } + /** + * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. + */ + dispose() { + const materials = this.materials; + const children = this.children; + for (let i = 0; i < materials.length; i++) { + materials[i].dispose(); + } + for (let i = 0; i < children.length; i++) { + const child = children[i]; + if (child.isMesh) child.geometry.dispose(); + } + } + /** + * Updates Rigid Bodies visualization. + */ + updateMatrixWorld(force) { + var mesh = this.root; + if (this.visible) { + var bodies = this.physics.bodies; + _matrixWorldInv.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)).invert(); + for (var i = 0, il = bodies.length; i < il; i++) { + var body = bodies[i].body; + var child = this.children[i]; + var tr = body.getCenterOfMassTransform(); + var origin = tr.getOrigin(); + var rotation2 = tr.getRotation(); + child.position.set(origin.x(), origin.y(), origin.z()).applyMatrix4(_matrixWorldInv); + child.quaternion.setFromRotationMatrix(_matrixWorldInv).multiply( + _quaternion.set(rotation2.x(), rotation2.y(), rotation2.z(), rotation2.w()) + ); + } + } + this.matrix.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)); + super.updateMatrixWorld(force); + } + // private method + _init() { + var bodies = this.physics.bodies; + function createGeometry(param2) { + switch (param2.shapeType) { + case 0: + return new SphereGeometry(param2.width, 16, 8); + case 1: + return new BoxGeometry(param2.width * 2, param2.height * 2, param2.depth * 2, 8, 8, 8); + case 2: + return new CapsuleGeometry(param2.width, param2.height, 8, 16); + default: + return null; + } + } + for (var i = 0, il = bodies.length; i < il; i++) { + var param = bodies[i].params; + this.add(new Mesh(createGeometry(param), this.materials[param.type])); + } + } +}; + +// node_modules/three/examples/jsm/animation/MMDAnimationHelper.js +var MMDAnimationHelper = class { + /** + * @param {Object} params - (optional) + * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true. + * @param {Number} params.afterglow - Default is 0.0. + * @param {boolean} params.resetPhysicsOnLoop - Default is true. + */ + constructor(params = {}) { + this.meshes = []; + this.camera = null; + this.cameraTarget = new Object3D(); + this.cameraTarget.name = "target"; + this.audio = null; + this.audioManager = null; + this.objects = /* @__PURE__ */ new WeakMap(); + this.configuration = { + sync: params.sync !== void 0 ? params.sync : true, + afterglow: params.afterglow !== void 0 ? params.afterglow : 0, + resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true, + pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false + }; + this.enabled = { + animation: true, + ik: true, + grant: true, + physics: true, + cameraAnimation: true + }; + this.onBeforePhysics = function() { + }; + this.sharedPhysics = false; + this.masterPhysics = null; + } + /** + * Adds an Three.js Object to helper and setups animation. + * The anmation durations of added objects are synched + * if this.configuration.sync is true. + * + * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object + * @param {Object} params - (optional) + * @param {THREE.AnimationClip|Array} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined. + * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true. + * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60. + * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65. + * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3. + * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ). + * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0. + * @return {MMDAnimationHelper} + */ + add(object, params = {}) { + if (object.isSkinnedMesh) { + this._addMesh(object, params); + } else if (object.isCamera) { + this._setupCamera(object, params); + } else if (object.type === "Audio") { + this._setupAudio(object, params); + } else { + throw new Error("THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); + } + if (this.configuration.sync) this._syncDuration(); + return this; + } + /** + * Removes an Three.js Object from helper. + * + * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object + * @return {MMDAnimationHelper} + */ + remove(object) { + if (object.isSkinnedMesh) { + this._removeMesh(object); + } else if (object.isCamera) { + this._clearCamera(object); + } else if (object.type === "Audio") { + this._clearAudio(object); + } else { + throw new Error("THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); + } + if (this.configuration.sync) this._syncDuration(); + return this; + } + /** + * Updates the animation. + * + * @param {Number} delta + * @return {MMDAnimationHelper} + */ + update(delta) { + if (this.audioManager !== null) this.audioManager.control(delta); + for (let i = 0; i < this.meshes.length; i++) { + this._animateMesh(this.meshes[i], delta); + } + if (this.sharedPhysics) this._updateSharedPhysics(delta); + if (this.camera !== null) this._animateCamera(this.camera, delta); + return this; + } + /** + * Changes the pose of SkinnedMesh as VPD specifies. + * + * @param {THREE.SkinnedMesh} mesh + * @param {Object} vpd - VPD content parsed MMDParser + * @param {Object} params - (optional) + * @param {boolean} params.resetPose - Default is true. + * @param {boolean} params.ik - Default is true. + * @param {boolean} params.grant - Default is true. + * @return {MMDAnimationHelper} + */ + pose(mesh, vpd, params = {}) { + if (params.resetPose !== false) mesh.pose(); + const bones = mesh.skeleton.bones; + const boneParams = vpd.bones; + const boneNameDictionary = {}; + for (let i = 0, il = bones.length; i < il; i++) { + boneNameDictionary[bones[i].name] = i; + } + const vector = new Vector3(); + const quaternion = new Quaternion(); + for (let i = 0, il = boneParams.length; i < il; i++) { + const boneParam = boneParams[i]; + const boneIndex = boneNameDictionary[boneParam.name]; + if (boneIndex === void 0) continue; + const bone = bones[boneIndex]; + bone.position.add(vector.fromArray(boneParam.translation)); + bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion)); + } + mesh.updateMatrixWorld(true); + if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { + const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); + const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null; + const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null; + this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver); + } else { + if (params.ik !== false) { + this._createCCDIKSolver(mesh).update(); + } + if (params.grant !== false) { + this.createGrantSolver(mesh).update(); + } + } + return this; + } + /** + * Enabes/Disables an animation feature. + * + * @param {string} key + * @param {boolean} enabled + * @return {MMDAnimationHelper} + */ + enable(key2, enabled) { + if (this.enabled[key2] === void 0) { + throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key2); + } + this.enabled[key2] = enabled; + if (key2 === "physics") { + for (let i = 0, il = this.meshes.length; i < il; i++) { + this._optimizeIK(this.meshes[i], enabled); + } + } + return this; + } + /** + * Creates an GrantSolver instance. + * + * @param {THREE.SkinnedMesh} mesh + * @return {GrantSolver} + */ + createGrantSolver(mesh) { + return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants); + } + // private methods + _addMesh(mesh, params) { + if (this.meshes.indexOf(mesh) >= 0) { + throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added."); + } + this.meshes.push(mesh); + this.objects.set(mesh, { looped: false }); + this._setupMeshAnimation(mesh, params.animation); + if (params.physics !== false) { + this._setupMeshPhysics(mesh, params); + } + return this; + } + _setupCamera(camera, params) { + if (this.camera === camera) { + throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set."); + } + if (this.camera) this.clearCamera(this.camera); + this.camera = camera; + camera.add(this.cameraTarget); + this.objects.set(camera, {}); + if (params.animation !== void 0) { + this._setupCameraAnimation(camera, params.animation); + } + return this; + } + _setupAudio(audio, params) { + if (this.audio === audio) { + throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set."); + } + if (this.audio) this.clearAudio(this.audio); + this.audio = audio; + this.audioManager = new AudioManager(audio, params); + this.objects.set(this.audioManager, { + duration: this.audioManager.duration + }); + return this; + } + _removeMesh(mesh) { + let found = false; + let writeIndex = 0; + for (let i = 0, il = this.meshes.length; i < il; i++) { + if (this.meshes[i] === mesh) { + this.objects.delete(mesh); + found = true; + continue; + } + this.meshes[writeIndex++] = this.meshes[i]; + } + if (!found) { + throw new Error("THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."); + } + this.meshes.length = writeIndex; + return this; + } + _clearCamera(camera) { + if (camera !== this.camera) { + throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet."); + } + this.camera.remove(this.cameraTarget); + this.objects.delete(this.camera); + this.camera = null; + return this; + } + _clearAudio(audio) { + if (audio !== this.audio) { + throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet."); + } + this.objects.delete(this.audioManager); + this.audio = null; + this.audioManager = null; + return this; + } + _setupMeshAnimation(mesh, animation) { + const objects = this.objects.get(mesh); + if (animation !== void 0) { + const animations = Array.isArray(animation) ? animation : [animation]; + objects.mixer = new AnimationMixer(mesh); + for (let i = 0, il = animations.length; i < il; i++) { + objects.mixer.clipAction(animations[i]).play(); + } + objects.mixer.addEventListener("loop", function(event) { + const tracks = event.action._clip.tracks; + if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones") return; + objects.looped = true; + }); + } + objects.ikSolver = this._createCCDIKSolver(mesh); + objects.grantSolver = this.createGrantSolver(mesh); + return this; + } + _setupCameraAnimation(camera, animation) { + const animations = Array.isArray(animation) ? animation : [animation]; + const objects = this.objects.get(camera); + objects.mixer = new AnimationMixer(camera); + for (let i = 0, il = animations.length; i < il; i++) { + objects.mixer.clipAction(animations[i]).play(); + } + } + _setupMeshPhysics(mesh, params) { + const objects = this.objects.get(mesh); + if (params.world === void 0 && this.sharedPhysics) { + const masterPhysics = this._getMasterPhysics(); + if (masterPhysics !== null) world = masterPhysics.world; + } + objects.physics = this._createMMDPhysics(mesh, params); + if (objects.mixer && params.animationWarmup !== false) { + this._animateMesh(mesh, 0); + objects.physics.reset(); + } + objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60); + this._optimizeIK(mesh, true); + } + _animateMesh(mesh, delta) { + const objects = this.objects.get(mesh); + const mixer = objects.mixer; + const ikSolver = objects.ikSolver; + const grantSolver = objects.grantSolver; + const physics = objects.physics; + const looped = objects.looped; + if (mixer && this.enabled.animation) { + this._restoreBones(mesh); + mixer.update(delta); + this._saveBones(mesh); + if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { + if (!objects.sortedBonesData) objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); + this._animatePMXMesh( + mesh, + objects.sortedBonesData, + ikSolver && this.enabled.ik ? ikSolver : null, + grantSolver && this.enabled.grant ? grantSolver : null + ); + } else { + if (ikSolver && this.enabled.ik) { + mesh.updateMatrixWorld(true); + ikSolver.update(); + } + if (grantSolver && this.enabled.grant) { + grantSolver.update(); + } + } + } + if (looped === true && this.enabled.physics) { + if (physics && this.configuration.resetPhysicsOnLoop) physics.reset(); + objects.looped = false; + } + if (physics && this.enabled.physics && !this.sharedPhysics) { + this.onBeforePhysics(mesh); + physics.update(delta); + } + } + // Sort bones in order by 1. transformationClass and 2. bone index. + // In PMX animation system, bone transformations should be processed + // in this order. + _sortBoneDataArray(boneDataArray) { + return boneDataArray.sort(function(a2, b3) { + if (a2.transformationClass !== b3.transformationClass) { + return a2.transformationClass - b3.transformationClass; + } else { + return a2.index - b3.index; + } + }); + } + // PMX Animation system is a bit too complex and doesn't great match to + // Three.js Animation system. This method attempts to simulate it as much as + // possible but doesn't perfectly simulate. + // This method is more costly than the regular one so + // you are recommended to set constructor parameter "pmxAnimation: true" + // only if your PMX model animation doesn't work well. + // If you need better method you would be required to write your own. + _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) { + _quaternionIndex = 0; + _grantResultMap.clear(); + for (let i = 0, il = sortedBonesData.length; i < il; i++) { + updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver); + } + mesh.updateMatrixWorld(true); + return this; + } + _animateCamera(camera, delta) { + const mixer = this.objects.get(camera).mixer; + if (mixer && this.enabled.cameraAnimation) { + mixer.update(delta); + camera.updateProjectionMatrix(); + camera.up.set(0, 1, 0); + camera.up.applyQuaternion(camera.quaternion); + camera.lookAt(this.cameraTarget.position); + } + } + _optimizeIK(mesh, physicsEnabled) { + const iks = mesh.geometry.userData.MMD.iks; + const bones = mesh.geometry.userData.MMD.bones; + for (let i = 0, il = iks.length; i < il; i++) { + const ik = iks[i]; + const links = ik.links; + for (let j = 0, jl = links.length; j < jl; j++) { + const link = links[j]; + if (physicsEnabled === true) { + link.enabled = bones[link.index].rigidBodyType > 0 ? false : true; + } else { + link.enabled = true; + } + } + } + } + _createCCDIKSolver(mesh) { + if (CCDIKSolver === void 0) { + throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver."); + } + return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks); + } + _createMMDPhysics(mesh, params) { + if (MMDPhysics === void 0) { + throw new Error("THREE.MMDPhysics: Import MMDPhysics."); + } + return new MMDPhysics( + mesh, + mesh.geometry.userData.MMD.rigidBodies, + mesh.geometry.userData.MMD.constraints, + params + ); + } + /* + * Detects the longest duration and then sets it to them to sync. + * TODO: Not to access private properties ( ._actions and ._clip ) + */ + _syncDuration() { + let max2 = 0; + const objects = this.objects; + const meshes = this.meshes; + const camera = this.camera; + const audioManager = this.audioManager; + for (let i = 0, il = meshes.length; i < il; i++) { + const mixer = this.objects.get(meshes[i]).mixer; + if (mixer === void 0) continue; + for (let j = 0; j < mixer._actions.length; j++) { + const clip = mixer._actions[j]._clip; + if (!objects.has(clip)) { + objects.set(clip, { + duration: clip.duration + }); + } + max2 = Math.max(max2, objects.get(clip).duration); + } + } + if (camera !== null) { + const mixer = this.objects.get(camera).mixer; + if (mixer !== void 0) { + for (let i = 0, il = mixer._actions.length; i < il; i++) { + const clip = mixer._actions[i]._clip; + if (!objects.has(clip)) { + objects.set(clip, { + duration: clip.duration + }); + } + max2 = Math.max(max2, objects.get(clip).duration); + } + } + } + if (audioManager !== null) { + max2 = Math.max(max2, objects.get(audioManager).duration); + } + max2 += this.configuration.afterglow; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const mixer = this.objects.get(this.meshes[i]).mixer; + if (mixer === void 0) continue; + for (let j = 0, jl = mixer._actions.length; j < jl; j++) { + mixer._actions[j]._clip.duration = max2; + } + } + if (camera !== null) { + const mixer = this.objects.get(camera).mixer; + if (mixer !== void 0) { + for (let i = 0, il = mixer._actions.length; i < il; i++) { + mixer._actions[i]._clip.duration = max2; + } + } + } + if (audioManager !== null) { + audioManager.duration = max2; + } + } + // workaround + _updatePropertyMixersBuffer(mesh) { + const mixer = this.objects.get(mesh).mixer; + const propertyMixers = mixer._bindings; + const accuIndex = mixer._accuIndex; + for (let i = 0, il = propertyMixers.length; i < il; i++) { + const propertyMixer = propertyMixers[i]; + const buffer = propertyMixer.buffer; + const stride = propertyMixer.valueSize; + const offset = (accuIndex + 1) * stride; + propertyMixer.binding.getValue(buffer, offset); + } + } + /* + * Avoiding these two issues by restore/save bones before/after mixer animation. + * + * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer. + * Calculating IK, Grant, and Physics after mixer animation can break + * the cache coherency. + * + * 2. Applying Grant two or more times without reset the posing breaks model. + */ + _saveBones(mesh) { + const objects = this.objects.get(mesh); + const bones = mesh.skeleton.bones; + let backupBones = objects.backupBones; + if (backupBones === void 0) { + backupBones = new Float32Array(bones.length * 7); + objects.backupBones = backupBones; + } + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + bone.position.toArray(backupBones, i * 7); + bone.quaternion.toArray(backupBones, i * 7 + 3); + } + } + _restoreBones(mesh) { + const objects = this.objects.get(mesh); + const backupBones = objects.backupBones; + if (backupBones === void 0) return; + const bones = mesh.skeleton.bones; + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + bone.position.fromArray(backupBones, i * 7); + bone.quaternion.fromArray(backupBones, i * 7 + 3); + } + } + // experimental + _getMasterPhysics() { + if (this.masterPhysics !== null) return this.masterPhysics; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const physics = this.meshes[i].physics; + if (physics !== void 0 && physics !== null) { + this.masterPhysics = physics; + return this.masterPhysics; + } + } + return null; + } + _updateSharedPhysics(delta) { + if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics) return; + const physics = this._getMasterPhysics(); + if (physics === null) return; + for (let i = 0, il = this.meshes.length; i < il; i++) { + const p2 = this.meshes[i].physics; + if (p2 !== null && p2 !== void 0) { + p2.updateRigidBodies(); + } + } + physics.stepSimulation(delta); + for (let i = 0, il = this.meshes.length; i < il; i++) { + const p2 = this.meshes[i].physics; + if (p2 !== null && p2 !== void 0) { + p2.updateBones(); + } + } + } +}; +var _quaternions = []; +var _quaternionIndex = 0; +function getQuaternion() { + if (_quaternionIndex >= _quaternions.length) { + _quaternions.push(new Quaternion()); + } + return _quaternions[_quaternionIndex++]; +} +var _grantResultMap = /* @__PURE__ */ new Map(); +function updateOne(mesh, boneIndex, ikSolver, grantSolver) { + const bones = mesh.skeleton.bones; + const bonesData = mesh.geometry.userData.MMD.bones; + const boneData = bonesData[boneIndex]; + const bone = bones[boneIndex]; + if (_grantResultMap.has(boneIndex)) return; + const quaternion = getQuaternion(); + _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion)); + if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) { + const parentIndex = boneData.grant.parentIndex; + const ratio = boneData.grant.ratio; + if (!_grantResultMap.has(parentIndex)) { + updateOne(mesh, parentIndex, ikSolver, grantSolver); + } + grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio); + } + if (ikSolver && boneData.ik) { + mesh.updateMatrixWorld(true); + ikSolver.updateOne(boneData.ik); + const links = boneData.ik.links; + for (let i = 0, il = links.length; i < il; i++) { + const link = links[i]; + if (link.enabled === false) continue; + const linkIndex = link.index; + if (_grantResultMap.has(linkIndex)) { + _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion)); + } + } + } + quaternion.copy(bone.quaternion); +} +var AudioManager = class { + /** + * @param {THREE.Audio} audio + * @param {Object} params - (optional) + * @param {Nuumber} params.delayTime + */ + constructor(audio, params = {}) { + this.audio = audio; + this.elapsedTime = 0; + this.currentTime = 0; + this.delayTime = params.delayTime !== void 0 ? params.delayTime : 0; + this.audioDuration = this.audio.buffer.duration; + this.duration = this.audioDuration + this.delayTime; + } + /** + * @param {Number} delta + * @return {AudioManager} + */ + control(delta) { + this.elapsed += delta; + this.currentTime += delta; + if (this._shouldStopAudio()) this.audio.stop(); + if (this._shouldStartAudio()) this.audio.play(); + return this; + } + // private methods + _shouldStartAudio() { + if (this.audio.isPlaying) return false; + while (this.currentTime >= this.duration) { + this.currentTime -= this.duration; + } + if (this.currentTime < this.delayTime) return false; + if (this.currentTime - this.delayTime > this.audioDuration) return false; + return true; + } + _shouldStopAudio() { + return this.audio.isPlaying && this.currentTime >= this.duration; + } +}; +var _q2 = new Quaternion(); +var GrantSolver = class { + constructor(mesh, grants = []) { + this.mesh = mesh; + this.grants = grants; + } + /** + * Solve all the grant bones + * @return {GrantSolver} + */ + update() { + const grants = this.grants; + for (let i = 0, il = grants.length; i < il; i++) { + this.updateOne(grants[i]); + } + return this; + } + /** + * Solve a grant bone + * @param {Object} grant - grant parameter + * @return {GrantSolver} + */ + updateOne(grant) { + const bones = this.mesh.skeleton.bones; + const bone = bones[grant.index]; + const parentBone = bones[grant.parentIndex]; + if (grant.isLocal) { + if (grant.affectPosition) { + } + if (grant.affectRotation) { + } + } else { + if (grant.affectPosition) { + } + if (grant.affectRotation) { + this.addGrantRotation(bone, parentBone.quaternion, grant.ratio); + } + } + return this; + } + addGrantRotation(bone, q2, ratio) { + _q2.set(0, 0, 0, 1); + _q2.slerp(q2, ratio); + bone.quaternion.multiply(_q2); + return this; + } +}; + +// node_modules/three/examples/jsm/shaders/BokehShader2.js +var BokehShader = { + name: "BokehShader", + uniforms: { + "textureWidth": { value: 1 }, + "textureHeight": { value: 1 }, + "focalDepth": { value: 1 }, + "focalLength": { value: 24 }, + "fstop": { value: 0.9 }, + "tColor": { value: null }, + "tDepth": { value: null }, + "maxblur": { value: 1 }, + "showFocus": { value: 0 }, + "manualdof": { value: 0 }, + "vignetting": { value: 0 }, + "depthblur": { value: 0 }, + "threshold": { value: 0.5 }, + "gain": { value: 2 }, + "bias": { value: 0.5 }, + "fringe": { value: 0.7 }, + "znear": { value: 0.1 }, + "zfar": { value: 100 }, + "noise": { value: 1 }, + "dithering": { value: 1e-4 }, + "pentagon": { value: 0 }, + "shaderFocus": { value: 1 }, + "focusCoords": { value: new Vector2() } + }, + vertexShader: ( + /* glsl */ + ` + + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + }` + ), + fragmentShader: ( + /* glsl */ + ` + + #include + + varying vec2 vUv; + + uniform sampler2D tColor; + uniform sampler2D tDepth; + uniform float textureWidth; + uniform float textureHeight; + + uniform float focalDepth; //focal distance value in meters, but you may use autofocus option below + uniform float focalLength; //focal length in mm + uniform float fstop; //f-stop value + uniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range) + + /* + make sure that these two values are the same for your camera, otherwise distances will be wrong. + */ + + uniform float znear; // camera clipping start + uniform float zfar; // camera clipping end + + //------------------------------------------ + //user variables + + const int samples = SAMPLES; //samples on the first ring + const int rings = RINGS; //ring count + + const int maxringsamples = rings * samples; + + uniform bool manualdof; // manual dof calculation + float ndofstart = 1.0; // near dof blur start + float ndofdist = 2.0; // near dof blur falloff distance + float fdofstart = 1.0; // far dof blur start + float fdofdist = 3.0; // far dof blur falloff distance + + float CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm) + + uniform bool vignetting; // use optical lens vignetting + + float vignout = 1.3; // vignetting outer border + float vignin = 0.0; // vignetting inner border + float vignfade = 22.0; // f-stops till vignete fades + + uniform bool shaderFocus; + // disable if you use external focalDepth value + + uniform vec2 focusCoords; + // autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right) + // if center of screen use vec2(0.5, 0.5); + + uniform float maxblur; + //clamp value of max blur (0.0 = no blur, 1.0 default) + + uniform float threshold; // highlight threshold; + uniform float gain; // highlight gain; + + uniform float bias; // bokeh edge bias + uniform float fringe; // bokeh chromatic aberration / fringing + + uniform bool noise; //use noise instead of pattern for sample dithering + + uniform float dithering; + + uniform bool depthblur; // blur the depth buffer + float dbsize = 1.25; // depth blur size + + /* + next part is experimental + not looking good with small sample and ring count + looks okay starting from samples = 4, rings = 4 + */ + + uniform bool pentagon; //use pentagon as bokeh shape? + float feather = 0.4; //pentagon shape feather + + //------------------------------------------ + + float penta(vec2 coords) { + //pentagonal shape + float scale = float(rings) - 1.3; + vec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0); + vec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0); + vec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0); + vec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0); + vec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0); + vec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0); + + vec4 one = vec4( 1.0 ); + + vec4 P = vec4((coords),vec2(scale, scale)); + + vec4 dist = vec4(0.0); + float inorout = -4.0; + + dist.x = dot( P, HS0 ); + dist.y = dot( P, HS1 ); + dist.z = dot( P, HS2 ); + dist.w = dot( P, HS3 ); + + dist = smoothstep( -feather, feather, dist ); + + inorout += dot( dist, one ); + + dist.x = dot( P, HS4 ); + dist.y = HS5.w - abs( P.z ); + + dist = smoothstep( -feather, feather, dist ); + inorout += dist.x; + + return clamp( inorout, 0.0, 1.0 ); + } + + float bdepth(vec2 coords) { + // Depth buffer blur + float d = 0.0; + float kernel[9]; + vec2 offset[9]; + + vec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize; + + offset[0] = vec2(-wh.x,-wh.y); + offset[1] = vec2( 0.0, -wh.y); + offset[2] = vec2( wh.x -wh.y); + + offset[3] = vec2(-wh.x, 0.0); + offset[4] = vec2( 0.0, 0.0); + offset[5] = vec2( wh.x, 0.0); + + offset[6] = vec2(-wh.x, wh.y); + offset[7] = vec2( 0.0, wh.y); + offset[8] = vec2( wh.x, wh.y); + + kernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0; + kernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0; + kernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0; + + + for( int i=0; i<9; i++ ) { + float tmp = texture2D(tDepth, coords + offset[i]).r; + d += tmp * kernel[i]; + } + + return d; + } + + + vec3 color(vec2 coords,float blur) { + //processing the sample + + vec3 col = vec3(0.0); + vec2 texel = vec2(1.0/textureWidth,1.0/textureHeight); + + col.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r; + col.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g; + col.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b; + + vec3 lumcoeff = vec3(0.299,0.587,0.114); + float lum = dot(col.rgb, lumcoeff); + float thresh = max((lum-threshold)*gain, 0.0); + return col+mix(vec3(0.0),col,thresh*blur); + } + + vec3 debugFocus(vec3 col, float blur, float depth) { + float edge = 0.002*depth; //distance based edge smoothing + float m = clamp(smoothstep(0.0,edge,blur),0.0,1.0); + float e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0); + + col = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6); + col = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2); + + return col; + } + + float linearize(float depth) { + return -zfar * znear / (depth * (zfar - znear) - zfar); + } + + float vignette() { + float dist = distance(vUv.xy, vec2(0.5,0.5)); + dist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist); + return clamp(dist,0.0,1.0); + } + + float gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) { + float rings2 = float(rings); + float step = PI*2.0 / float(ringsamples); + float pw = cos(j*step)*i; + float ph = sin(j*step)*i; + float p = 1.0; + if (pentagon) { + p = penta(vec2(pw,ph)); + } + col += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p; + return 1.0 * mix(1.0, i /rings2, bias) * p; + } + + void main() { + //scene depth calculation + + float depth = linearize(texture2D(tDepth,vUv.xy).x); + + // Blur depth? + if ( depthblur ) { + depth = linearize(bdepth(vUv.xy)); + } + + //focal plane calculation + + float fDepth = focalDepth; + + if (shaderFocus) { + + fDepth = linearize(texture2D(tDepth,focusCoords).x); + + } + + // dof blur factor calculation + + float blur = 0.0; + + if (manualdof) { + float a = depth-fDepth; // Focal plane + float b = (a-fdofstart)/fdofdist; // Far DoF + float c = (-a-ndofstart)/ndofdist; // Near Dof + blur = (a>0.0) ? b : c; + } else { + float f = focalLength; // focal length in mm + float d = fDepth*1000.0; // focal plane in mm + float o = depth*1000.0; // depth in mm + + float a = (o*f)/(o-f); + float b = (d*f)/(d-f); + float c = (d-f)/(d*fstop*CoC); + + blur = abs(a-b)*c; + } + + blur = clamp(blur,0.0,1.0); + + // calculation of pattern for dithering + + vec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur; + + // getting blur x and y step factor + + float w = (1.0/textureWidth)*blur*maxblur+noise.x; + float h = (1.0/textureHeight)*blur*maxblur+noise.y; + + // calculation of final color + + vec3 col = vec3(0.0); + + if(blur < 0.05) { + //some optimization thingy + col = texture2D(tColor, vUv.xy).rgb; + } else { + col = texture2D(tColor, vUv.xy).rgb; + float s = 1.0; + int ringsamples; + + for (int i = 1; i <= rings; i++) { + /*unboxstart*/ + ringsamples = i * samples; + + for (int j = 0 ; j < maxringsamples ; j++) { + if (j >= ringsamples) break; + s += gather(float(i), float(j), ringsamples, col, w, h, blur); + } + /*unboxend*/ + } + + col /= s; //divide by sample count + } + + if (showFocus) { + col = debugFocus(col, blur, depth); + } + + if (vignetting) { + col *= vignette(); + } + + gl_FragColor.rgb = col; + gl_FragColor.a = 1.0; + + #include + #include + }` + ) +}; +var BokehDepthShader = { + name: "BokehDepthShader", + uniforms: { + "mNear": { value: 1 }, + "mFar": { value: 1e3 } + }, + vertexShader: ( + /* glsl */ + ` + + varying float vViewZDepth; + + void main() { + + #include + #include + + vViewZDepth = - mvPosition.z; + + }` + ), + fragmentShader: ( + /* glsl */ + ` + + uniform float mNear; + uniform float mFar; + + varying float vViewZDepth; + + void main() { + + float color = 1.0 - smoothstep( mNear, mFar, vViewZDepth ); + gl_FragColor = vec4( vec3( color ), 1.0 ); + + }` + ) +}; + +// node_modules/three/examples/jsm/cameras/CinematicCamera.js +var CinematicCamera = class extends PerspectiveCamera { + constructor(fov, aspect, near, far) { + super(fov, aspect, near, far); + this.type = "CinematicCamera"; + this.postprocessing = { enabled: true }; + this.shaderSettings = { + rings: 3, + samples: 4 + }; + const depthShader = BokehDepthShader; + this.materialDepth = new ShaderMaterial({ + uniforms: depthShader.uniforms, + vertexShader: depthShader.vertexShader, + fragmentShader: depthShader.fragmentShader + }); + this.materialDepth.uniforms["mNear"].value = near; + this.materialDepth.uniforms["mFar"].value = far; + this.setLens(); + this.initPostProcessing(); + } + // providing fnumber and coc(Circle of Confusion) as extra arguments + // In case of cinematicCamera, having a default lens set is important + // if fnumber and coc are not provided, cinematicCamera tries to act as a basic PerspectiveCamera + setLens(focalLength = 35, filmGauge = 35, fNumber = 8, coc = 0.019) { + this.filmGauge = filmGauge; + this.setFocalLength(focalLength); + this.fNumber = fNumber; + this.coc = coc; + this.aperture = focalLength / this.fNumber; + this.hyperFocal = focalLength * focalLength / (this.aperture * this.coc); + } + linearize(depth) { + const zfar = this.far; + const znear = this.near; + return -zfar * znear / (depth * (zfar - znear) - zfar); + } + smoothstep(near, far, depth) { + const x2 = this.saturate((depth - near) / (far - near)); + return x2 * x2 * (3 - 2 * x2); + } + saturate(x2) { + return Math.max(0, Math.min(1, x2)); + } + // function for focusing at a distance from the camera + focusAt(focusDistance = 20) { + const focalLength = this.getFocalLength(); + this.focus = focusDistance; + this.nearPoint = this.hyperFocal * this.focus / (this.hyperFocal + (this.focus - focalLength)); + this.farPoint = this.hyperFocal * this.focus / (this.hyperFocal - (this.focus - focalLength)); + this.depthOfField = this.farPoint - this.nearPoint; + if (this.depthOfField < 0) this.depthOfField = 0; + this.sdistance = this.smoothstep(this.near, this.far, this.focus); + this.ldistance = this.linearize(1 - this.sdistance); + this.postprocessing.bokeh_uniforms["focalDepth"].value = this.ldistance; + } + initPostProcessing() { + if (this.postprocessing.enabled) { + this.postprocessing.scene = new Scene(); + this.postprocessing.camera = new OrthographicCamera(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, -1e4, 1e4); + this.postprocessing.scene.add(this.postprocessing.camera); + this.postprocessing.rtTextureDepth = new WebGLRenderTarget(window.innerWidth, window.innerHeight); + this.postprocessing.rtTextureColor = new WebGLRenderTarget(window.innerWidth, window.innerHeight); + const bokeh_shader = BokehShader; + this.postprocessing.bokeh_uniforms = UniformsUtils.clone(bokeh_shader.uniforms); + this.postprocessing.bokeh_uniforms["tColor"].value = this.postprocessing.rtTextureColor.texture; + this.postprocessing.bokeh_uniforms["tDepth"].value = this.postprocessing.rtTextureDepth.texture; + this.postprocessing.bokeh_uniforms["manualdof"].value = 0; + this.postprocessing.bokeh_uniforms["shaderFocus"].value = 0; + this.postprocessing.bokeh_uniforms["fstop"].value = 2.8; + this.postprocessing.bokeh_uniforms["showFocus"].value = 1; + this.postprocessing.bokeh_uniforms["focalDepth"].value = 0.1; + this.postprocessing.bokeh_uniforms["znear"].value = this.near; + this.postprocessing.bokeh_uniforms["zfar"].value = this.near; + this.postprocessing.bokeh_uniforms["textureWidth"].value = window.innerWidth; + this.postprocessing.bokeh_uniforms["textureHeight"].value = window.innerHeight; + this.postprocessing.materialBokeh = new ShaderMaterial({ + uniforms: this.postprocessing.bokeh_uniforms, + vertexShader: bokeh_shader.vertexShader, + fragmentShader: bokeh_shader.fragmentShader, + defines: { + RINGS: this.shaderSettings.rings, + SAMPLES: this.shaderSettings.samples, + DEPTH_PACKING: 1 + } + }); + this.postprocessing.quad = new Mesh(new PlaneGeometry(window.innerWidth, window.innerHeight), this.postprocessing.materialBokeh); + this.postprocessing.quad.position.z = -500; + this.postprocessing.scene.add(this.postprocessing.quad); + } + } + renderCinematic(scene, renderer2) { + if (this.postprocessing.enabled) { + const currentRenderTarget = renderer2.getRenderTarget(); + renderer2.clear(); + scene.overrideMaterial = null; + renderer2.setRenderTarget(this.postprocessing.rtTextureColor); + renderer2.clear(); + renderer2.render(scene, this); + scene.overrideMaterial = this.materialDepth; + renderer2.setRenderTarget(this.postprocessing.rtTextureDepth); + renderer2.clear(); + renderer2.render(scene, this); + renderer2.setRenderTarget(null); + renderer2.render(this.postprocessing.scene, this.postprocessing.camera); + renderer2.setRenderTarget(currentRenderTarget); + } + } +}; + +// node_modules/three/examples/jsm/capabilities/WebGL.js +var WebGL = class { + static isWebGLAvailable() { + try { + const canvas = document.createElement("canvas"); + return !!(window.WebGLRenderingContext && (canvas.getContext("webgl") || canvas.getContext("experimental-webgl"))); + } catch (e) { + return false; + } + } + static isWebGL2Available() { + try { + const canvas = document.createElement("canvas"); + return !!(window.WebGL2RenderingContext && canvas.getContext("webgl2")); + } catch (e) { + return false; + } + } + static isColorSpaceAvailable(colorSpace) { + try { + const canvas = document.createElement("canvas"); + const ctx = window.WebGL2RenderingContext && canvas.getContext("webgl2"); + ctx.drawingBufferColorSpace = colorSpace; + return ctx.drawingBufferColorSpace === colorSpace; + } catch (e) { + return false; + } + } + static getWebGLErrorMessage() { + return this.getErrorMessage(1); + } + static getWebGL2ErrorMessage() { + return this.getErrorMessage(2); + } + static getErrorMessage(version) { + const names = { + 1: "WebGL", + 2: "WebGL 2" + }; + const contexts = { + 1: window.WebGLRenderingContext, + 2: window.WebGL2RenderingContext + }; + let message = 'Your $0 does not seem to support $1'; + const element = document.createElement("div"); + element.id = "webglmessage"; + element.style.fontFamily = "monospace"; + element.style.fontSize = "13px"; + element.style.fontWeight = "normal"; + element.style.textAlign = "center"; + element.style.background = "#fff"; + element.style.color = "#000"; + element.style.padding = "1.5em"; + element.style.width = "400px"; + element.style.margin = "5em auto 0"; + if (contexts[version]) { + message = message.replace("$0", "graphics card"); + } else { + message = message.replace("$0", "browser"); + } + message = message.replace("$1", names[version]); + element.innerHTML = message; + return element; + } +}; +var WebGL_default = WebGL; + +// node_modules/three/examples/jsm/controls/ArcballControls.js +var STATE = { + IDLE: Symbol(), + ROTATE: Symbol(), + PAN: Symbol(), + SCALE: Symbol(), + FOV: Symbol(), + FOCUS: Symbol(), + ZROTATE: Symbol(), + TOUCH_MULTI: Symbol(), + ANIMATION_FOCUS: Symbol(), + ANIMATION_ROTATE: Symbol() +}; +var INPUT = { + NONE: Symbol(), + ONE_FINGER: Symbol(), + ONE_FINGER_SWITCHED: Symbol(), + TWO_FINGER: Symbol(), + MULT_FINGER: Symbol(), + CURSOR: Symbol() +}; +var _center = { + x: 0, + y: 0 +}; +var _transformation = { + camera: new Matrix4(), + gizmos: new Matrix4() +}; +var _changeEvent = { type: "change" }; +var _startEvent = { type: "start" }; +var _endEvent = { type: "end" }; +var _raycaster = new Raycaster(); +var _offset = new Vector3(); +var _gizmoMatrixStateTemp = new Matrix4(); +var _cameraMatrixStateTemp = new Matrix4(); +var _scalePointTemp = new Vector3(); +var ArcballControls = class extends EventDispatcher { + constructor(camera, domElement, scene = null) { + super(); + this.camera = null; + this.domElement = domElement; + this.scene = scene; + this.target = new Vector3(); + this._currentTarget = new Vector3(); + this.radiusFactor = 0.67; + this.mouseActions = []; + this._mouseOp = null; + this._v2_1 = new Vector2(); + this._v3_1 = new Vector3(); + this._v3_2 = new Vector3(); + this._m4_1 = new Matrix4(); + this._m4_2 = new Matrix4(); + this._quat = new Quaternion(); + this._translationMatrix = new Matrix4(); + this._rotationMatrix = new Matrix4(); + this._scaleMatrix = new Matrix4(); + this._rotationAxis = new Vector3(); + this._cameraMatrixState = new Matrix4(); + this._cameraProjectionState = new Matrix4(); + this._fovState = 1; + this._upState = new Vector3(); + this._zoomState = 1; + this._nearPos = 0; + this._farPos = 0; + this._gizmoMatrixState = new Matrix4(); + this._up0 = new Vector3(); + this._zoom0 = 1; + this._fov0 = 0; + this._initialNear = 0; + this._nearPos0 = 0; + this._initialFar = 0; + this._farPos0 = 0; + this._cameraMatrixState0 = new Matrix4(); + this._gizmoMatrixState0 = new Matrix4(); + this._button = -1; + this._touchStart = []; + this._touchCurrent = []; + this._input = INPUT.NONE; + this._switchSensibility = 32; + this._startFingerDistance = 0; + this._currentFingerDistance = 0; + this._startFingerRotation = 0; + this._currentFingerRotation = 0; + this._devPxRatio = 0; + this._downValid = true; + this._nclicks = 0; + this._downEvents = []; + this._downStart = 0; + this._clickStart = 0; + this._maxDownTime = 250; + this._maxInterval = 300; + this._posThreshold = 24; + this._movementThreshold = 24; + this._currentCursorPosition = new Vector3(); + this._startCursorPosition = new Vector3(); + this._grid = null; + this._gridPosition = new Vector3(); + this._gizmos = new Group(); + this._curvePts = 128; + this._timeStart = -1; + this._animationId = -1; + this.focusAnimationTime = 500; + this._timePrev = 0; + this._timeCurrent = 0; + this._anglePrev = 0; + this._angleCurrent = 0; + this._cursorPosPrev = new Vector3(); + this._cursorPosCurr = new Vector3(); + this._wPrev = 0; + this._wCurr = 0; + this.adjustNearFar = false; + this.scaleFactor = 1.1; + this.dampingFactor = 25; + this.wMax = 20; + this.enableAnimations = true; + this.enableGrid = false; + this.cursorZoom = false; + this.minFov = 5; + this.maxFov = 90; + this.rotateSpeed = 1; + this.enabled = true; + this.enablePan = true; + this.enableRotate = true; + this.enableZoom = true; + this.enableGizmos = true; + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this._tbRadius = 1; + this._state = STATE.IDLE; + this.setCamera(camera); + if (this.scene != null) { + this.scene.add(this._gizmos); + } + this.domElement.style.touchAction = "none"; + this._devPxRatio = window.devicePixelRatio; + this.initializeMouseActions(); + this._onContextMenu = onContextMenu.bind(this); + this._onWheel = onWheel.bind(this); + this._onPointerUp = onPointerUp.bind(this); + this._onPointerMove = onPointerMove.bind(this); + this._onPointerDown = onPointerDown.bind(this); + this._onPointerCancel = onPointerCancel.bind(this); + this._onWindowResize = onWindowResize.bind(this); + this.domElement.addEventListener("contextmenu", this._onContextMenu); + this.domElement.addEventListener("wheel", this._onWheel); + this.domElement.addEventListener("pointerdown", this._onPointerDown); + this.domElement.addEventListener("pointercancel", this._onPointerCancel); + window.addEventListener("resize", this._onWindowResize); + } + onSinglePanStart(event, operation) { + if (this.enabled) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + switch (operation) { + case "PAN": + if (!this.enablePan) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.PAN, true); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + if (this.enableGrid) { + this.drawGrid(); + this.dispatchEvent(_changeEvent); + } + break; + case "ROTATE": + if (!this.enableRotate) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + } + this.updateTbState(STATE.ROTATE, true); + this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + this.activateGizmos(true); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent = performance.now(); + this._angleCurrent = this._anglePrev = 0; + this._cursorPosPrev.copy(this._startCursorPosition); + this._cursorPosCurr.copy(this._cursorPosPrev); + this._wCurr = 0; + this._wPrev = this._wCurr; + } + this.dispatchEvent(_changeEvent); + break; + case "FOV": + if (!this.camera.isPerspectiveCamera || !this.enableZoom) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.FOV, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + break; + case "ZOOM": + if (!this.enableZoom) { + return; + } + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.SCALE, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + break; + } + } + } + onSinglePanMove(event, opState) { + if (this.enabled) { + const restart = opState != this._state; + this.setCenter(event.clientX, event.clientY); + switch (opState) { + case STATE.PAN: + if (this.enablePan) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + if (this.enableGrid) { + this.drawGrid(); + } + this.activateGizmos(false); + } else { + this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition)); + } + } + break; + case STATE.ROTATE: + if (this.enableRotate) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(true); + } else { + this._currentCursorPosition.copy(this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius)); + const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition); + const angle = this._startCursorPosition.angleTo(this._currentCursorPosition); + const amount = Math.max(distance / this._tbRadius, angle) * this.rotateSpeed; + this.applyTransformMatrix(this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent; + this._timeCurrent = performance.now(); + this._anglePrev = this._angleCurrent; + this._angleCurrent = amount; + this._cursorPosPrev.copy(this._cursorPosCurr); + this._cursorPosCurr.copy(this._currentCursorPosition); + this._wPrev = this._wCurr; + this._wCurr = this.calculateAngularSpeed(this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent); + } + } + } + break; + case STATE.SCALE: + if (this.enableZoom) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); + this.applyTransformMatrix(this.scale(size2, this._v3_1)); + } + } + break; + case STATE.FOV: + if (this.enableZoom && this.camera.isPerspectiveCamera) { + if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._v3_2, false)); + _offset.copy(this._gizmos.position).sub(this.camera.position).normalize().multiplyScalar(newDistance / x2); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + } + } + break; + } + this.dispatchEvent(_changeEvent); + } + } + onSinglePanEnd() { + if (this._state == STATE.ROTATE) { + if (!this.enableRotate) { + return; + } + if (this.enableAnimations) { + const deltaTime = performance.now() - this._timeCurrent; + if (deltaTime < 120) { + const w = Math.abs((this._wPrev + this._wCurr) / 2); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.updateTbState(STATE.ANIMATION_ROTATE, true); + const rotationAxis = self2.calculateRotationAxis(self2._cursorPosPrev, self2._cursorPosCurr); + self2.onRotationAnim(t3, rotationAxis, Math.min(w, self2.wMax)); + }); + } else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else if (this._state == STATE.PAN || this._state == STATE.IDLE) { + this.updateTbState(STATE.IDLE, false); + if (this.enableGrid) { + this.disposeGrid(); + } + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.dispatchEvent(_endEvent); + } + onDoubleTap(event) { + if (this.enabled && this.enablePan && this.scene != null) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera); + if (hitP != null && this.enableAnimations) { + const self2 = this; + if (this._animationId != -1) { + window.cancelAnimationFrame(this._animationId); + } + this._timeStart = -1; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.updateTbState(STATE.ANIMATION_FOCUS, true); + self2.onFocusAnim(t3, hitP, self2._cameraMatrixState, self2._gizmoMatrixState); + }); + } else if (hitP != null && !this.enableAnimations) { + this.updateTbState(STATE.FOCUS, true); + this.focus(hitP, this.scaleFactor); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + } + this.dispatchEvent(_endEvent); + } + onDoublePanStart() { + if (this.enabled && this.enablePan) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.PAN, true); + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + this._startCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true)); + this._currentCursorPosition.copy(this._startCursorPosition); + this.activateGizmos(false); + } + } + onDoublePanMove() { + if (this.enabled && this.enablePan) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + if (this._state != STATE.PAN) { + this.updateTbState(STATE.PAN, true); + this._startCursorPosition.copy(this._currentCursorPosition); + } + this._currentCursorPosition.copy(this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true)); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true)); + this.dispatchEvent(_changeEvent); + } + } + onDoublePanEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + onRotateStart() { + if (this.enabled && this.enableRotate) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + this._currentFingerRotation = this._startFingerRotation; + this.camera.getWorldDirection(this._rotationAxis); + if (!this.enablePan && !this.enableZoom) { + this.activateGizmos(true); + } + } + } + onRotateMove() { + if (this.enabled && this.enableRotate) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + let rotationPoint; + if (this._state != STATE.ZROTATE) { + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this._currentFingerRotation; + } + this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + if (!this.enablePan) { + rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState); + } else { + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + rotationPoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2); + } + const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation); + this.applyTransformMatrix(this.zRotate(rotationPoint, amount)); + this.dispatchEvent(_changeEvent); + } + } + onRotateEnd() { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_endEvent); + } + onPinchStart() { + if (this.enabled && this.enableZoom) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]); + this._currentFingerDistance = this._startFingerDistance; + this.activateGizmos(false); + } + } + onPinchMove() { + if (this.enabled && this.enableZoom) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + const minDistance = 12; + if (this._state != STATE.SCALE) { + this._startFingerDistance = this._currentFingerDistance; + this.updateTbState(STATE.SCALE, true); + } + this._currentFingerDistance = Math.max(this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]), minDistance * this._devPxRatio); + const amount = this._currentFingerDistance / this._startFingerDistance; + let scalePoint; + if (!this.enablePan) { + scalePoint = this._gizmos.position; + } else { + if (this.camera.isOrthographicCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + } else if (this.camera.isPerspectiveCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + } + } + this.applyTransformMatrix(this.scale(amount, scalePoint)); + this.dispatchEvent(_changeEvent); + } + } + onPinchEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + onTriplePanStart() { + if (this.enabled && this.enableZoom) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + this._currentCursorPosition.copy(this._startCursorPosition); + } + } + onTriplePanMove() { + if (this.enabled && this.enableZoom) { + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size2 = 1; + if (movement < 0) { + size2 = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + } else if (movement > 0) { + size2 = Math.pow(this.scaleFactor, movement * screenNotches); + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._v3_2, false)); + _offset.copy(this._gizmos.position).sub(this.camera.position).normalize().multiplyScalar(newDistance / x2); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + this.dispatchEvent(_changeEvent); + } + } + onTriplePanEnd() { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + } + /** + * Set _center's x/y coordinates + * @param {Number} clientX + * @param {Number} clientY + */ + setCenter(clientX, clientY) { + _center.x = clientX; + _center.y = clientY; + } + /** + * Set default mouse actions + */ + initializeMouseActions() { + this.setMouseAction("PAN", 0, "CTRL"); + this.setMouseAction("PAN", 2); + this.setMouseAction("ROTATE", 0); + this.setMouseAction("ZOOM", "WHEEL"); + this.setMouseAction("ZOOM", 1); + this.setMouseAction("FOV", "WHEEL", "SHIFT"); + this.setMouseAction("FOV", 1, "SHIFT"); + } + /** + * Compare two mouse actions + * @param {Object} action1 + * @param {Object} action2 + * @returns {Boolean} True if action1 and action 2 are the same mouse action, false otherwise + */ + compareMouseAction(action1, action2) { + if (action1.operation == action2.operation) { + if (action1.mouse == action2.mouse && action1.key == action2.key) { + return true; + } else { + return false; + } + } else { + return false; + } + } + /** + * 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 + * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV) + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns {Boolean} True if the mouse action has been successfully added, false otherwise + */ + setMouseAction(operation, mouse, key2 = null) { + const operationInput = ["PAN", "ROTATE", "ZOOM", "FOV"]; + const mouseInput = [0, 1, 2, "WHEEL"]; + const keyInput = ["CTRL", "SHIFT", null]; + let state; + if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key2)) { + return false; + } + if (mouse == "WHEEL") { + if (operation != "ZOOM" && operation != "FOV") { + return false; + } + } + switch (operation) { + case "PAN": + state = STATE.PAN; + break; + case "ROTATE": + state = STATE.ROTATE; + break; + case "ZOOM": + state = STATE.SCALE; + break; + case "FOV": + state = STATE.FOV; + break; + } + const action = { + operation, + mouse, + key: key2, + state + }; + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) { + this.mouseActions.splice(i, 1, action); + return true; + } + } + this.mouseActions.push(action); + return true; + } + /** + * Remove a mouse action by specifying its mouse/key combination + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns {Boolean} True if the operation has been succesfully removed, false otherwise + */ + unsetMouseAction(mouse, key2 = null) { + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == mouse && this.mouseActions[i].key == key2) { + this.mouseActions.splice(i, 1); + return true; + } + } + return false; + } + /** + * Return the operation associated to a mouse/keyboard combination + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns The operation if it has been found, null otherwise + */ + getOpFromAction(mouse, key2) { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key2) { + return action.operation; + } + } + if (key2 != null) { + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) { + return action.operation; + } + } + } + return null; + } + /** + * Get the operation associated to mouse and key combination and returns the corresponding FSA state + * @param {Number} mouse Mouse button + * @param {String} key Keyboard modifier + * @returns The FSA state obtained from the operation associated to mouse/keyboard combination + */ + getOpStateFromAction(mouse, key2) { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key2) { + return action.state; + } + } + if (key2 != null) { + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) { + return action.state; + } + } + } + return null; + } + /** + * Calculate the angle between two pointers + * @param {PointerEvent} p1 + * @param {PointerEvent} p2 + * @returns {Number} The angle between two pointers in degrees + */ + getAngle(p1, p2) { + return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI; + } + /** + * Update a PointerEvent inside current pointerevents array + * @param {PointerEvent} event + */ + updateTouchEvent(event) { + for (let i = 0; i < this._touchCurrent.length; i++) { + if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1, event); + break; + } + } + } + /** + * Apply a transformation matrix, to the camera and gizmos + * @param {Object} transformation Object containing matrices to apply to camera and gizmos + */ + applyTransformMatrix(transformation) { + if (transformation.camera != null) { + this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera); + this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.updateMatrix(); + if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) { + this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion); + } + } + if (transformation.gizmos != null) { + this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos); + this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + } + if (this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) { + this._tbRadius = this.calculateTbRadius(this.camera); + if (this.adjustNearFar) { + const cameraDistance = this.camera.position.distanceTo(this._gizmos.position); + const bb = new Box3(); + bb.setFromObject(this._gizmos); + const sphere = new Sphere(); + bb.getBoundingSphere(sphere); + const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length()); + const regularNearPosition = cameraDistance - this._initialNear; + const minNearPos = Math.min(adjustedNearPosition, regularNearPosition); + this.camera.near = cameraDistance - minNearPos; + const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length()); + const regularFarPosition = cameraDistance - this._initialFar; + const minFarPos = Math.min(adjustedFarPosition, regularFarPosition); + this.camera.far = cameraDistance - minFarPos; + this.camera.updateProjectionMatrix(); + } else { + let update = false; + if (this.camera.near != this._initialNear) { + this.camera.near = this._initialNear; + update = true; + } + if (this.camera.far != this._initialFar) { + this.camera.far = this._initialFar; + update = true; + } + if (update) { + this.camera.updateProjectionMatrix(); + } + } + } + } + /** + * Calculate the angular speed + * @param {Number} p0 Position at t0 + * @param {Number} p1 Position at t1 + * @param {Number} t0 Initial time in milliseconds + * @param {Number} t1 Ending time in milliseconds + */ + calculateAngularSpeed(p0, p1, t0, t1) { + const s = p1 - p0; + const t3 = (t1 - t0) / 1e3; + if (t3 == 0) { + return 0; + } + return s / t3; + } + /** + * Calculate the distance between two pointers + * @param {PointerEvent} p0 The first pointer + * @param {PointerEvent} p1 The second pointer + * @returns {number} The distance between the two pointers + */ + calculatePointersDistance(p0, p1) { + return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2)); + } + /** + * Calculate the rotation axis as the vector perpendicular between two vectors + * @param {Vector3} vec1 The first vector + * @param {Vector3} vec2 The second vector + * @returns {Vector3} The normalized rotation axis + */ + calculateRotationAxis(vec1, vec2) { + this._rotationMatrix.extractRotation(this._cameraMatrixState); + this._quat.setFromRotationMatrix(this._rotationMatrix); + this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat); + return this._rotationAxis.normalize().clone(); + } + /** + * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum + * @param {Camera} camera + * @returns {Number} The trackball radius + */ + calculateTbRadius(camera) { + const distance = camera.position.distanceTo(this._gizmos.position); + if (camera.type == "PerspectiveCamera") { + const halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5; + const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV)); + return Math.tan(Math.min(halfFovV, halfFovH)) * distance * this.radiusFactor; + } else if (camera.type == "OrthographicCamera") { + return Math.min(camera.top, camera.right) * this.radiusFactor; + } + } + /** + * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in + * @param {Vector3} point The point of interest + * @param {Number} size Scale factor + * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation) + */ + focus(point, size2, amount = 1) { + _offset.copy(point).sub(this._gizmos.position).multiplyScalar(amount); + this._translationMatrix.makeTranslation(_offset.x, _offset.y, _offset.z); + _gizmoMatrixStateTemp.copy(this._gizmoMatrixState); + this._gizmoMatrixState.premultiply(this._translationMatrix); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + _cameraMatrixStateTemp.copy(this._cameraMatrixState); + this._cameraMatrixState.premultiply(this._translationMatrix); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + if (this.enableZoom) { + this.applyTransformMatrix(this.scale(size2, this._gizmos.position)); + } + this._gizmoMatrixState.copy(_gizmoMatrixStateTemp); + this._cameraMatrixState.copy(_cameraMatrixStateTemp); + } + /** + * Draw a grid and add it to the scene + */ + drawGrid() { + if (this.scene != null) { + const color = 8947848; + const multiplier = 3; + let size2, divisions, maxLength, tick; + if (this.camera.isOrthographicCamera) { + const width2 = this.camera.right - this.camera.left; + const height2 = this.camera.bottom - this.camera.top; + maxLength = Math.max(width2, height2); + tick = maxLength / 20; + size2 = maxLength / this.camera.zoom * multiplier; + divisions = size2 / tick * this.camera.zoom; + } else if (this.camera.isPerspectiveCamera) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5; + const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV)); + maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2; + tick = maxLength / 20; + size2 = maxLength * multiplier; + divisions = size2 / tick; + } + if (this._grid == null) { + this._grid = new GridHelper(size2, divisions, color, color); + this._grid.position.copy(this._gizmos.position); + this._gridPosition.copy(this._grid.position); + this._grid.quaternion.copy(this.camera.quaternion); + this._grid.rotateX(Math.PI * 0.5); + this.scene.add(this._grid); + } + } + } + /** + * Remove all listeners, stop animations and clean scene + */ + dispose() { + if (this._animationId != -1) { + window.cancelAnimationFrame(this._animationId); + } + this.domElement.removeEventListener("pointerdown", this._onPointerDown); + this.domElement.removeEventListener("pointercancel", this._onPointerCancel); + this.domElement.removeEventListener("wheel", this._onWheel); + this.domElement.removeEventListener("contextmenu", this._onContextMenu); + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + window.removeEventListener("resize", this._onWindowResize); + if (this.scene !== null) this.scene.remove(this._gizmos); + this.disposeGrid(); + } + /** + * remove the grid from the scene + */ + disposeGrid() { + if (this._grid != null && this.scene != null) { + this.scene.remove(this._grid); + this._grid = null; + } + } + /** + * Compute the easing out cubic function for ease out effect in animation + * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation) + * @returns {Number} Result of easing out cubic at time t + */ + easeOutCubic(t3) { + return 1 - Math.pow(1 - t3, 3); + } + /** + * Make rotation gizmos more or less visible + * @param {Boolean} isActive If true, make gizmos more visible + */ + activateGizmos(isActive) { + const gizmoX = this._gizmos.children[0]; + const gizmoY = this._gizmos.children[1]; + const gizmoZ = this._gizmos.children[2]; + if (isActive) { + gizmoX.material.setValues({ opacity: 1 }); + gizmoY.material.setValues({ opacity: 1 }); + gizmoZ.material.setValues({ opacity: 1 }); + } else { + gizmoX.material.setValues({ opacity: 0.6 }); + gizmoY.material.setValues({ opacity: 0.6 }); + gizmoZ.material.setValues({ opacity: 0.6 }); + } + } + /** + * Calculate the cursor position in NDC + * @param {number} x Cursor horizontal coordinate within the canvas + * @param {number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor normalized position inside the canvas + */ + getCursorNDC(cursorX, cursorY, canvas) { + const canvasRect = canvas.getBoundingClientRect(); + this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1); + this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1); + return this._v2_1.clone(); + } + /** + * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas + * @param {Number} x Cursor horizontal coordinate within the canvas + * @param {Number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor position inside the canvas + */ + getCursorPosition(cursorX, cursorY, canvas) { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5; + this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5; + return this._v2_1.clone(); + } + /** + * Set the camera to be controlled + * @param {Camera} camera The virtual camera to be controlled + */ + setCamera(camera) { + camera.lookAt(this.target); + camera.updateMatrix(); + if (camera.type == "PerspectiveCamera") { + this._fov0 = camera.fov; + this._fovState = camera.fov; + } + this._cameraMatrixState0.copy(camera.matrix); + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraProjectionState.copy(camera.projectionMatrix); + this._zoom0 = camera.zoom; + this._zoomState = this._zoom0; + this._initialNear = camera.near; + this._nearPos0 = camera.position.distanceTo(this.target) - camera.near; + this._nearPos = this._initialNear; + this._initialFar = camera.far; + this._farPos0 = camera.position.distanceTo(this.target) - camera.far; + this._farPos = this._initialFar; + this._up0.copy(camera.up); + this._upState.copy(camera.up); + this.camera = camera; + this.camera.updateProjectionMatrix(); + this._tbRadius = this.calculateTbRadius(camera); + this.makeGizmos(this.target, this._tbRadius); + } + /** + * Set gizmos visibility + * @param {Boolean} value Value of gizmos visibility + */ + setGizmosVisible(value2) { + this._gizmos.visible = value2; + this.dispatchEvent(_changeEvent); + } + /** + * Set gizmos radius factor and redraws gizmos + * @param {Float} value Value of radius factor + */ + setTbRadius(value2) { + this.radiusFactor = value2; + this._tbRadius = this.calculateTbRadius(this.camera); + const curve = new EllipseCurve(0, 0, this._tbRadius, this._tbRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + this.dispatchEvent(_changeEvent); + } + /** + * Creates the rotation gizmos matching trackball center and radius + * @param {Vector3} tbCenter The trackball center + * @param {number} tbRadius The trackball radius + */ + makeGizmos(tbCenter, tbRadius) { + const curve = new EllipseCurve(0, 0, tbRadius, tbRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + const curveMaterialX = new LineBasicMaterial({ color: 16744576, fog: false, transparent: true, opacity: 0.6 }); + const curveMaterialY = new LineBasicMaterial({ color: 8454016, fog: false, transparent: true, opacity: 0.6 }); + const curveMaterialZ = new LineBasicMaterial({ color: 8421631, fog: false, transparent: true, opacity: 0.6 }); + const gizmoX = new Line(curveGeometry, curveMaterialX); + const gizmoY = new Line(curveGeometry, curveMaterialY); + const gizmoZ = new Line(curveGeometry, curveMaterialZ); + const rotation2 = Math.PI * 0.5; + gizmoX.rotation.x = rotation2; + gizmoY.rotation.y = rotation2; + this._gizmoMatrixState0.identity().setPosition(tbCenter); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + if (this.camera.zoom !== 1) { + const size2 = 1 / this.camera.zoom; + this._scaleMatrix.makeScale(size2, size2, size2); + this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix); + } + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.traverse(function(object) { + if (object.isLine) { + object.geometry.dispose(); + object.material.dispose(); + } + }); + this._gizmos.clear(); + this._gizmos.add(gizmoX); + this._gizmos.add(gizmoY); + this._gizmos.add(gizmoZ); + } + /** + * Perform animation for focus operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} point Point of interest for focus operation + * @param {Matrix4} cameraMatrix Camera matrix + * @param {Matrix4} gizmoMatrix Gizmos matrix + */ + onFocusAnim(time2, point, cameraMatrix, gizmoMatrix) { + if (this._timeStart == -1) { + this._timeStart = time2; + } + if (this._state == STATE.ANIMATION_FOCUS) { + const deltaTime = time2 - this._timeStart; + const animTime = deltaTime / this.focusAnimationTime; + this._gizmoMatrixState.copy(gizmoMatrix); + if (animTime >= 1) { + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, this.scaleFactor); + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } else { + const amount = this.easeOutCubic(animTime); + const size2 = 1 - amount + this.scaleFactor * amount; + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, size2, amount); + this.dispatchEvent(_changeEvent); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.onFocusAnim(t3, point, cameraMatrix, gizmoMatrix.clone()); + }); + } + } else { + this._animationId = -1; + this._timeStart = -1; + } + } + /** + * Perform animation for rotation operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} rotationAxis Rotation axis + * @param {number} w0 Initial angular velocity + */ + onRotationAnim(time2, rotationAxis, w0) { + if (this._timeStart == -1) { + this._anglePrev = 0; + this._angleCurrent = 0; + this._timeStart = time2; + } + if (this._state == STATE.ANIMATION_ROTATE) { + const deltaTime = (time2 - this._timeStart) / 1e3; + const w = w0 + -this.dampingFactor * deltaTime; + if (w > 0) { + this._angleCurrent = 0.5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0; + this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent)); + this.dispatchEvent(_changeEvent); + const self2 = this; + this._animationId = window.requestAnimationFrame(function(t3) { + self2.onRotationAnim(t3, rotationAxis, w0); + }); + } else { + this._animationId = -1; + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else { + this._animationId = -1; + this._timeStart = -1; + if (this._state != STATE.ROTATE) { + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } + } + /** + * Perform pan operation moving camera between two points + * @param {Vector3} p0 Initial point + * @param {Vector3} p1 Ending point + * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only) + */ + pan(p0, p1, adjust = false) { + const movement = p0.clone().sub(p1); + if (this.camera.isOrthographicCamera) { + movement.multiplyScalar(1 / this.camera.zoom); + } else if (this.camera.isPerspectiveCamera && adjust) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); + const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position); + movement.multiplyScalar(1 / distanceFactor); + } + this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion); + this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z); + this.setTransformationMatrices(this._m4_1, this._m4_1); + return _transformation; + } + /** + * Reset trackball + */ + reset() { + this.camera.zoom = this._zoom0; + if (this.camera.isPerspectiveCamera) { + this.camera.fov = this._fov0; + } + this.camera.near = this._nearPos; + this.camera.far = this._farPos; + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(this._up0); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + this._tbRadius = this.calculateTbRadius(this.camera); + this.makeGizmos(this._gizmos.position, this._tbRadius); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + /** + * Rotate the camera around an axis passing by trackball's center + * @param {Vector3} axis Rotation axis + * @param {number} angle Angle in radians + * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera + */ + rotate(axis, angle) { + const point = this._gizmos.position; + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._rotationMatrix.makeRotationAxis(axis, -angle); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1); + return _transformation; + } + copyState() { + let state; + if (this.camera.isOrthographicCamera) { + state = JSON.stringify({ arcballState: { + cameraFar: this.camera.far, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } }); + } else if (this.camera.isPerspectiveCamera) { + state = JSON.stringify({ arcballState: { + cameraFar: this.camera.far, + cameraFov: this.camera.fov, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } }); + } + navigator.clipboard.writeText(state); + } + pasteState() { + const self2 = this; + navigator.clipboard.readText().then(function resolved(value2) { + self2.setStateFromJSON(value2); + }); + } + /** + * Save the current state of the control. This can later be recover with .reset + */ + saveState() { + this._cameraMatrixState0.copy(this.camera.matrix); + this._gizmoMatrixState0.copy(this._gizmos.matrix); + this._nearPos = this.camera.near; + this._farPos = this.camera.far; + this._zoom0 = this.camera.zoom; + this._up0.copy(this.camera.up); + if (this.camera.isPerspectiveCamera) { + this._fov0 = this.camera.fov; + } + } + /** + * Perform uniform scale operation around a given point + * @param {Number} size Scale factor + * @param {Vector3} point Point around which scale + * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only) + * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos + */ + scale(size2, point, scaleGizmos = true) { + _scalePointTemp.copy(point); + let sizeInverse = 1 / size2; + if (this.camera.isOrthographicCamera) { + this.camera.zoom = this._zoomState; + this.camera.zoom *= size2; + if (this.camera.zoom > this.maxZoom) { + this.camera.zoom = this.maxZoom; + sizeInverse = this._zoomState / this.maxZoom; + } else if (this.camera.zoom < this.minZoom) { + this.camera.zoom = this.minZoom; + sizeInverse = this._zoomState / this.minZoom; + } + this.camera.updateProjectionMatrix(); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z); + this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix); + this._m4_2.multiply(this._translationMatrix); + _scalePointTemp.sub(this._v3_1); + const amount = _scalePointTemp.clone().multiplyScalar(sizeInverse); + _scalePointTemp.sub(amount); + this._m4_1.makeTranslation(_scalePointTemp.x, _scalePointTemp.y, _scalePointTemp.z); + this._m4_2.premultiply(this._m4_1); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + } else if (this.camera.isPerspectiveCamera) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + let distance = this._v3_1.distanceTo(_scalePointTemp); + let amount = distance - distance * sizeInverse; + const newDistance = distance - amount; + if (newDistance < this.minDistance) { + sizeInverse = this.minDistance / distance; + amount = distance - distance * sizeInverse; + } else if (newDistance > this.maxDistance) { + sizeInverse = this.maxDistance / distance; + amount = distance - distance * sizeInverse; + } + _offset.copy(_scalePointTemp).sub(this._v3_1).normalize().multiplyScalar(amount); + this._m4_1.makeTranslation(_offset.x, _offset.y, _offset.z); + if (scaleGizmos) { + const pos = this._v3_2; + distance = pos.distanceTo(_scalePointTemp); + amount = distance - distance * sizeInverse; + _offset.copy(_scalePointTemp).sub(this._v3_2).normalize().multiplyScalar(amount); + this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._m4_2.makeTranslation(_offset.x, _offset.y, _offset.z).multiply(this._translationMatrix); + this._m4_2.multiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z); + this._m4_2.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1, this._m4_2); + } else { + this.setTransformationMatrices(this._m4_1); + } + return _transformation; + } + } + /** + * Set camera fov + * @param {Number} value fov to be setted + */ + setFov(value2) { + if (this.camera.isPerspectiveCamera) { + this.camera.fov = MathUtils.clamp(value2, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + } + /** + * Set values in transformation object + * @param {Matrix4} camera Transformation to be applied to the camera + * @param {Matrix4} gizmos Transformation to be applied to gizmos + */ + setTransformationMatrices(camera = null, gizmos = null) { + if (camera != null) { + if (_transformation.camera != null) { + _transformation.camera.copy(camera); + } else { + _transformation.camera = camera.clone(); + } + } else { + _transformation.camera = null; + } + if (gizmos != null) { + if (_transformation.gizmos != null) { + _transformation.gizmos.copy(gizmos); + } else { + _transformation.gizmos = gizmos.clone(); + } + } else { + _transformation.gizmos = null; + } + } + /** + * Rotate camera around its direction axis passing by a given point by a given angle + * @param {Vector3} point The point where the rotation axis is passing trough + * @param {Number} angle Angle in radians + * @returns The computed transormation matix + */ + zRotate(point, angle) { + this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle); + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point); + this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle); + this._v3_2.sub(this._v3_1); + this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + } + getRaycaster() { + return _raycaster; + } + /** + * Unproject the cursor on the 3D object surface + * @param {Vector2} cursor Cursor coordinates in NDC + * @param {Camera} camera Virtual camera + * @returns {Vector3} The point of intersection with the model, if exist, null otherwise + */ + unprojectOnObj(cursor, camera) { + const raycaster = this.getRaycaster(); + raycaster.near = camera.near; + raycaster.far = camera.far; + raycaster.setFromCamera(cursor, camera); + const intersect = raycaster.intersectObjects(this.scene.children, true); + for (let i = 0; i < intersect.length; i++) { + if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face != null) { + return intersect[i].point.clone(); + } + } + return null; + } + /** + * Unproject the cursor on the trackball surface + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {number} tbRadius The trackball radius + * @returns {Vector3} The unprojected point on the trackball surface + */ + unprojectOnTbSurface(camera, cursorX, cursorY, canvas, tbRadius) { + if (camera.type == "OrthographicCamera") { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + const x2 = Math.pow(this._v2_1.x, 2); + const y2 = Math.pow(this._v2_1.y, 2); + const r2 = Math.pow(this._tbRadius, 2); + if (x2 + y2 <= r2 * 0.5) { + this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2))); + } else { + this._v3_1.setZ(r2 * 0.5 / Math.sqrt(x2 + y2)); + } + return this._v3_1; + } else if (camera.type == "PerspectiveCamera") { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + const radius2 = Math.pow(tbRadius, 2); + const h = this._v3_1.z; + const l2 = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + if (l2 == 0) { + rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius); + return rayDir; + } + const m = h / l2; + const q2 = cameraGizmoDistance; + let a2 = Math.pow(m, 2) + 1; + let b3 = 2 * m * q2; + let c2 = Math.pow(q2, 2) - radius2; + let delta = Math.pow(b3, 2) - 4 * a2 * c2; + if (delta >= 0) { + this._v2_1.setX((-b3 - Math.sqrt(delta)) / (2 * a2)); + this._v2_1.setY(m * this._v2_1.x + q2); + const angle = MathUtils.RAD2DEG * this._v2_1.angle(); + if (angle >= 45) { + const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength2); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + } + a2 = m; + b3 = q2; + c2 = -radius2 * 0.5; + delta = Math.pow(b3, 2) - 4 * a2 * c2; + this._v2_1.setX((-b3 - Math.sqrt(delta)) / (2 * a2)); + this._v2_1.setY(m * this._v2_1.x + q2); + const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + } + /** + * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only) + * @returns {Vector3} The unprojected point on the trackball plane + */ + unprojectOnTbPlane(camera, cursorX, cursorY, canvas, initialDistance = false) { + if (camera.type == "OrthographicCamera") { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + return this._v3_1.clone(); + } else if (camera.type == "PerspectiveCamera") { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const h = this._v3_1.z; + const l2 = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + let cameraGizmoDistance; + if (initialDistance) { + cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0)); + } else { + cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + } + if (l2 == 0) { + rayDir.set(0, 0, 0); + return rayDir; + } + const m = h / l2; + const q2 = cameraGizmoDistance; + const x2 = -q2 / m; + const rayLength = Math.sqrt(Math.pow(q2, 2) + Math.pow(x2, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z = 0; + return rayDir; + } + } + /** + * Update camera and gizmos state + */ + updateMatrixState() { + this._cameraMatrixState.copy(this.camera.matrix); + this._gizmoMatrixState.copy(this._gizmos.matrix); + if (this.camera.isOrthographicCamera) { + this._cameraProjectionState.copy(this.camera.projectionMatrix); + this.camera.updateProjectionMatrix(); + this._zoomState = this.camera.zoom; + } else if (this.camera.isPerspectiveCamera) { + this._fovState = this.camera.fov; + } + } + /** + * Update the trackball FSA + * @param {STATE} newState New state of the FSA + * @param {Boolean} updateMatrices If matriices state should be updated + */ + updateTbState(newState, updateMatrices) { + this._state = newState; + if (updateMatrices) { + this.updateMatrixState(); + } + } + update() { + const EPS2 = 1e-6; + if (this.target.equals(this._currentTarget) === false) { + this._gizmos.position.copy(this.target); + this._tbRadius = this.calculateTbRadius(this.camera); + this.makeGizmos(this.target, this._tbRadius); + this._currentTarget.copy(this.target); + } + if (this.camera.isOrthographicCamera) { + if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) { + const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom); + this.applyTransformMatrix(this.scale(newZoom / this.camera.zoom, this._gizmos.position, true)); + } + } else if (this.camera.isPerspectiveCamera) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + if (distance > this.maxDistance + EPS2 || distance < this.minDistance - EPS2) { + const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance); + this.applyTransformMatrix(this.scale(newDistance / distance, this._gizmos.position)); + this.updateMatrixState(); + } + if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) { + this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + const oldRadius = this._tbRadius; + this._tbRadius = this.calculateTbRadius(this.camera); + if (oldRadius < this._tbRadius - EPS2 || oldRadius > this._tbRadius + EPS2) { + const scale2 = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + const newRadius = this._tbRadius / scale2; + const curve = new EllipseCurve(0, 0, newRadius, newRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + } + } + this.camera.lookAt(this._gizmos.position); + } + setStateFromJSON(json) { + const state = JSON.parse(json); + if (state.arcballState != void 0) { + this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(state.arcballState.cameraUp); + this.camera.near = state.arcballState.cameraNear; + this.camera.far = state.arcballState.cameraFar; + this.camera.zoom = state.arcballState.cameraZoom; + if (this.camera.isPerspectiveCamera) { + this.camera.fov = state.arcballState.cameraFov; + } + this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmos.updateMatrix(); + this._tbRadius = this.calculateTbRadius(this.camera); + const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0); + this.makeGizmos(this._gizmos.position, this._tbRadius); + this._gizmoMatrixState0.copy(gizmoTmp); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + } +}; +function onWindowResize() { + const scale2 = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + this._tbRadius = this.calculateTbRadius(this.camera); + const newRadius = this._tbRadius / scale2; + const curve = new EllipseCurve(0, 0, newRadius, newRadius); + const points = curve.getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + this._gizmos.children[gizmo].geometry = curveGeometry; + } + this.dispatchEvent(_changeEvent); +} +function onContextMenu(event) { + if (!this.enabled) { + return; + } + for (let i = 0; i < this.mouseActions.length; i++) { + if (this.mouseActions[i].mouse == 2) { + event.preventDefault(); + break; + } + } +} +function onPointerCancel() { + this._touchStart.splice(0, this._touchStart.length); + this._touchCurrent.splice(0, this._touchCurrent.length); + this._input = INPUT.NONE; +} +function onPointerDown(event) { + if (event.button == 0 && event.isPrimary) { + this._downValid = true; + this._downEvents.push(event); + this._downStart = performance.now(); + } else { + this._downValid = false; + } + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + this._touchStart.push(event); + this._touchCurrent.push(event); + switch (this._input) { + case INPUT.NONE: + this._input = INPUT.ONE_FINGER; + this.onSinglePanStart(event, "ROTATE"); + window.addEventListener("pointermove", this._onPointerMove); + window.addEventListener("pointerup", this._onPointerUp); + break; + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + this._input = INPUT.TWO_FINGER; + this.onRotateStart(); + this.onPinchStart(); + this.onDoublePanStart(); + break; + case INPUT.TWO_FINGER: + this._input = INPUT.MULT_FINGER; + this.onTriplePanStart(event); + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.NONE) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + this._mouseOp = this.getOpFromAction(event.button, modifier); + if (this._mouseOp != null) { + window.addEventListener("pointermove", this._onPointerMove); + window.addEventListener("pointerup", this._onPointerUp); + this._input = INPUT.CURSOR; + this._button = event.button; + this.onSinglePanStart(event, this._mouseOp); + } + } +} +function onPointerMove(event) { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + switch (this._input) { + case INPUT.ONE_FINGER: + this.updateTouchEvent(event); + this.onSinglePanMove(event, STATE.ROTATE); + break; + case INPUT.ONE_FINGER_SWITCHED: + const movement = this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio; + if (movement >= this._switchSensibility) { + this._input = INPUT.ONE_FINGER; + this.updateTouchEvent(event); + this.onSinglePanStart(event, "ROTATE"); + break; + } + break; + case INPUT.TWO_FINGER: + this.updateTouchEvent(event); + this.onRotateMove(); + this.onPinchMove(); + this.onDoublePanMove(); + break; + case INPUT.MULT_FINGER: + this.updateTouchEvent(event); + this.onTriplePanMove(event); + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + const mouseOpState = this.getOpStateFromAction(this._button, modifier); + if (mouseOpState != null) { + this.onSinglePanMove(event, mouseOpState); + } + } + if (this._downValid) { + const movement = this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio; + if (movement > this._movementThreshold) { + this._downValid = false; + } + } +} +function onPointerUp(event) { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + const nTouch = this._touchCurrent.length; + for (let i = 0; i < nTouch; i++) { + if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1); + this._touchStart.splice(i, 1); + break; + } + } + switch (this._input) { + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + break; + case INPUT.TWO_FINGER: + this.onDoublePanEnd(event); + this.onPinchEnd(event); + this.onRotateEnd(event); + this._input = INPUT.ONE_FINGER_SWITCHED; + break; + case INPUT.MULT_FINGER: + if (this._touchCurrent.length == 0) { + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onTriplePanEnd(); + } + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + window.removeEventListener("pointermove", this._onPointerMove); + window.removeEventListener("pointerup", this._onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + this._button = -1; + } + if (event.isPrimary) { + if (this._downValid) { + const downTime = event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp; + if (downTime <= this._maxDownTime) { + if (this._nclicks == 0) { + this._nclicks = 1; + this._clickStart = performance.now(); + } else { + const clickInterval = event.timeStamp - this._clickStart; + const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio; + if (clickInterval <= this._maxInterval && movement <= this._posThreshold) { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + this.onDoubleTap(event); + } else { + this._nclicks = 1; + this._downEvents.shift(); + this._clickStart = performance.now(); + } + } + } else { + this._downValid = false; + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + } else { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + } +} +function onWheel(event) { + if (this.enabled && this.enableZoom) { + let modifier = null; + if (event.ctrlKey || event.metaKey) { + modifier = "CTRL"; + } else if (event.shiftKey) { + modifier = "SHIFT"; + } + const mouseOp = this.getOpFromAction("WHEEL", modifier); + if (mouseOp != null) { + event.preventDefault(); + this.dispatchEvent(_startEvent); + const notchDeltaY = 125; + let sgn = event.deltaY / notchDeltaY; + let size2 = 1; + if (sgn > 0) { + size2 = 1 / this.scaleFactor; + } else if (sgn < 0) { + size2 = this.scaleFactor; + } + switch (mouseOp) { + case "ZOOM": + this.updateTbState(STATE.SCALE, true); + if (sgn > 0) { + size2 = 1 / Math.pow(this.scaleFactor, sgn); + } else if (sgn < 0) { + size2 = Math.pow(this.scaleFactor, -sgn); + } + if (this.cursorZoom && this.enablePan) { + let scalePoint; + if (this.camera.isOrthographicCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + } else if (this.camera.isPerspectiveCamera) { + scalePoint = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement).applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + } + this.applyTransformMatrix(this.scale(size2, scalePoint)); + } else { + this.applyTransformMatrix(this.scale(size2, this._gizmos.position)); + } + if (this._grid != null) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + case "FOV": + if (this.camera.isPerspectiveCamera) { + this.updateTbState(STATE.FOV, true); + if (event.deltaX != 0) { + sgn = event.deltaX / notchDeltaY; + size2 = 1; + if (sgn > 0) { + size2 = 1 / Math.pow(this.scaleFactor, sgn); + } else if (sgn < 0) { + size2 = Math.pow(this.scaleFactor, -sgn); + } + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x2 = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x2 / size2; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y2 = x2 * Math.tan(MathUtils.DEG2RAD * this.camera.fov * 0.5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y2 / xNew) * 2); + if (newFov > this.maxFov) { + newFov = this.maxFov; + } else if (newFov < this.minFov) { + newFov = this.minFov; + } + const newDistance = y2 / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size2 = x2 / newDistance; + this.setFov(newFov); + this.applyTransformMatrix(this.scale(size2, this._gizmos.position, false)); + } + if (this._grid != null) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + } + } + } +} + +// node_modules/three/examples/jsm/controls/DragControls.js +var _plane = new Plane(); +var _raycaster2 = new Raycaster(); +var _pointer = new Vector2(); +var _offset2 = new Vector3(); +var _diff = new Vector2(); +var _previousPointer = new Vector2(); +var _intersection = new Vector3(); +var _worldPosition = new Vector3(); +var _inverseMatrix = new Matrix4(); +var _up = new Vector3(); +var _right = new Vector3(); +var DragControls = class extends EventDispatcher { + constructor(_objects, _camera2, _domElement) { + super(); + _domElement.style.touchAction = "none"; + let _selected = null, _hovered = null; + const _intersections = []; + this.mode = "translate"; + this.rotateSpeed = 1; + const scope = this; + function activate() { + _domElement.addEventListener("pointermove", onPointerMove3); + _domElement.addEventListener("pointerdown", onPointerDown3); + _domElement.addEventListener("pointerup", onPointerCancel2); + _domElement.addEventListener("pointerleave", onPointerCancel2); + } + function deactivate() { + _domElement.removeEventListener("pointermove", onPointerMove3); + _domElement.removeEventListener("pointerdown", onPointerDown3); + _domElement.removeEventListener("pointerup", onPointerCancel2); + _domElement.removeEventListener("pointerleave", onPointerCancel2); + _domElement.style.cursor = ""; + } + function dispose() { + deactivate(); + } + function getObjects() { + return _objects; + } + function setObjects(objects) { + _objects = objects; + } + function getRaycaster() { + return _raycaster2; + } + function onPointerMove3(event) { + if (scope.enabled === false) return; + updatePointer(event); + _raycaster2.setFromCamera(_pointer, _camera2); + if (_selected) { + if (scope.mode === "translate") { + if (_raycaster2.ray.intersectPlane(_plane, _intersection)) { + _selected.position.copy(_intersection.sub(_offset2).applyMatrix4(_inverseMatrix)); + } + } else if (scope.mode === "rotate") { + _diff.subVectors(_pointer, _previousPointer).multiplyScalar(scope.rotateSpeed); + _selected.rotateOnWorldAxis(_up, _diff.x); + _selected.rotateOnWorldAxis(_right.normalize(), -_diff.y); + } + scope.dispatchEvent({ type: "drag", object: _selected }); + _previousPointer.copy(_pointer); + } else { + if (event.pointerType === "mouse" || event.pointerType === "pen") { + _intersections.length = 0; + _raycaster2.setFromCamera(_pointer, _camera2); + _raycaster2.intersectObjects(_objects, scope.recursive, _intersections); + if (_intersections.length > 0) { + const object = _intersections[0].object; + _plane.setFromNormalAndCoplanarPoint(_camera2.getWorldDirection(_plane.normal), _worldPosition.setFromMatrixPosition(object.matrixWorld)); + if (_hovered !== object && _hovered !== null) { + scope.dispatchEvent({ type: "hoveroff", object: _hovered }); + _domElement.style.cursor = "auto"; + _hovered = null; + } + if (_hovered !== object) { + scope.dispatchEvent({ type: "hoveron", object }); + _domElement.style.cursor = "pointer"; + _hovered = object; + } + } else { + if (_hovered !== null) { + scope.dispatchEvent({ type: "hoveroff", object: _hovered }); + _domElement.style.cursor = "auto"; + _hovered = null; + } + } + } + } + _previousPointer.copy(_pointer); + } + function onPointerDown3(event) { + if (scope.enabled === false) return; + updatePointer(event); + _intersections.length = 0; + _raycaster2.setFromCamera(_pointer, _camera2); + _raycaster2.intersectObjects(_objects, scope.recursive, _intersections); + if (_intersections.length > 0) { + if (scope.transformGroup === true) { + _selected = findGroup(_intersections[0].object); + } else { + _selected = _intersections[0].object; + } + _plane.setFromNormalAndCoplanarPoint(_camera2.getWorldDirection(_plane.normal), _worldPosition.setFromMatrixPosition(_selected.matrixWorld)); + if (_raycaster2.ray.intersectPlane(_plane, _intersection)) { + if (scope.mode === "translate") { + _inverseMatrix.copy(_selected.parent.matrixWorld).invert(); + _offset2.copy(_intersection).sub(_worldPosition.setFromMatrixPosition(_selected.matrixWorld)); + } else if (scope.mode === "rotate") { + _up.set(0, 1, 0).applyQuaternion(_camera2.quaternion).normalize(); + _right.set(1, 0, 0).applyQuaternion(_camera2.quaternion).normalize(); + } + } + _domElement.style.cursor = "move"; + scope.dispatchEvent({ type: "dragstart", object: _selected }); + } + _previousPointer.copy(_pointer); + } + function onPointerCancel2() { + if (scope.enabled === false) return; + if (_selected) { + scope.dispatchEvent({ type: "dragend", object: _selected }); + _selected = null; + } + _domElement.style.cursor = _hovered ? "pointer" : "auto"; + } + function updatePointer(event) { + const rect = _domElement.getBoundingClientRect(); + _pointer.x = (event.clientX - rect.left) / rect.width * 2 - 1; + _pointer.y = -(event.clientY - rect.top) / rect.height * 2 + 1; + } + function findGroup(obj, group = null) { + if (obj.isGroup) group = obj; + if (obj.parent === null) return group; + return findGroup(obj.parent, group); + } + activate(); + this.enabled = true; + this.recursive = true; + this.transformGroup = false; + this.activate = activate; + this.deactivate = deactivate; + this.dispose = dispose; + this.getObjects = getObjects; + this.getRaycaster = getRaycaster; + this.setObjects = setObjects; + } +}; + +// node_modules/three/examples/jsm/controls/FirstPersonControls.js +var _lookDirection = new Vector3(); +var _spherical = new Spherical(); +var _target = new Vector3(); +var FirstPersonControls = class { + constructor(object, domElement) { + this.object = object; + this.domElement = domElement; + this.enabled = true; + this.movementSpeed = 1; + this.lookSpeed = 5e-3; + this.lookVertical = true; + this.autoForward = false; + this.activeLook = true; + this.heightSpeed = false; + this.heightCoef = 1; + this.heightMin = 0; + this.heightMax = 1; + this.constrainVertical = false; + this.verticalMin = 0; + this.verticalMax = Math.PI; + this.mouseDragOn = false; + this.autoSpeedFactor = 0; + this.pointerX = 0; + this.pointerY = 0; + this.moveForward = false; + this.moveBackward = false; + this.moveLeft = false; + this.moveRight = false; + this.viewHalfX = 0; + this.viewHalfY = 0; + let lat = 0; + let lon = 0; + this.handleResize = function() { + if (this.domElement === document) { + this.viewHalfX = window.innerWidth / 2; + this.viewHalfY = window.innerHeight / 2; + } else { + this.viewHalfX = this.domElement.offsetWidth / 2; + this.viewHalfY = this.domElement.offsetHeight / 2; + } + }; + this.onPointerDown = function(event) { + if (this.domElement !== document) { + this.domElement.focus(); + } + if (this.activeLook) { + switch (event.button) { + case 0: + this.moveForward = true; + break; + case 2: + this.moveBackward = true; + break; + } + } + this.mouseDragOn = true; + }; + this.onPointerUp = function(event) { + if (this.activeLook) { + switch (event.button) { + case 0: + this.moveForward = false; + break; + case 2: + this.moveBackward = false; + break; + } + } + this.mouseDragOn = false; + }; + this.onPointerMove = function(event) { + if (this.domElement === document) { + this.pointerX = event.pageX - this.viewHalfX; + this.pointerY = event.pageY - this.viewHalfY; + } else { + this.pointerX = event.pageX - this.domElement.offsetLeft - this.viewHalfX; + this.pointerY = event.pageY - this.domElement.offsetTop - this.viewHalfY; + } + }; + this.onKeyDown = function(event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = true; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = true; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = true; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = true; + break; + case "KeyR": + this.moveUp = true; + break; + case "KeyF": + this.moveDown = true; + break; + } + }; + this.onKeyUp = function(event) { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = false; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = false; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = false; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = false; + break; + case "KeyR": + this.moveUp = false; + break; + case "KeyF": + this.moveDown = false; + break; + } + }; + this.lookAt = function(x2, y2, z) { + if (x2.isVector3) { + _target.copy(x2); + } else { + _target.set(x2, y2, z); + } + this.object.lookAt(_target); + setOrientation(this); + return this; + }; + this.update = function() { + const targetPosition = new Vector3(); + return function update(delta) { + if (this.enabled === false) return; + if (this.heightSpeed) { + const y2 = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax); + const heightDelta = y2 - this.heightMin; + this.autoSpeedFactor = delta * (heightDelta * this.heightCoef); + } else { + this.autoSpeedFactor = 0; + } + const actualMoveSpeed = delta * this.movementSpeed; + if (this.moveForward || this.autoForward && !this.moveBackward) this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor)); + if (this.moveBackward) this.object.translateZ(actualMoveSpeed); + if (this.moveLeft) this.object.translateX(-actualMoveSpeed); + if (this.moveRight) this.object.translateX(actualMoveSpeed); + if (this.moveUp) this.object.translateY(actualMoveSpeed); + if (this.moveDown) this.object.translateY(-actualMoveSpeed); + let actualLookSpeed = delta * this.lookSpeed; + if (!this.activeLook) { + actualLookSpeed = 0; + } + let verticalLookRatio = 1; + if (this.constrainVertical) { + verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin); + } + lon -= this.pointerX * actualLookSpeed; + if (this.lookVertical) lat -= this.pointerY * actualLookSpeed * verticalLookRatio; + lat = Math.max(-85, Math.min(85, lat)); + let phi = MathUtils.degToRad(90 - lat); + const theta = MathUtils.degToRad(lon); + if (this.constrainVertical) { + phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax); + } + const position2 = this.object.position; + targetPosition.setFromSphericalCoords(1, phi, theta).add(position2); + this.object.lookAt(targetPosition); + }; + }(); + this.dispose = function() { + this.domElement.removeEventListener("contextmenu", contextmenu); + this.domElement.removeEventListener("pointerdown", _onPointerDown); + this.domElement.removeEventListener("pointermove", _onPointerMove); + this.domElement.removeEventListener("pointerup", _onPointerUp); + window.removeEventListener("keydown", _onKeyDown); + window.removeEventListener("keyup", _onKeyUp); + }; + const _onPointerMove = this.onPointerMove.bind(this); + const _onPointerDown = this.onPointerDown.bind(this); + const _onPointerUp = this.onPointerUp.bind(this); + const _onKeyDown = this.onKeyDown.bind(this); + const _onKeyUp = this.onKeyUp.bind(this); + this.domElement.addEventListener("contextmenu", contextmenu); + this.domElement.addEventListener("pointerdown", _onPointerDown); + this.domElement.addEventListener("pointermove", _onPointerMove); + this.domElement.addEventListener("pointerup", _onPointerUp); + window.addEventListener("keydown", _onKeyDown); + window.addEventListener("keyup", _onKeyUp); + function setOrientation(controls) { + const quaternion = controls.object.quaternion; + _lookDirection.set(0, 0, -1).applyQuaternion(quaternion); + _spherical.setFromVector3(_lookDirection); + lat = 90 - MathUtils.radToDeg(_spherical.phi); + lon = MathUtils.radToDeg(_spherical.theta); + } + this.handleResize(); + setOrientation(this); + } +}; +function contextmenu(event) { + event.preventDefault(); +} + +// node_modules/three/examples/jsm/controls/FlyControls.js +var _changeEvent2 = { type: "change" }; +var FlyControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + this.object = object; + this.domElement = domElement; + this.enabled = true; + this.movementSpeed = 1; + this.rollSpeed = 5e-3; + this.dragToLook = false; + this.autoForward = false; + const scope = this; + const EPS2 = 1e-6; + const lastQuaternion = new Quaternion(); + const lastPosition = new Vector3(); + this.tmpQuaternion = new Quaternion(); + this.status = 0; + this.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 }; + this.moveVector = new Vector3(0, 0, 0); + this.rotationVector = new Vector3(0, 0, 0); + this.keydown = function(event) { + if (event.altKey || this.enabled === false) { + return; + } + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = 0.1; + break; + case "KeyW": + this.moveState.forward = 1; + break; + case "KeyS": + this.moveState.back = 1; + break; + case "KeyA": + this.moveState.left = 1; + break; + case "KeyD": + this.moveState.right = 1; + break; + case "KeyR": + this.moveState.up = 1; + break; + case "KeyF": + this.moveState.down = 1; + break; + case "ArrowUp": + this.moveState.pitchUp = 1; + break; + case "ArrowDown": + this.moveState.pitchDown = 1; + break; + case "ArrowLeft": + this.moveState.yawLeft = 1; + break; + case "ArrowRight": + this.moveState.yawRight = 1; + break; + case "KeyQ": + this.moveState.rollLeft = 1; + break; + case "KeyE": + this.moveState.rollRight = 1; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }; + this.keyup = function(event) { + if (this.enabled === false) return; + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = 1; + break; + case "KeyW": + this.moveState.forward = 0; + break; + case "KeyS": + this.moveState.back = 0; + break; + case "KeyA": + this.moveState.left = 0; + break; + case "KeyD": + this.moveState.right = 0; + break; + case "KeyR": + this.moveState.up = 0; + break; + case "KeyF": + this.moveState.down = 0; + break; + case "ArrowUp": + this.moveState.pitchUp = 0; + break; + case "ArrowDown": + this.moveState.pitchDown = 0; + break; + case "ArrowLeft": + this.moveState.yawLeft = 0; + break; + case "ArrowRight": + this.moveState.yawRight = 0; + break; + case "KeyQ": + this.moveState.rollLeft = 0; + break; + case "KeyE": + this.moveState.rollRight = 0; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }; + this.pointerdown = function(event) { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status++; + } else { + switch (event.button) { + case 0: + this.moveState.forward = 1; + break; + case 2: + this.moveState.back = 1; + break; + } + this.updateMovementVector(); + } + }; + this.pointermove = function(event) { + if (this.enabled === false) return; + if (!this.dragToLook || this.status > 0) { + const container = this.getContainerDimensions(); + const halfWidth = container.size[0] / 2; + const halfHeight = container.size[1] / 2; + this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth; + this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight; + this.updateRotationVector(); + } + }; + this.pointerup = function(event) { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status--; + this.moveState.yawLeft = this.moveState.pitchDown = 0; + } else { + switch (event.button) { + case 0: + this.moveState.forward = 0; + break; + case 2: + this.moveState.back = 0; + break; + } + this.updateMovementVector(); + } + this.updateRotationVector(); + }; + this.pointercancel = function() { + if (this.enabled === false) return; + if (this.dragToLook) { + this.status = 0; + this.moveState.yawLeft = this.moveState.pitchDown = 0; + } else { + this.moveState.forward = 0; + this.moveState.back = 0; + this.updateMovementVector(); + } + this.updateRotationVector(); + }; + this.contextMenu = function(event) { + if (this.enabled === false) return; + event.preventDefault(); + }; + this.update = function(delta) { + if (this.enabled === false) return; + const moveMult = delta * scope.movementSpeed; + const rotMult = delta * scope.rollSpeed; + scope.object.translateX(scope.moveVector.x * moveMult); + scope.object.translateY(scope.moveVector.y * moveMult); + scope.object.translateZ(scope.moveVector.z * moveMult); + scope.tmpQuaternion.set(scope.rotationVector.x * rotMult, scope.rotationVector.y * rotMult, scope.rotationVector.z * rotMult, 1).normalize(); + scope.object.quaternion.multiply(scope.tmpQuaternion); + if (lastPosition.distanceToSquared(scope.object.position) > EPS2 || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS2) { + scope.dispatchEvent(_changeEvent2); + lastQuaternion.copy(scope.object.quaternion); + lastPosition.copy(scope.object.position); + } + }; + this.updateMovementVector = function() { + const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0; + this.moveVector.x = -this.moveState.left + this.moveState.right; + this.moveVector.y = -this.moveState.down + this.moveState.up; + this.moveVector.z = -forward + this.moveState.back; + }; + this.updateRotationVector = function() { + this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp; + this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft; + this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft; + }; + this.getContainerDimensions = function() { + if (this.domElement != document) { + return { + size: [this.domElement.offsetWidth, this.domElement.offsetHeight], + offset: [this.domElement.offsetLeft, this.domElement.offsetTop] + }; + } else { + return { + size: [window.innerWidth, window.innerHeight], + offset: [0, 0] + }; + } + }; + this.dispose = function() { + this.domElement.removeEventListener("contextmenu", _contextmenu); + this.domElement.removeEventListener("pointerdown", _pointerdown); + this.domElement.removeEventListener("pointermove", _pointermove); + this.domElement.removeEventListener("pointerup", _pointerup); + this.domElement.removeEventListener("pointercancel", _pointercancel); + window.removeEventListener("keydown", _keydown); + window.removeEventListener("keyup", _keyup); + }; + const _contextmenu = this.contextMenu.bind(this); + const _pointermove = this.pointermove.bind(this); + const _pointerdown = this.pointerdown.bind(this); + const _pointerup = this.pointerup.bind(this); + const _pointercancel = this.pointercancel.bind(this); + const _keydown = this.keydown.bind(this); + const _keyup = this.keyup.bind(this); + this.domElement.addEventListener("contextmenu", _contextmenu); + this.domElement.addEventListener("pointerdown", _pointerdown); + this.domElement.addEventListener("pointermove", _pointermove); + this.domElement.addEventListener("pointerup", _pointerup); + this.domElement.addEventListener("pointercancel", _pointercancel); + window.addEventListener("keydown", _keydown); + window.addEventListener("keyup", _keyup); + this.updateMovementVector(); + this.updateRotationVector(); + } +}; + +// node_modules/three/examples/jsm/controls/MapControls.js +var MapControls = class extends OrbitControls { + constructor(object, domElement) { + super(object, domElement); + this.screenSpacePanning = false; + this.mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE }; + this.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE }; + } +}; + +// 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 _lockEvent = { type: "lock" }; +var _unlockEvent = { type: "unlock" }; +var _PI_2 = Math.PI / 2; +var PointerLockControls = class extends EventDispatcher { + constructor(camera, domElement) { + super(); + this.camera = camera; + this.domElement = domElement; + this.isLocked = false; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.pointerSpeed = 1; + this._onMouseMove = onMouseMove.bind(this); + this._onPointerlockChange = onPointerlockChange.bind(this); + this._onPointerlockError = onPointerlockError.bind(this); + this.connect(); + } + connect() { + this.domElement.ownerDocument.addEventListener("mousemove", this._onMouseMove); + this.domElement.ownerDocument.addEventListener("pointerlockchange", this._onPointerlockChange); + this.domElement.ownerDocument.addEventListener("pointerlockerror", this._onPointerlockError); + } + disconnect() { + this.domElement.ownerDocument.removeEventListener("mousemove", this._onMouseMove); + this.domElement.ownerDocument.removeEventListener("pointerlockchange", this._onPointerlockChange); + this.domElement.ownerDocument.removeEventListener("pointerlockerror", this._onPointerlockError); + } + dispose() { + this.disconnect(); + } + getObject() { + return this.camera; + } + getDirection(v) { + return v.set(0, 0, -1).applyQuaternion(this.camera.quaternion); + } + moveForward(distance) { + const camera = this.camera; + _vector2.setFromMatrixColumn(camera.matrix, 0); + _vector2.crossVectors(camera.up, _vector2); + camera.position.addScaledVector(_vector2, distance); + } + moveRight(distance) { + const camera = this.camera; + _vector2.setFromMatrixColumn(camera.matrix, 0); + camera.position.addScaledVector(_vector2, distance); + } + lock() { + this.domElement.requestPointerLock(); + } + unlock() { + this.domElement.ownerDocument.exitPointerLock(); + } +}; +function onMouseMove(event) { + if (this.isLocked === false) return; + const movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0; + const movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0; + const camera = this.camera; + _euler.setFromQuaternion(camera.quaternion); + _euler.y -= movementX * 2e-3 * this.pointerSpeed; + _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); +} +function onPointerlockChange() { + if (this.domElement.ownerDocument.pointerLockElement === this.domElement) { + this.dispatchEvent(_lockEvent); + this.isLocked = true; + } else { + this.dispatchEvent(_unlockEvent); + this.isLocked = false; + } +} +function onPointerlockError() { + console.error("THREE.PointerLockControls: Unable to use Pointer Lock API"); +} + +// node_modules/three/examples/jsm/controls/TrackballControls.js +var _changeEvent4 = { type: "change" }; +var _startEvent2 = { type: "start" }; +var _endEvent2 = { type: "end" }; +var TrackballControls = class extends EventDispatcher { + constructor(object, domElement) { + super(); + const scope = this; + const STATE2 = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 }; + this.object = object; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + this.enabled = true; + this.screen = { left: 0, top: 0, width: 0, height: 0 }; + this.rotateSpeed = 1; + this.zoomSpeed = 1.2; + this.panSpeed = 0.3; + this.noRotate = false; + this.noZoom = false; + this.noPan = false; + this.staticMoving = false; + this.dynamicDampingFactor = 0.2; + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.keys = [ + "KeyA", + "KeyS", + "KeyD" + /*D*/ + ]; + this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN }; + this.target = new Vector3(); + const EPS2 = 1e-6; + const lastPosition = new Vector3(); + let lastZoom = 1; + let _state = STATE2.NONE, _keyState = STATE2.NONE, _touchZoomDistanceStart = 0, _touchZoomDistanceEnd = 0, _lastAngle = 0; + const _eye = new Vector3(), _movePrev = new Vector2(), _moveCurr = new Vector2(), _lastAxis = new Vector3(), _zoomStart = new Vector2(), _zoomEnd = new Vector2(), _panStart = new Vector2(), _panEnd = new Vector2(), _pointers = [], _pointerPositions = {}; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.up0 = this.object.up.clone(); + this.zoom0 = this.object.zoom; + this.handleResize = function() { + const box = scope.domElement.getBoundingClientRect(); + const d = scope.domElement.ownerDocument.documentElement; + scope.screen.left = box.left + window.pageXOffset - d.clientLeft; + scope.screen.top = box.top + window.pageYOffset - d.clientTop; + scope.screen.width = box.width; + scope.screen.height = box.height; + }; + const getMouseOnScreen = function() { + const vector = new Vector2(); + return function getMouseOnScreen2(pageX, pageY) { + vector.set( + (pageX - scope.screen.left) / scope.screen.width, + (pageY - scope.screen.top) / scope.screen.height + ); + return vector; + }; + }(); + const getMouseOnCircle = function() { + const vector = new Vector2(); + return function getMouseOnCircle2(pageX, pageY) { + vector.set( + (pageX - scope.screen.width * 0.5 - scope.screen.left) / (scope.screen.width * 0.5), + (scope.screen.height + 2 * (scope.screen.top - pageY)) / scope.screen.width + // screen.width intentional + ); + return vector; + }; + }(); + this.rotateCamera = function() { + const axis = new Vector3(), quaternion = new Quaternion(), eyeDirection = new Vector3(), objectUpDirection = new Vector3(), objectSidewaysDirection = new Vector3(), moveDirection = new Vector3(); + return function rotateCamera() { + moveDirection.set(_moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0); + let angle = moveDirection.length(); + if (angle) { + _eye.copy(scope.object.position).sub(scope.target); + eyeDirection.copy(_eye).normalize(); + objectUpDirection.copy(scope.object.up).normalize(); + objectSidewaysDirection.crossVectors(objectUpDirection, eyeDirection).normalize(); + objectUpDirection.setLength(_moveCurr.y - _movePrev.y); + objectSidewaysDirection.setLength(_moveCurr.x - _movePrev.x); + moveDirection.copy(objectUpDirection.add(objectSidewaysDirection)); + axis.crossVectors(moveDirection, _eye).normalize(); + angle *= scope.rotateSpeed; + quaternion.setFromAxisAngle(axis, angle); + _eye.applyQuaternion(quaternion); + scope.object.up.applyQuaternion(quaternion); + _lastAxis.copy(axis); + _lastAngle = angle; + } else if (!scope.staticMoving && _lastAngle) { + _lastAngle *= Math.sqrt(1 - scope.dynamicDampingFactor); + _eye.copy(scope.object.position).sub(scope.target); + quaternion.setFromAxisAngle(_lastAxis, _lastAngle); + _eye.applyQuaternion(quaternion); + scope.object.up.applyQuaternion(quaternion); + } + _movePrev.copy(_moveCurr); + }; + }(); + this.zoomCamera = function() { + let factor; + if (_state === STATE2.TOUCH_ZOOM_PAN) { + factor = _touchZoomDistanceStart / _touchZoomDistanceEnd; + _touchZoomDistanceStart = _touchZoomDistanceEnd; + if (scope.object.isPerspectiveCamera) { + _eye.multiplyScalar(factor); + } else if (scope.object.isOrthographicCamera) { + scope.object.zoom = MathUtils.clamp(scope.object.zoom / factor, scope.minZoom, scope.maxZoom); + if (lastZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + } else { + factor = 1 + (_zoomEnd.y - _zoomStart.y) * scope.zoomSpeed; + if (factor !== 1 && factor > 0) { + if (scope.object.isPerspectiveCamera) { + _eye.multiplyScalar(factor); + } else if (scope.object.isOrthographicCamera) { + scope.object.zoom = MathUtils.clamp(scope.object.zoom / factor, scope.minZoom, scope.maxZoom); + if (lastZoom !== scope.object.zoom) { + scope.object.updateProjectionMatrix(); + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + } + if (scope.staticMoving) { + _zoomStart.copy(_zoomEnd); + } else { + _zoomStart.y += (_zoomEnd.y - _zoomStart.y) * this.dynamicDampingFactor; + } + } + }; + this.panCamera = function() { + const mouseChange = new Vector2(), objectUp = new Vector3(), pan = new Vector3(); + return function panCamera() { + mouseChange.copy(_panEnd).sub(_panStart); + if (mouseChange.lengthSq()) { + if (scope.object.isOrthographicCamera) { + const scale_x = (scope.object.right - scope.object.left) / scope.object.zoom / scope.domElement.clientWidth; + const scale_y = (scope.object.top - scope.object.bottom) / scope.object.zoom / scope.domElement.clientWidth; + mouseChange.x *= scale_x; + mouseChange.y *= scale_y; + } + mouseChange.multiplyScalar(_eye.length() * scope.panSpeed); + pan.copy(_eye).cross(scope.object.up).setLength(mouseChange.x); + pan.add(objectUp.copy(scope.object.up).setLength(mouseChange.y)); + scope.object.position.add(pan); + scope.target.add(pan); + if (scope.staticMoving) { + _panStart.copy(_panEnd); + } else { + _panStart.add(mouseChange.subVectors(_panEnd, _panStart).multiplyScalar(scope.dynamicDampingFactor)); + } + } + }; + }(); + this.checkDistances = function() { + if (!scope.noZoom || !scope.noPan) { + if (_eye.lengthSq() > scope.maxDistance * scope.maxDistance) { + scope.object.position.addVectors(scope.target, _eye.setLength(scope.maxDistance)); + _zoomStart.copy(_zoomEnd); + } + if (_eye.lengthSq() < scope.minDistance * scope.minDistance) { + scope.object.position.addVectors(scope.target, _eye.setLength(scope.minDistance)); + _zoomStart.copy(_zoomEnd); + } + } + }; + this.update = function() { + _eye.subVectors(scope.object.position, scope.target); + if (!scope.noRotate) { + scope.rotateCamera(); + } + if (!scope.noZoom) { + scope.zoomCamera(); + } + if (!scope.noPan) { + scope.panCamera(); + } + scope.object.position.addVectors(scope.target, _eye); + if (scope.object.isPerspectiveCamera) { + scope.checkDistances(); + scope.object.lookAt(scope.target); + if (lastPosition.distanceToSquared(scope.object.position) > EPS2) { + scope.dispatchEvent(_changeEvent4); + 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); + lastPosition.copy(scope.object.position); + lastZoom = scope.object.zoom; + } + } else { + console.warn("THREE.TrackballControls: Unsupported camera type"); + } + }; + this.reset = function() { + _state = STATE2.NONE; + _keyState = STATE2.NONE; + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.up.copy(scope.up0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + _eye.subVectors(scope.object.position, scope.target); + scope.object.lookAt(scope.target); + scope.dispatchEvent(_changeEvent4); + lastPosition.copy(scope.object.position); + lastZoom = scope.object.zoom; + }; + 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); + } + 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) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") { + onTouchEnd(event); + } else { + onMouseUp(); + } + removePointer(event); + if (_pointers.length === 0) { + scope.domElement.releasePointerCapture(event.pointerId); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + } + } + function onPointerCancel2(event) { + removePointer(event); + } + function keydown(event) { + if (scope.enabled === false) return; + window.removeEventListener("keydown", keydown); + if (_keyState !== STATE2.NONE) { + return; + } else if (event.code === scope.keys[STATE2.ROTATE] && !scope.noRotate) { + _keyState = STATE2.ROTATE; + } else if (event.code === scope.keys[STATE2.ZOOM] && !scope.noZoom) { + _keyState = STATE2.ZOOM; + } else if (event.code === scope.keys[STATE2.PAN] && !scope.noPan) { + _keyState = STATE2.PAN; + } + } + function keyup() { + if (scope.enabled === false) return; + _keyState = STATE2.NONE; + window.addEventListener("keydown", keydown); + } + function onMouseDown(event) { + if (_state === STATE2.NONE) { + switch (event.button) { + case scope.mouseButtons.LEFT: + _state = STATE2.ROTATE; + break; + case scope.mouseButtons.MIDDLE: + _state = STATE2.ZOOM; + break; + case scope.mouseButtons.RIGHT: + _state = STATE2.PAN; + break; + } + } + const state = _keyState !== STATE2.NONE ? _keyState : _state; + if (state === STATE2.ROTATE && !scope.noRotate) { + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + _movePrev.copy(_moveCurr); + } else if (state === STATE2.ZOOM && !scope.noZoom) { + _zoomStart.copy(getMouseOnScreen(event.pageX, event.pageY)); + _zoomEnd.copy(_zoomStart); + } else if (state === STATE2.PAN && !scope.noPan) { + _panStart.copy(getMouseOnScreen(event.pageX, event.pageY)); + _panEnd.copy(_panStart); + } + scope.dispatchEvent(_startEvent2); + } + function onMouseMove2(event) { + const state = _keyState !== STATE2.NONE ? _keyState : _state; + if (state === STATE2.ROTATE && !scope.noRotate) { + _movePrev.copy(_moveCurr); + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + } else if (state === STATE2.ZOOM && !scope.noZoom) { + _zoomEnd.copy(getMouseOnScreen(event.pageX, event.pageY)); + } else if (state === STATE2.PAN && !scope.noPan) { + _panEnd.copy(getMouseOnScreen(event.pageX, event.pageY)); + } + } + function onMouseUp() { + _state = STATE2.NONE; + scope.dispatchEvent(_endEvent2); + } + function onMouseWheel(event) { + if (scope.enabled === false) return; + if (scope.noZoom === true) return; + event.preventDefault(); + switch (event.deltaMode) { + case 2: + _zoomStart.y -= event.deltaY * 0.025; + break; + case 1: + _zoomStart.y -= event.deltaY * 0.01; + break; + default: + _zoomStart.y -= event.deltaY * 25e-5; + break; + } + scope.dispatchEvent(_startEvent2); + scope.dispatchEvent(_endEvent2); + } + function onTouchStart(event) { + trackPointer(event); + switch (_pointers.length) { + case 1: + _state = STATE2.TOUCH_ROTATE; + _moveCurr.copy(getMouseOnCircle(_pointers[0].pageX, _pointers[0].pageY)); + _movePrev.copy(_moveCurr); + break; + default: + _state = STATE2.TOUCH_ZOOM_PAN; + const dx = _pointers[0].pageX - _pointers[1].pageX; + const dy = _pointers[0].pageY - _pointers[1].pageY; + _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy); + const x2 = (_pointers[0].pageX + _pointers[1].pageX) / 2; + const y2 = (_pointers[0].pageY + _pointers[1].pageY) / 2; + _panStart.copy(getMouseOnScreen(x2, y2)); + _panEnd.copy(_panStart); + break; + } + scope.dispatchEvent(_startEvent2); + } + function onTouchMove(event) { + trackPointer(event); + switch (_pointers.length) { + case 1: + _movePrev.copy(_moveCurr); + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + break; + default: + const position2 = getSecondPointerPosition(event); + const dx = event.pageX - position2.x; + const dy = event.pageY - position2.y; + _touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy); + const x2 = (event.pageX + position2.x) / 2; + const y2 = (event.pageY + position2.y) / 2; + _panEnd.copy(getMouseOnScreen(x2, y2)); + break; + } + } + function onTouchEnd(event) { + switch (_pointers.length) { + case 0: + _state = STATE2.NONE; + break; + case 1: + _state = STATE2.TOUCH_ROTATE; + _moveCurr.copy(getMouseOnCircle(event.pageX, event.pageY)); + _movePrev.copy(_moveCurr); + break; + case 2: + _state = STATE2.TOUCH_ZOOM_PAN; + for (let i = 0; i < _pointers.length; i++) { + if (_pointers[i].pointerId !== event.pointerId) { + const position2 = _pointerPositions[_pointers[i].pointerId]; + _moveCurr.copy(getMouseOnCircle(position2.x, position2.y)); + _movePrev.copy(_moveCurr); + break; + } + } + break; + } + scope.dispatchEvent(_endEvent2); + } + function contextmenu2(event) { + if (scope.enabled === false) return; + event.preventDefault(); + } + function addPointer(event) { + _pointers.push(event); + } + function removePointer(event) { + delete _pointerPositions[event.pointerId]; + for (let i = 0; i < _pointers.length; i++) { + if (_pointers[i].pointerId == event.pointerId) { + _pointers.splice(i, 1); + return; + } + } + } + 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 pointer = event.pointerId === _pointers[0].pointerId ? _pointers[1] : _pointers[0]; + return _pointerPositions[pointer.pointerId]; + } + this.dispose = function() { + scope.domElement.removeEventListener("contextmenu", contextmenu2); + scope.domElement.removeEventListener("pointerdown", onPointerDown3); + scope.domElement.removeEventListener("pointercancel", onPointerCancel2); + scope.domElement.removeEventListener("wheel", onMouseWheel); + scope.domElement.removeEventListener("pointermove", onPointerMove3); + scope.domElement.removeEventListener("pointerup", onPointerUp3); + window.removeEventListener("keydown", keydown); + window.removeEventListener("keyup", keyup); + }; + this.domElement.addEventListener("contextmenu", contextmenu2); + this.domElement.addEventListener("pointerdown", onPointerDown3); + this.domElement.addEventListener("pointercancel", onPointerCancel2); + this.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); + window.addEventListener("keydown", keydown); + window.addEventListener("keyup", keyup); + this.handleResize(); + this.update(); + } +}; + +// node_modules/three/examples/jsm/controls/TransformControls.js +var _raycaster3 = new Raycaster(); +var _tempVector = new Vector3(); +var _tempVector2 = new Vector3(); +var _tempQuaternion = new Quaternion(); +var _unit = { + X: new Vector3(1, 0, 0), + Y: new Vector3(0, 1, 0), + Z: new Vector3(0, 0, 1) +}; +var _changeEvent5 = { type: "change" }; +var _mouseDownEvent = { type: "mouseDown", mode: null }; +var _mouseUpEvent = { type: "mouseUp", mode: null }; +var _objectChangeEvent = { type: "objectChange" }; +var TransformControls = class extends Object3D { + constructor(camera, domElement) { + super(); + if (domElement === void 0) { + console.warn('THREE.TransformControls: The second parameter "domElement" is now mandatory.'); + domElement = document; + } + this.isTransformControls = true; + this.visible = false; + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + const _gizmo = new TransformControlsGizmo(); + this._gizmo = _gizmo; + this.add(_gizmo); + const _plane4 = new TransformControlsPlane(); + this._plane = _plane4; + this.add(_plane4); + const scope = this; + function defineProperty(propName, defaultValue) { + let propValue = defaultValue; + Object.defineProperty(scope, propName, { + get: function() { + return propValue !== void 0 ? propValue : defaultValue; + }, + set: function(value2) { + if (propValue !== value2) { + propValue = value2; + _plane4[propName] = value2; + _gizmo[propName] = value2; + scope.dispatchEvent({ type: propName + "-changed", value: value2 }); + scope.dispatchEvent(_changeEvent5); + } + } + }); + scope[propName] = defaultValue; + _plane4[propName] = defaultValue; + _gizmo[propName] = defaultValue; + } + defineProperty("camera", camera); + defineProperty("object", void 0); + defineProperty("enabled", true); + defineProperty("axis", null); + defineProperty("mode", "translate"); + defineProperty("translationSnap", null); + defineProperty("rotationSnap", null); + defineProperty("scaleSnap", null); + defineProperty("space", "world"); + defineProperty("size", 1); + defineProperty("dragging", false); + defineProperty("showX", true); + defineProperty("showY", true); + defineProperty("showZ", true); + const worldPosition = new Vector3(); + const worldPositionStart = new Vector3(); + const worldQuaternion = new Quaternion(); + const worldQuaternionStart = new Quaternion(); + const cameraPosition = new Vector3(); + const cameraQuaternion = new Quaternion(); + const pointStart = new Vector3(); + const pointEnd = new Vector3(); + const rotationAxis = new Vector3(); + const rotationAngle = 0; + const eye = new Vector3(); + defineProperty("worldPosition", worldPosition); + defineProperty("worldPositionStart", worldPositionStart); + defineProperty("worldQuaternion", worldQuaternion); + defineProperty("worldQuaternionStart", worldQuaternionStart); + defineProperty("cameraPosition", cameraPosition); + defineProperty("cameraQuaternion", cameraQuaternion); + defineProperty("pointStart", pointStart); + defineProperty("pointEnd", pointEnd); + defineProperty("rotationAxis", rotationAxis); + defineProperty("rotationAngle", rotationAngle); + defineProperty("eye", eye); + this._offset = new Vector3(); + this._startNorm = new Vector3(); + this._endNorm = new Vector3(); + this._cameraScale = new Vector3(); + this._parentPosition = new Vector3(); + this._parentQuaternion = new Quaternion(); + this._parentQuaternionInv = new Quaternion(); + this._parentScale = new Vector3(); + this._worldScaleStart = new Vector3(); + this._worldQuaternionInv = new Quaternion(); + this._worldScale = new Vector3(); + this._positionStart = new Vector3(); + this._quaternionStart = new Quaternion(); + this._scaleStart = new Vector3(); + this._getPointer = getPointer.bind(this); + this._onPointerDown = onPointerDown2.bind(this); + this._onPointerHover = onPointerHover.bind(this); + this._onPointerMove = onPointerMove2.bind(this); + this._onPointerUp = onPointerUp2.bind(this); + this.domElement.addEventListener("pointerdown", this._onPointerDown); + this.domElement.addEventListener("pointermove", this._onPointerHover); + this.domElement.addEventListener("pointerup", this._onPointerUp); + } + // updateMatrixWorld updates key transformation variables + updateMatrixWorld(force) { + if (this.object !== void 0) { + this.object.updateMatrixWorld(); + if (this.object.parent === null) { + console.error("TransformControls: The attached 3D object must be a part of the scene graph."); + } else { + this.object.parent.matrixWorld.decompose(this._parentPosition, this._parentQuaternion, this._parentScale); + } + this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this._worldScale); + this._parentQuaternionInv.copy(this._parentQuaternion).invert(); + this._worldQuaternionInv.copy(this.worldQuaternion).invert(); + } + this.camera.updateMatrixWorld(); + this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this._cameraScale); + if (this.camera.isOrthographicCamera) { + this.camera.getWorldDirection(this.eye).negate(); + } else { + this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(); + } + super.updateMatrixWorld(force); + } + pointerHover(pointer) { + if (this.object === void 0 || this.dragging === true) return; + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const intersect = intersectObjectWithRay(this._gizmo.picker[this.mode], _raycaster3); + if (intersect) { + this.axis = intersect.object.name; + } else { + this.axis = null; + } + } + pointerDown(pointer) { + if (this.object === void 0 || this.dragging === true || pointer != null && pointer.button !== 0) return; + if (this.axis !== null) { + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const planeIntersect = intersectObjectWithRay(this._plane, _raycaster3, true); + if (planeIntersect) { + this.object.updateMatrixWorld(); + this.object.parent.updateMatrixWorld(); + this._positionStart.copy(this.object.position); + this._quaternionStart.copy(this.object.quaternion); + this._scaleStart.copy(this.object.scale); + this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this._worldScaleStart); + this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart); + } + this.dragging = true; + _mouseDownEvent.mode = this.mode; + this.dispatchEvent(_mouseDownEvent); + } + } + pointerMove(pointer) { + const axis = this.axis; + const mode = this.mode; + const object = this.object; + let space = this.space; + if (mode === "scale") { + space = "local"; + } else if (axis === "E" || axis === "XYZE" || axis === "XYZ") { + space = "world"; + } + if (object === void 0 || axis === null || this.dragging === false || pointer !== null && pointer.button !== -1) return; + if (pointer !== null) _raycaster3.setFromCamera(pointer, this.camera); + const planeIntersect = intersectObjectWithRay(this._plane, _raycaster3, true); + if (!planeIntersect) return; + this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart); + if (mode === "translate") { + this._offset.copy(this.pointEnd).sub(this.pointStart); + if (space === "local" && axis !== "XYZ") { + this._offset.applyQuaternion(this._worldQuaternionInv); + } + if (axis.indexOf("X") === -1) this._offset.x = 0; + if (axis.indexOf("Y") === -1) this._offset.y = 0; + if (axis.indexOf("Z") === -1) this._offset.z = 0; + if (space === "local" && axis !== "XYZ") { + this._offset.applyQuaternion(this._quaternionStart).divide(this._parentScale); + } else { + this._offset.applyQuaternion(this._parentQuaternionInv).divide(this._parentScale); + } + object.position.copy(this._offset).add(this._positionStart); + if (this.translationSnap) { + if (space === "local") { + object.position.applyQuaternion(_tempQuaternion.copy(this._quaternionStart).invert()); + if (axis.search("X") !== -1) { + object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + } + if (axis.search("Y") !== -1) { + object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + } + if (axis.search("Z") !== -1) { + object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + } + object.position.applyQuaternion(this._quaternionStart); + } + if (space === "world") { + if (object.parent) { + object.position.add(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + } + if (axis.search("X") !== -1) { + object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + } + if (axis.search("Y") !== -1) { + object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + } + if (axis.search("Z") !== -1) { + object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + } + if (object.parent) { + object.position.sub(_tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + } + } + } + } else if (mode === "scale") { + if (axis.search("XYZ") !== -1) { + let d = this.pointEnd.length() / this.pointStart.length(); + if (this.pointEnd.dot(this.pointStart) < 0) d *= -1; + _tempVector2.set(d, d, d); + } else { + _tempVector.copy(this.pointStart); + _tempVector2.copy(this.pointEnd); + _tempVector.applyQuaternion(this._worldQuaternionInv); + _tempVector2.applyQuaternion(this._worldQuaternionInv); + _tempVector2.divide(_tempVector); + if (axis.search("X") === -1) { + _tempVector2.x = 1; + } + if (axis.search("Y") === -1) { + _tempVector2.y = 1; + } + if (axis.search("Z") === -1) { + _tempVector2.z = 1; + } + } + object.scale.copy(this._scaleStart).multiply(_tempVector2); + if (this.scaleSnap) { + if (axis.search("X") !== -1) { + object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + if (axis.search("Y") !== -1) { + object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + if (axis.search("Z") !== -1) { + object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + } + } else if (mode === "rotate") { + this._offset.copy(this.pointEnd).sub(this.pointStart); + const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(_tempVector.setFromMatrixPosition(this.camera.matrixWorld)); + let _inPlaneRotation = false; + if (axis === "XYZE") { + this.rotationAxis.copy(this._offset).cross(this.eye).normalize(); + this.rotationAngle = this._offset.dot(_tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED; + } else if (axis === "X" || axis === "Y" || axis === "Z") { + this.rotationAxis.copy(_unit[axis]); + _tempVector.copy(_unit[axis]); + if (space === "local") { + _tempVector.applyQuaternion(this.worldQuaternion); + } + _tempVector.cross(this.eye); + if (_tempVector.length() === 0) { + _inPlaneRotation = true; + } else { + this.rotationAngle = this._offset.dot(_tempVector.normalize()) * ROTATION_SPEED; + } + } + if (axis === "E" || _inPlaneRotation) { + this.rotationAxis.copy(this.eye); + this.rotationAngle = this.pointEnd.angleTo(this.pointStart); + this._startNorm.copy(this.pointStart).normalize(); + this._endNorm.copy(this.pointEnd).normalize(); + this.rotationAngle *= this._endNorm.cross(this._startNorm).dot(this.eye) < 0 ? 1 : -1; + } + if (this.rotationSnap) this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap; + if (space === "local" && axis !== "E" && axis !== "XYZE") { + object.quaternion.copy(this._quaternionStart); + object.quaternion.multiply(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize(); + } else { + this.rotationAxis.applyQuaternion(this._parentQuaternionInv); + object.quaternion.copy(_tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)); + object.quaternion.multiply(this._quaternionStart).normalize(); + } + } + this.dispatchEvent(_changeEvent5); + this.dispatchEvent(_objectChangeEvent); + } + pointerUp(pointer) { + if (pointer !== null && pointer.button !== 0) return; + if (this.dragging && this.axis !== null) { + _mouseUpEvent.mode = this.mode; + this.dispatchEvent(_mouseUpEvent); + } + this.dragging = false; + this.axis = null; + } + dispose() { + this.domElement.removeEventListener("pointerdown", this._onPointerDown); + this.domElement.removeEventListener("pointermove", this._onPointerHover); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.domElement.removeEventListener("pointerup", this._onPointerUp); + this.traverse(function(child) { + if (child.geometry) child.geometry.dispose(); + if (child.material) child.material.dispose(); + }); + } + // Set current object + attach(object) { + this.object = object; + this.visible = true; + return this; + } + // Detach from object + detach() { + this.object = void 0; + this.visible = false; + this.axis = null; + return this; + } + reset() { + if (!this.enabled) return; + if (this.dragging) { + this.object.position.copy(this._positionStart); + this.object.quaternion.copy(this._quaternionStart); + this.object.scale.copy(this._scaleStart); + this.dispatchEvent(_changeEvent5); + this.dispatchEvent(_objectChangeEvent); + this.pointStart.copy(this.pointEnd); + } + } + getRaycaster() { + return _raycaster3; + } + // TODO: deprecate + getMode() { + return this.mode; + } + setMode(mode) { + this.mode = mode; + } + setTranslationSnap(translationSnap) { + this.translationSnap = translationSnap; + } + setRotationSnap(rotationSnap) { + this.rotationSnap = rotationSnap; + } + setScaleSnap(scaleSnap) { + this.scaleSnap = scaleSnap; + } + setSize(size2) { + this.size = size2; + } + setSpace(space) { + this.space = space; + } +}; +function getPointer(event) { + if (this.domElement.ownerDocument.pointerLockElement) { + return { + x: 0, + y: 0, + button: event.button + }; + } else { + const rect = this.domElement.getBoundingClientRect(); + return { + x: (event.clientX - rect.left) / rect.width * 2 - 1, + y: -(event.clientY - rect.top) / rect.height * 2 + 1, + button: event.button + }; + } +} +function onPointerHover(event) { + if (!this.enabled) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.pointerHover(this._getPointer(event)); + break; + } +} +function onPointerDown2(event) { + if (!this.enabled) return; + if (!document.pointerLockElement) { + this.domElement.setPointerCapture(event.pointerId); + } + this.domElement.addEventListener("pointermove", this._onPointerMove); + this.pointerHover(this._getPointer(event)); + this.pointerDown(this._getPointer(event)); +} +function onPointerMove2(event) { + if (!this.enabled) return; + this.pointerMove(this._getPointer(event)); +} +function onPointerUp2(event) { + if (!this.enabled) return; + this.domElement.releasePointerCapture(event.pointerId); + this.domElement.removeEventListener("pointermove", this._onPointerMove); + this.pointerUp(this._getPointer(event)); +} +function intersectObjectWithRay(object, raycaster, includeInvisible) { + const allIntersections = raycaster.intersectObject(object, true); + for (let i = 0; i < allIntersections.length; i++) { + if (allIntersections[i].object.visible || includeInvisible) { + return allIntersections[i]; + } + } + return false; +} +var _tempEuler = new Euler(); +var _alignVector = new Vector3(0, 1, 0); +var _zeroVector = new Vector3(0, 0, 0); +var _lookAtMatrix = new Matrix4(); +var _tempQuaternion2 = new Quaternion(); +var _identityQuaternion = new Quaternion(); +var _dirVector = new Vector3(); +var _tempMatrix = new Matrix4(); +var _unitX = new Vector3(1, 0, 0); +var _unitY = new Vector3(0, 1, 0); +var _unitZ = new Vector3(0, 0, 1); +var _v1 = new Vector3(); +var _v2 = new Vector3(); +var _v3 = new Vector3(); +var TransformControlsGizmo = class extends Object3D { + constructor() { + super(); + this.isTransformControlsGizmo = true; + this.type = "TransformControlsGizmo"; + const gizmoMaterial = new MeshBasicMaterial({ + depthTest: false, + depthWrite: false, + fog: false, + toneMapped: false, + transparent: true + }); + const gizmoLineMaterial = new LineBasicMaterial({ + depthTest: false, + depthWrite: false, + fog: false, + toneMapped: false, + transparent: true + }); + const matInvisible = gizmoMaterial.clone(); + matInvisible.opacity = 0.15; + const matHelper = gizmoLineMaterial.clone(); + matHelper.opacity = 0.5; + const matRed = gizmoMaterial.clone(); + matRed.color.setHex(16711680); + const matGreen = gizmoMaterial.clone(); + matGreen.color.setHex(65280); + const matBlue = gizmoMaterial.clone(); + matBlue.color.setHex(255); + const matRedTransparent = gizmoMaterial.clone(); + matRedTransparent.color.setHex(16711680); + matRedTransparent.opacity = 0.5; + const matGreenTransparent = gizmoMaterial.clone(); + matGreenTransparent.color.setHex(65280); + matGreenTransparent.opacity = 0.5; + const matBlueTransparent = gizmoMaterial.clone(); + matBlueTransparent.color.setHex(255); + matBlueTransparent.opacity = 0.5; + const matWhiteTransparent = gizmoMaterial.clone(); + matWhiteTransparent.opacity = 0.25; + const matYellowTransparent = gizmoMaterial.clone(); + matYellowTransparent.color.setHex(16776960); + matYellowTransparent.opacity = 0.25; + const matYellow = gizmoMaterial.clone(); + matYellow.color.setHex(16776960); + const matGray = gizmoMaterial.clone(); + matGray.color.setHex(7895160); + const arrowGeometry = new CylinderGeometry(0, 0.04, 0.1, 12); + arrowGeometry.translate(0, 0.05, 0); + const scaleHandleGeometry = new BoxGeometry(0.08, 0.08, 0.08); + scaleHandleGeometry.translate(0, 0.04, 0); + const lineGeometry = new BufferGeometry(); + lineGeometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3)); + const lineGeometry2 = new CylinderGeometry(75e-4, 75e-4, 0.5, 3); + lineGeometry2.translate(0, 0.25, 0); + function CircleGeometry(radius, arc) { + const geometry = new TorusGeometry(radius, 75e-4, 3, 64, arc * Math.PI * 2); + geometry.rotateY(Math.PI / 2); + geometry.rotateX(Math.PI / 2); + return geometry; + } + function TranslateHelperGeometry() { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3)); + return geometry; + } + const gizmoTranslate = { + X: [ + [new Mesh(arrowGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(arrowGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]], + [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]] + ], + Y: [ + [new Mesh(arrowGeometry, matGreen), [0, 0.5, 0]], + [new Mesh(arrowGeometry, matGreen), [0, -0.5, 0], [Math.PI, 0, 0]], + [new Mesh(lineGeometry2, matGreen)] + ], + Z: [ + [new Mesh(arrowGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], + [new Mesh(arrowGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]], + [new Mesh(lineGeometry2, matBlue), null, [Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent.clone()), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent.clone()), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ] + }; + const pickerTranslate = { + X: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)] + ], + XY: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ] + }; + const helperTranslate = { + START: [ + [new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"] + ], + END: [ + [new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"] + ], + DELTA: [ + [new Line(TranslateHelperGeometry(), matHelper), null, null, null, "helper"] + ], + X: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"] + ], + Z: [ + [new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"] + ] + }; + const gizmoRotate = { + XYZE: [ + [new Mesh(CircleGeometry(0.5, 1), matGray), null, [0, Math.PI / 2, 0]] + ], + X: [ + [new Mesh(CircleGeometry(0.5, 0.5), matRed)] + ], + Y: [ + [new Mesh(CircleGeometry(0.5, 0.5), matGreen), null, [0, 0, -Math.PI / 2]] + ], + Z: [ + [new Mesh(CircleGeometry(0.5, 0.5), matBlue), null, [0, Math.PI / 2, 0]] + ], + E: [ + [new Mesh(CircleGeometry(0.75, 1), matYellowTransparent), null, [0, Math.PI / 2, 0]] + ] + }; + const helperRotate = { + AXIS: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ] + }; + const pickerRotate = { + XYZE: [ + [new Mesh(new SphereGeometry(0.25, 10, 8), matInvisible)] + ], + X: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]] + ], + Y: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]] + ], + Z: [ + [new Mesh(new TorusGeometry(0.5, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]] + ], + E: [ + [new Mesh(new TorusGeometry(0.75, 0.1, 2, 24), matInvisible)] + ] + }; + const gizmoScale = { + X: [ + [new Mesh(scaleHandleGeometry, matRed), [0.5, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(lineGeometry2, matRed), [0, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(scaleHandleGeometry, matRed), [-0.5, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(scaleHandleGeometry, matGreen), [0, 0.5, 0]], + [new Mesh(lineGeometry2, matGreen)], + [new Mesh(scaleHandleGeometry, matGreen), [0, -0.5, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.5], [Math.PI / 2, 0, 0]], + [new Mesh(lineGeometry2, matBlue), [0, 0, 0], [Math.PI / 2, 0, 0]], + [new Mesh(scaleHandleGeometry, matBlue), [0, 0, -0.5], [-Math.PI / 2, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matBlueTransparent), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matRedTransparent), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.15, 0.15, 0.01), matGreenTransparent), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new BoxGeometry(0.1, 0.1, 0.1), matWhiteTransparent.clone())] + ] + }; + const pickerScale = { + X: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0.3, 0, 0], [0, 0, -Math.PI / 2]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [-0.3, 0, 0], [0, 0, Math.PI / 2]] + ], + Y: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0.3, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, -0.3, 0], [0, 0, Math.PI]] + ], + Z: [ + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, 0.3], [Math.PI / 2, 0, 0]], + [new Mesh(new CylinderGeometry(0.2, 0, 0.6, 4), matInvisible), [0, 0, -0.3], [-Math.PI / 2, 0, 0]] + ], + XY: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0.15, 0]] + ], + YZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0, 0.15, 0.15], [0, Math.PI / 2, 0]] + ], + XZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.01), matInvisible), [0.15, 0, 0.15], [-Math.PI / 2, 0, 0]] + ], + XYZ: [ + [new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 0]] + ] + }; + const helperScale = { + X: [ + [new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"] + ], + Y: [ + [new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"] + ], + Z: [ + [new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"] + ] + }; + function setupGizmo(gizmoMap) { + const gizmo = new Object3D(); + for (const name2 in gizmoMap) { + for (let i = gizmoMap[name2].length; i--; ) { + const object = gizmoMap[name2][i][0].clone(); + const position2 = gizmoMap[name2][i][1]; + const rotation2 = gizmoMap[name2][i][2]; + const scale2 = gizmoMap[name2][i][3]; + const tag = gizmoMap[name2][i][4]; + object.name = name2; + object.tag = tag; + if (position2) { + object.position.set(position2[0], position2[1], position2[2]); + } + if (rotation2) { + object.rotation.set(rotation2[0], rotation2[1], rotation2[2]); + } + if (scale2) { + object.scale.set(scale2[0], scale2[1], scale2[2]); + } + object.updateMatrix(); + const tempGeometry = object.geometry.clone(); + tempGeometry.applyMatrix4(object.matrix); + object.geometry = tempGeometry; + object.renderOrder = Infinity; + object.position.set(0, 0, 0); + object.rotation.set(0, 0, 0); + object.scale.set(1, 1, 1); + gizmo.add(object); + } + } + return gizmo; + } + this.gizmo = {}; + this.picker = {}; + this.helper = {}; + this.add(this.gizmo["translate"] = setupGizmo(gizmoTranslate)); + this.add(this.gizmo["rotate"] = setupGizmo(gizmoRotate)); + this.add(this.gizmo["scale"] = setupGizmo(gizmoScale)); + this.add(this.picker["translate"] = setupGizmo(pickerTranslate)); + this.add(this.picker["rotate"] = setupGizmo(pickerRotate)); + this.add(this.picker["scale"] = setupGizmo(pickerScale)); + this.add(this.helper["translate"] = setupGizmo(helperTranslate)); + this.add(this.helper["rotate"] = setupGizmo(helperRotate)); + this.add(this.helper["scale"] = setupGizmo(helperScale)); + this.picker["translate"].visible = false; + this.picker["rotate"].visible = false; + this.picker["scale"].visible = false; + } + // updateMatrixWorld will update transformations and appearance of individual handles + updateMatrixWorld(force) { + const space = this.mode === "scale" ? "local" : this.space; + const quaternion = space === "local" ? this.worldQuaternion : _identityQuaternion; + this.gizmo["translate"].visible = this.mode === "translate"; + this.gizmo["rotate"].visible = this.mode === "rotate"; + this.gizmo["scale"].visible = this.mode === "scale"; + this.helper["translate"].visible = this.mode === "translate"; + this.helper["rotate"].visible = this.mode === "rotate"; + this.helper["scale"].visible = this.mode === "scale"; + let handles = []; + handles = handles.concat(this.picker[this.mode].children); + handles = handles.concat(this.gizmo[this.mode].children); + handles = handles.concat(this.helper[this.mode].children); + for (let i = 0; i < handles.length; i++) { + const handle = handles[i]; + handle.visible = true; + handle.rotation.set(0, 0, 0); + handle.position.copy(this.worldPosition); + let factor; + if (this.camera.isOrthographicCamera) { + factor = (this.camera.top - this.camera.bottom) / this.camera.zoom; + } else { + factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7); + } + handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 4); + if (handle.tag === "helper") { + handle.visible = false; + if (handle.name === "AXIS") { + handle.visible = !!this.axis; + if (this.axis === "X") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, 0)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "Y") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, 0, Math.PI / 2)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "Z") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0)); + handle.quaternion.copy(quaternion).multiply(_tempQuaternion); + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) { + handle.visible = false; + } + } + if (this.axis === "XYZE") { + _tempQuaternion.setFromEuler(_tempEuler.set(0, Math.PI / 2, 0)); + _alignVector.copy(this.rotationAxis); + handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(_zeroVector, _alignVector, _unitY)); + handle.quaternion.multiply(_tempQuaternion); + handle.visible = this.dragging; + } + if (this.axis === "E") { + handle.visible = false; + } + } else if (handle.name === "START") { + handle.position.copy(this.worldPositionStart); + handle.visible = this.dragging; + } else if (handle.name === "END") { + handle.position.copy(this.worldPosition); + handle.visible = this.dragging; + } else if (handle.name === "DELTA") { + handle.position.copy(this.worldPositionStart); + handle.quaternion.copy(this.worldQuaternionStart); + _tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1); + _tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert()); + handle.scale.copy(_tempVector); + handle.visible = this.dragging; + } else { + handle.quaternion.copy(quaternion); + if (this.dragging) { + handle.position.copy(this.worldPositionStart); + } else { + handle.position.copy(this.worldPosition); + } + if (this.axis) { + handle.visible = this.axis.search(handle.name) !== -1; + } + } + continue; + } + handle.quaternion.copy(quaternion); + if (this.mode === "translate" || this.mode === "scale") { + const AXIS_HIDE_THRESHOLD = 0.99; + const PLANE_HIDE_THRESHOLD = 0.2; + if (handle.name === "X") { + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Y") { + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Z") { + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XY") { + if (Math.abs(_alignVector.copy(_unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "YZ") { + if (Math.abs(_alignVector.copy(_unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XZ") { + if (Math.abs(_alignVector.copy(_unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_THRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + } else if (this.mode === "rotate") { + _tempQuaternion2.copy(quaternion); + _alignVector.copy(this.eye).applyQuaternion(_tempQuaternion.copy(quaternion).invert()); + if (handle.name.search("E") !== -1) { + handle.quaternion.setFromRotationMatrix(_lookAtMatrix.lookAt(this.eye, _zeroVector, _unitY)); + } + if (handle.name === "X") { + _tempQuaternion.setFromAxisAngle(_unitX, Math.atan2(-_alignVector.y, _alignVector.z)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + if (handle.name === "Y") { + _tempQuaternion.setFromAxisAngle(_unitY, Math.atan2(_alignVector.x, _alignVector.z)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + if (handle.name === "Z") { + _tempQuaternion.setFromAxisAngle(_unitZ, Math.atan2(_alignVector.y, _alignVector.x)); + _tempQuaternion.multiplyQuaternions(_tempQuaternion2, _tempQuaternion); + handle.quaternion.copy(_tempQuaternion); + } + } + handle.visible = handle.visible && (handle.name.indexOf("X") === -1 || this.showX); + handle.visible = handle.visible && (handle.name.indexOf("Y") === -1 || this.showY); + handle.visible = handle.visible && (handle.name.indexOf("Z") === -1 || this.showZ); + handle.visible = handle.visible && (handle.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ); + handle.material._color = handle.material._color || handle.material.color.clone(); + handle.material._opacity = handle.material._opacity || handle.material.opacity; + handle.material.color.copy(handle.material._color); + handle.material.opacity = handle.material._opacity; + if (this.enabled && this.axis) { + if (handle.name === this.axis) { + handle.material.color.setHex(16776960); + handle.material.opacity = 1; + } else if (this.axis.split("").some(function(a2) { + return handle.name === a2; + })) { + handle.material.color.setHex(16776960); + handle.material.opacity = 1; + } + } + } + super.updateMatrixWorld(force); + } +}; +var TransformControlsPlane = class extends Mesh { + constructor() { + super( + new PlaneGeometry(1e5, 1e5, 2, 2), + new MeshBasicMaterial({ visible: false, wireframe: true, side: DoubleSide, transparent: true, opacity: 0.1, toneMapped: false }) + ); + this.isTransformControlsPlane = true; + this.type = "TransformControlsPlane"; + } + updateMatrixWorld(force) { + let space = this.space; + this.position.copy(this.worldPosition); + if (this.mode === "scale") space = "local"; + _v1.copy(_unitX).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _v2.copy(_unitY).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _v3.copy(_unitZ).applyQuaternion(space === "local" ? this.worldQuaternion : _identityQuaternion); + _alignVector.copy(_v2); + switch (this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + _alignVector.copy(this.eye).cross(_v1); + _dirVector.copy(_v1).cross(_alignVector); + break; + case "Y": + _alignVector.copy(this.eye).cross(_v2); + _dirVector.copy(_v2).cross(_alignVector); + break; + case "Z": + _alignVector.copy(this.eye).cross(_v3); + _dirVector.copy(_v3).cross(_alignVector); + break; + case "XY": + _dirVector.copy(_v3); + break; + case "YZ": + _dirVector.copy(_v1); + break; + case "XZ": + _alignVector.copy(_v3); + _dirVector.copy(_v2); + break; + case "XYZ": + case "E": + _dirVector.set(0, 0, 0); + break; + } + break; + case "rotate": + default: + _dirVector.set(0, 0, 0); + } + if (_dirVector.length() === 0) { + this.quaternion.copy(this.cameraQuaternion); + } else { + _tempMatrix.lookAt(_tempVector.set(0, 0, 0), _dirVector, _alignVector); + this.quaternion.setFromRotationMatrix(_tempMatrix); + } + super.updateMatrixWorld(force); + } +}; + +// node_modules/three/examples/jsm/csm/CSMFrustum.js +var inverseProjectionMatrix = new Matrix4(); +var CSMFrustum = class _CSMFrustum { + constructor(data2) { + data2 = data2 || {}; + this.vertices = { + near: [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ], + far: [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ] + }; + if (data2.projectionMatrix !== void 0) { + this.setFromProjectionMatrix(data2.projectionMatrix, data2.maxFar || 1e4); + } + } + setFromProjectionMatrix(projectionMatrix, maxFar) { + const isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0; + inverseProjectionMatrix.copy(projectionMatrix).invert(); + this.vertices.near[0].set(1, 1, -1); + this.vertices.near[1].set(1, -1, -1); + this.vertices.near[2].set(-1, -1, -1); + this.vertices.near[3].set(-1, 1, -1); + this.vertices.near.forEach(function(v) { + v.applyMatrix4(inverseProjectionMatrix); + }); + this.vertices.far[0].set(1, 1, 1); + this.vertices.far[1].set(1, -1, 1); + this.vertices.far[2].set(-1, -1, 1); + this.vertices.far[3].set(-1, 1, 1); + this.vertices.far.forEach(function(v) { + v.applyMatrix4(inverseProjectionMatrix); + const absZ = Math.abs(v.z); + if (isOrthographic) { + v.z *= Math.min(maxFar / absZ, 1); + } else { + v.multiplyScalar(Math.min(maxFar / absZ, 1)); + } + }); + return this.vertices; + } + split(breaks, target) { + while (breaks.length > target.length) { + target.push(new _CSMFrustum()); + } + target.length = breaks.length; + for (let i = 0; i < breaks.length; i++) { + const cascade = target[i]; + if (i === 0) { + for (let j = 0; j < 4; j++) { + cascade.vertices.near[j].copy(this.vertices.near[j]); + } + } else { + for (let j = 0; j < 4; j++) { + cascade.vertices.near[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i - 1]); + } + } + if (i === breaks.length - 1) { + for (let j = 0; j < 4; j++) { + cascade.vertices.far[j].copy(this.vertices.far[j]); + } + } else { + for (let j = 0; j < 4; j++) { + cascade.vertices.far[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i]); + } + } + } + } + toSpace(cameraMatrix, target) { + for (let i = 0; i < 4; i++) { + target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix); + target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix); + } + } +}; + +// node_modules/three/examples/jsm/csm/CSMShader.js +var CSMShader = { + lights_fragment_begin: ( + /* glsl */ + ` +vec3 geometryPosition = - vViewPosition; +vec3 geometryNormal = normal; +vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); + +vec3 geometryClearcoatNormal = vec3( 0.0 ); + +#ifdef USE_CLEARCOAT + + geometryClearcoatNormal = clearcoatNormal; + +#endif + +#ifdef USE_IRIDESCENCE + float dotNVi = saturate( dot( normal, geometryViewDir ) ); + if ( material.iridescenceThickness == 0.0 ) { + material.iridescence = 0.0; + } else { + material.iridescence = saturate( material.iridescence ); + } + if ( material.iridescence > 0.0 ) { + material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); + // Iridescence F0 approximation + material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); + } +#endif + +IncidentLight directLight; + +#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) + + PointLight pointLight; + #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 + PointLightShadow pointLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { + + pointLight = pointLights[ i ]; + + getPointLightInfo( pointLight, geometryPosition, directLight ); + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) + pointLightShadow = pointLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) + + SpotLight spotLight; + vec4 spotColor; + vec3 spotLightCoord; + bool inSpotLightMap; + + #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 + SpotLightShadow spotLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { + + spotLight = spotLights[ i ]; + + getSpotLightInfo( spotLight, geometryPosition, directLight ); + + // spot lights are ordered [shadows with maps, shadows without maps, maps without shadows, none] + #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX + #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS + #else + #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) + #endif + #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) + spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; + inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); + spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); + directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; + #endif + #undef SPOT_LIGHT_MAP_INDEX + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) + spotLightShadow = spotLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; + + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES ) + + DirectionalLight directionalLight; + float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear); + #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLightShadow; + #endif + + #if defined( USE_SHADOWMAP ) && defined( CSM_FADE ) + vec2 cascade; + float cascadeCenter; + float closestEdge; + float margin; + float csmx; + float csmy; + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + getDirectionalLightInfo( directionalLight, directLight ); + + #if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + // NOTE: Depth gets larger away from the camera. + // cascade.x is closer, cascade.y is further + cascade = CSM_cascades[ i ]; + cascadeCenter = ( cascade.x + cascade.y ) / 2.0; + closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y; + margin = 0.25 * pow( closestEdge, 2.0 ); + csmx = cascade.x - margin / 2.0; + csmy = cascade.y + margin / 2.0; + if( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) { + + float dist = min( linearDepth - csmx, csmy - linearDepth ); + float ratio = clamp( dist / margin, 0.0, 1.0 ); + + vec3 prevColor = directLight.color; + directionalLightShadow = directionalLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + + bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter; + directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 ); + + ReflectedLight prevLight = reflectedLight; + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter; + float blendRatio = shouldBlend ? ratio : 1.0; + + reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio ); + reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio ); + reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio ); + reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio ); + + } + #endif + + } + #pragma unroll_loop_end + #elif defined (USE_SHADOWMAP) + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + getDirectionalLightInfo( directionalLight, directLight ); + + #if ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + + directionalLightShadow = directionalLightShadows[ i ]; + if(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; + + if(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 ); + + #endif + + } + #pragma unroll_loop_end + + #elif ( NUM_DIR_LIGHT_SHADOWS > 0 ) + // note: no loop here - all CSM lights are in fact one light only + getDirectionalLightInfo( directionalLights[0], directLight ); + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + #endif + + #if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS) + // compute the lights not casting shadows (if any) + + #pragma unroll_loop_start + for ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + + getDirectionalLightInfo( directionalLight, directLight ); + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + + #endif + +#endif + + +#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES ) + + DirectionalLight directionalLight; + #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 + DirectionalLightShadow directionalLightShadow; + #endif + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { + + directionalLight = directionalLights[ i ]; + + getDirectionalLightInfo( directionalLight, directLight ); + + #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) + directionalLightShadow = directionalLightShadows[ i ]; + directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; + #endif + + RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) + + RectAreaLight rectAreaLight; + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { + + rectAreaLight = rectAreaLights[ i ]; + RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); + + } + #pragma unroll_loop_end + +#endif + +#if defined( RE_IndirectDiffuse ) + + vec3 iblIrradiance = vec3( 0.0 ); + + vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); + + #if defined( USE_LIGHT_PROBES ) + + irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); + + #endif + + #if ( NUM_HEMI_LIGHTS > 0 ) + + #pragma unroll_loop_start + for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { + + irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); + + } + #pragma unroll_loop_end + + #endif + +#endif + +#if defined( RE_IndirectSpecular ) + + vec3 radiance = vec3( 0.0 ); + vec3 clearcoatRadiance = vec3( 0.0 ); + +#endif +` + ), + lights_pars_begin: ( + /* glsl */ + ` +#if defined( USE_CSM ) && defined( CSM_CASCADES ) +uniform vec2 CSM_cascades[CSM_CASCADES]; +uniform float cameraNear; +uniform float shadowFar; +#endif + ` + ShaderChunk.lights_pars_begin + ) +}; + +// node_modules/three/examples/jsm/csm/CSM.js +var _cameraToLightMatrix = new Matrix4(); +var _lightSpaceFrustum = new CSMFrustum(); +var _center2 = new Vector3(); +var _bbox = new Box3(); +var _uniformArray = []; +var _logArray = []; +var _lightOrientationMatrix = new Matrix4(); +var _lightOrientationMatrixInverse = new Matrix4(); +var _up2 = new Vector3(0, 1, 0); +var CSM = class { + constructor(data2) { + this.camera = data2.camera; + this.parent = data2.parent; + this.cascades = data2.cascades || 3; + this.maxFar = data2.maxFar || 1e5; + this.mode = data2.mode || "practical"; + this.shadowMapSize = data2.shadowMapSize || 2048; + this.shadowBias = data2.shadowBias || 1e-6; + this.lightDirection = data2.lightDirection || new Vector3(1, -1, 1).normalize(); + this.lightIntensity = data2.lightIntensity || 3; + this.lightNear = data2.lightNear || 1; + this.lightFar = data2.lightFar || 2e3; + this.lightMargin = data2.lightMargin || 200; + this.customSplitsCallback = data2.customSplitsCallback; + this.fade = false; + this.mainFrustum = new CSMFrustum(); + this.frustums = []; + this.breaks = []; + this.lights = []; + this.shaders = /* @__PURE__ */ new Map(); + this.createLights(); + this.updateFrustums(); + this.injectInclude(); + } + createLights() { + for (let i = 0; i < this.cascades; i++) { + const light = new DirectionalLight(16777215, this.lightIntensity); + light.castShadow = true; + light.shadow.mapSize.width = this.shadowMapSize; + light.shadow.mapSize.height = this.shadowMapSize; + light.shadow.camera.near = this.lightNear; + light.shadow.camera.far = this.lightFar; + light.shadow.bias = this.shadowBias; + this.parent.add(light); + this.parent.add(light.target); + this.lights.push(light); + } + } + initCascades() { + const camera = this.camera; + camera.updateProjectionMatrix(); + this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar); + this.mainFrustum.split(this.breaks, this.frustums); + } + updateShadowBounds() { + const frustums = this.frustums; + for (let i = 0; i < frustums.length; i++) { + const light = this.lights[i]; + const shadowCam = light.shadow.camera; + const frustum = this.frustums[i]; + const nearVerts = frustum.vertices.near; + const farVerts = frustum.vertices.far; + const point1 = farVerts[0]; + let point2; + if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) { + point2 = farVerts[2]; + } else { + point2 = nearVerts[2]; + } + let squaredBBWidth = point1.distanceTo(point2); + if (this.fade) { + const camera = this.camera; + const far = Math.max(camera.far, this.maxFar); + const linearDepth = frustum.vertices.far[0].z / (far - camera.near); + const margin = 0.25 * Math.pow(linearDepth, 2) * (far - camera.near); + squaredBBWidth += margin; + } + shadowCam.left = -squaredBBWidth / 2; + shadowCam.right = squaredBBWidth / 2; + shadowCam.top = squaredBBWidth / 2; + shadowCam.bottom = -squaredBBWidth / 2; + shadowCam.updateProjectionMatrix(); + } + } + getBreaks() { + const camera = this.camera; + const far = Math.min(camera.far, this.maxFar); + this.breaks.length = 0; + switch (this.mode) { + case "uniform": + uniformSplit(this.cascades, camera.near, far, this.breaks); + break; + case "logarithmic": + logarithmicSplit(this.cascades, camera.near, far, this.breaks); + break; + case "practical": + practicalSplit(this.cascades, camera.near, far, 0.5, this.breaks); + break; + case "custom": + if (this.customSplitsCallback === void 0) console.error("CSM: Custom split scheme callback not defined."); + this.customSplitsCallback(this.cascades, camera.near, far, this.breaks); + break; + } + function uniformSplit(amount, near, far2, target) { + for (let i = 1; i < amount; i++) { + target.push((near + (far2 - near) * i / amount) / far2); + } + target.push(1); + } + function logarithmicSplit(amount, near, far2, target) { + for (let i = 1; i < amount; i++) { + target.push(near * (far2 / near) ** (i / amount) / far2); + } + target.push(1); + } + function practicalSplit(amount, near, far2, lambda, target) { + _uniformArray.length = 0; + _logArray.length = 0; + logarithmicSplit(amount, near, far2, _logArray); + uniformSplit(amount, near, far2, _uniformArray); + for (let i = 1; i < amount; i++) { + target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda)); + } + target.push(1); + } + } + update() { + const camera = this.camera; + const frustums = this.frustums; + _lightOrientationMatrix.lookAt(new Vector3(), this.lightDirection, _up2); + _lightOrientationMatrixInverse.copy(_lightOrientationMatrix).invert(); + for (let i = 0; i < frustums.length; i++) { + const light = this.lights[i]; + const shadowCam = light.shadow.camera; + const texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize; + const texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize; + _cameraToLightMatrix.multiplyMatrices(_lightOrientationMatrixInverse, camera.matrixWorld); + frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum); + const nearVerts = _lightSpaceFrustum.vertices.near; + const farVerts = _lightSpaceFrustum.vertices.far; + _bbox.makeEmpty(); + for (let j = 0; j < 4; j++) { + _bbox.expandByPoint(nearVerts[j]); + _bbox.expandByPoint(farVerts[j]); + } + _bbox.getCenter(_center2); + _center2.z = _bbox.max.z + this.lightMargin; + _center2.x = Math.floor(_center2.x / texelWidth) * texelWidth; + _center2.y = Math.floor(_center2.y / texelHeight) * texelHeight; + _center2.applyMatrix4(_lightOrientationMatrix); + light.position.copy(_center2); + light.target.position.copy(_center2); + light.target.position.x += this.lightDirection.x; + light.target.position.y += this.lightDirection.y; + light.target.position.z += this.lightDirection.z; + } + } + injectInclude() { + ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin; + ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin; + } + setupMaterial(material) { + material.defines = material.defines || {}; + material.defines.USE_CSM = 1; + material.defines.CSM_CASCADES = this.cascades; + if (this.fade) { + material.defines.CSM_FADE = ""; + } + const breaksVec2 = []; + const scope = this; + const shaders2 = this.shaders; + material.onBeforeCompile = function(shader) { + const far = Math.min(scope.camera.far, scope.maxFar); + scope.getExtendedBreaks(breaksVec2); + shader.uniforms.CSM_cascades = { value: breaksVec2 }; + shader.uniforms.cameraNear = { value: scope.camera.near }; + shader.uniforms.shadowFar = { value: far }; + shaders2.set(material, shader); + }; + shaders2.set(material, null); + } + updateUniforms() { + const far = Math.min(this.camera.far, this.maxFar); + const shaders2 = this.shaders; + shaders2.forEach(function(shader, material) { + if (shader !== null) { + const uniforms = shader.uniforms; + this.getExtendedBreaks(uniforms.CSM_cascades.value); + uniforms.cameraNear.value = this.camera.near; + uniforms.shadowFar.value = far; + } + if (!this.fade && "CSM_FADE" in material.defines) { + delete material.defines.CSM_FADE; + material.needsUpdate = true; + } else if (this.fade && !("CSM_FADE" in material.defines)) { + material.defines.CSM_FADE = ""; + material.needsUpdate = true; + } + }, this); + } + getExtendedBreaks(target) { + while (target.length < this.breaks.length) { + target.push(new Vector2()); + } + target.length = this.breaks.length; + for (let i = 0; i < this.cascades; i++) { + const amount = this.breaks[i]; + const prev = this.breaks[i - 1] || 0; + target[i].x = prev; + target[i].y = amount; + } + } + updateFrustums() { + this.getBreaks(); + this.initCascades(); + this.updateShadowBounds(); + this.updateUniforms(); + } + remove() { + for (let i = 0; i < this.lights.length; i++) { + this.parent.remove(this.lights[i].target); + this.parent.remove(this.lights[i]); + } + } + dispose() { + const shaders2 = this.shaders; + shaders2.forEach(function(shader, material) { + delete material.onBeforeCompile; + delete material.defines.USE_CSM; + delete material.defines.CSM_CASCADES; + delete material.defines.CSM_FADE; + if (shader !== null) { + delete shader.uniforms.CSM_cascades; + delete shader.uniforms.cameraNear; + delete shader.uniforms.shadowFar; + } + material.needsUpdate = true; + }); + shaders2.clear(); + } +}; + +// node_modules/three/examples/jsm/csm/CSMHelper.js +var CSMHelper = class extends Group { + constructor(csm) { + super(); + this.csm = csm; + this.displayFrustum = true; + this.displayPlanes = true; + this.displayShadowBounds = true; + const 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]); + const positions = new Float32Array(24); + const frustumGeometry = new BufferGeometry(); + frustumGeometry.setIndex(new BufferAttribute(indices, 1)); + frustumGeometry.setAttribute("position", new BufferAttribute(positions, 3, false)); + const frustumLines = new LineSegments(frustumGeometry, new LineBasicMaterial()); + this.add(frustumLines); + this.frustumLines = frustumLines; + this.cascadeLines = []; + this.cascadePlanes = []; + this.shadowLines = []; + } + updateVisibility() { + const displayFrustum = this.displayFrustum; + const displayPlanes = this.displayPlanes; + const displayShadowBounds = this.displayShadowBounds; + const frustumLines = this.frustumLines; + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + for (let i = 0, l2 = cascadeLines.length; i < l2; i++) { + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + cascadeLine.visible = displayFrustum; + cascadePlane.visible = displayFrustum && displayPlanes; + shadowLineGroup.visible = displayShadowBounds; + } + frustumLines.visible = displayFrustum; + } + update() { + const csm = this.csm; + const camera = csm.camera; + const cascades = csm.cascades; + const mainFrustum = csm.mainFrustum; + const frustums = csm.frustums; + const lights = csm.lights; + const frustumLines = this.frustumLines; + const frustumLinePositions = frustumLines.geometry.getAttribute("position"); + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + this.position.copy(camera.position); + this.quaternion.copy(camera.quaternion); + this.scale.copy(camera.scale); + this.updateMatrixWorld(true); + while (cascadeLines.length > cascades) { + this.remove(cascadeLines.pop()); + this.remove(cascadePlanes.pop()); + this.remove(shadowLines.pop()); + } + while (cascadeLines.length < cascades) { + const cascadeLine = new Box3Helper(new Box3(), 16777215); + const planeMat = new MeshBasicMaterial({ transparent: true, opacity: 0.1, depthWrite: false, side: DoubleSide }); + const cascadePlane = new Mesh(new PlaneGeometry(), planeMat); + const shadowLineGroup = new Group(); + const shadowLine = new Box3Helper(new Box3(), 16776960); + shadowLineGroup.add(shadowLine); + this.add(cascadeLine); + this.add(cascadePlane); + this.add(shadowLineGroup); + cascadeLines.push(cascadeLine); + cascadePlanes.push(cascadePlane); + shadowLines.push(shadowLineGroup); + } + for (let i = 0; i < cascades; i++) { + const frustum = frustums[i]; + const light = lights[i]; + const shadowCam = light.shadow.camera; + const farVerts2 = frustum.vertices.far; + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + const shadowLine = shadowLineGroup.children[0]; + cascadeLine.box.min.copy(farVerts2[2]); + cascadeLine.box.max.copy(farVerts2[0]); + cascadeLine.box.max.z += 1e-4; + cascadePlane.position.addVectors(farVerts2[0], farVerts2[2]); + cascadePlane.position.multiplyScalar(0.5); + cascadePlane.scale.subVectors(farVerts2[0], farVerts2[2]); + cascadePlane.scale.z = 1e-4; + this.remove(shadowLineGroup); + shadowLineGroup.position.copy(shadowCam.position); + shadowLineGroup.quaternion.copy(shadowCam.quaternion); + shadowLineGroup.scale.copy(shadowCam.scale); + shadowLineGroup.updateMatrixWorld(true); + this.attach(shadowLineGroup); + shadowLine.box.min.set(shadowCam.bottom, shadowCam.left, -shadowCam.far); + shadowLine.box.max.set(shadowCam.top, shadowCam.right, -shadowCam.near); + } + const nearVerts = mainFrustum.vertices.near; + const farVerts = mainFrustum.vertices.far; + frustumLinePositions.setXYZ(0, farVerts[0].x, farVerts[0].y, farVerts[0].z); + frustumLinePositions.setXYZ(1, farVerts[3].x, farVerts[3].y, farVerts[3].z); + frustumLinePositions.setXYZ(2, farVerts[2].x, farVerts[2].y, farVerts[2].z); + frustumLinePositions.setXYZ(3, farVerts[1].x, farVerts[1].y, farVerts[1].z); + frustumLinePositions.setXYZ(4, nearVerts[0].x, nearVerts[0].y, nearVerts[0].z); + frustumLinePositions.setXYZ(5, nearVerts[3].x, nearVerts[3].y, nearVerts[3].z); + frustumLinePositions.setXYZ(6, nearVerts[2].x, nearVerts[2].y, nearVerts[2].z); + frustumLinePositions.setXYZ(7, nearVerts[1].x, nearVerts[1].y, nearVerts[1].z); + frustumLinePositions.needsUpdate = true; + } + dispose() { + const frustumLines = this.frustumLines; + const cascadeLines = this.cascadeLines; + const cascadePlanes = this.cascadePlanes; + const shadowLines = this.shadowLines; + frustumLines.geometry.dispose(); + frustumLines.material.dispose(); + const cascades = this.csm.cascades; + for (let i = 0; i < cascades; i++) { + const cascadeLine = cascadeLines[i]; + const cascadePlane = cascadePlanes[i]; + const shadowLineGroup = shadowLines[i]; + const shadowLine = shadowLineGroup.children[0]; + cascadeLine.dispose(); + cascadePlane.geometry.dispose(); + cascadePlane.material.dispose(); + shadowLine.dispose(); + } + } +}; + +// node_modules/three/examples/jsm/curves/CurveExtras.js +var CurveExtras_exports = {}; +__export(CurveExtras_exports, { + CinquefoilKnot: () => CinquefoilKnot, + DecoratedTorusKnot4a: () => DecoratedTorusKnot4a, + DecoratedTorusKnot4b: () => DecoratedTorusKnot4b, + DecoratedTorusKnot5a: () => DecoratedTorusKnot5a, + DecoratedTorusKnot5c: () => DecoratedTorusKnot5c, + FigureEightPolynomialKnot: () => FigureEightPolynomialKnot, + GrannyKnot: () => GrannyKnot, + HeartCurve: () => HeartCurve, + HelixCurve: () => HelixCurve, + KnotCurve: () => KnotCurve, + TorusKnot: () => TorusKnot, + TrefoilKnot: () => TrefoilKnot, + TrefoilPolynomialKnot: () => TrefoilPolynomialKnot, + VivianiCurve: () => VivianiCurve +}); +var GrannyKnot = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = 2 * Math.PI * t3; + const x2 = -0.22 * Math.cos(t3) - 1.28 * Math.sin(t3) - 0.44 * Math.cos(3 * t3) - 0.78 * Math.sin(3 * t3); + const y2 = -0.1 * Math.cos(2 * t3) - 0.27 * Math.sin(2 * t3) + 0.38 * Math.cos(4 * t3) + 0.46 * Math.sin(4 * t3); + const z = 0.7 * Math.cos(3 * t3) - 0.4 * Math.sin(3 * t3); + return point.set(x2, y2, z).multiplyScalar(20); + } +}; +var HeartCurve = class extends Curve { + constructor(scale2 = 5) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= 2 * Math.PI; + const x2 = 16 * Math.pow(Math.sin(t3), 3); + const y2 = 13 * Math.cos(t3) - 5 * Math.cos(2 * t3) - 2 * Math.cos(3 * t3) - Math.cos(4 * t3); + const z = 0; + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var VivianiCurve = class extends Curve { + constructor(scale2 = 70) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = t3 * 4 * Math.PI; + const a2 = this.scale / 2; + const x2 = a2 * (1 + Math.cos(t3)); + const y2 = a2 * Math.sin(t3); + const z = 2 * a2 * Math.sin(t3 / 2); + return point.set(x2, y2, z); + } +}; +var KnotCurve = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= 2 * Math.PI; + const R4 = 10; + const s = 50; + const x2 = s * Math.sin(t3); + const y2 = Math.cos(t3) * (R4 + s * Math.cos(t3)); + const z = Math.sin(t3) * (R4 + s * Math.cos(t3)); + return point.set(x2, y2, z); + } +}; +var HelixCurve = class extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const a2 = 30; + const b3 = 150; + const t22 = 2 * Math.PI * t3 * b3 / 30; + const x2 = Math.cos(t22) * a2; + const y2 = Math.sin(t22) * a2; + const z = b3 * t3; + return point.set(x2, y2, z); + } +}; +var TrefoilKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(3 * t3)) * Math.cos(2 * t3); + const y2 = (2 + Math.cos(3 * t3)) * Math.sin(2 * t3); + const z = Math.sin(3 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var TorusKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const p2 = 3; + const q2 = 4; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (2 + Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var CinquefoilKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const p2 = 2; + const q2 = 5; + t3 *= Math.PI * 2; + const x2 = (2 + Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (2 + Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var TrefoilPolynomialKnot = class extends Curve { + constructor(scale2 = 10) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = t3 * 4 - 2; + const x2 = Math.pow(t3, 3) - 3 * t3; + const y2 = Math.pow(t3, 4) - 4 * t3 * t3; + const z = 1 / 5 * Math.pow(t3, 5) - 2 * t3; + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +function scaleTo(x2, y2, t3) { + const r = y2 - x2; + return t3 * r + x2; +} +var FigureEightPolynomialKnot = class extends Curve { + constructor(scale2 = 1) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 = scaleTo(-4, 4, t3); + const x2 = 2 / 5 * t3 * (t3 * t3 - 7) * (t3 * t3 - 10); + const y2 = Math.pow(t3, 4) - 13 * t3 * t3; + const z = 1 / 10 * t3 * (t3 * t3 - 4) * (t3 * t3 - 9) * (t3 * t3 - 12); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot4a = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const x2 = Math.cos(2 * t3) * (1 + 0.6 * (Math.cos(5 * t3) + 0.75 * Math.cos(10 * t3))); + const y2 = Math.sin(2 * t3) * (1 + 0.6 * (Math.cos(5 * t3) + 0.75 * Math.cos(10 * t3))); + const z = 0.35 * Math.sin(5 * t3); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot4b = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)); + const y2 = Math.sin(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi)); + const z = 0.2 * Math.sin(9 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot5a = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)); + const y2 = Math.sin(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi)); + const z = 0.2 * Math.sin(20 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; +var DecoratedTorusKnot5c = class extends Curve { + constructor(scale2 = 40) { + super(); + this.scale = scale2; + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const fi = t3 * Math.PI * 2; + const x2 = Math.cos(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))); + const y2 = Math.sin(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi))); + const z = 0.35 * Math.sin(15 * fi); + return point.set(x2, y2, z).multiplyScalar(this.scale); + } +}; + +// node_modules/three/examples/jsm/curves/NURBSUtils.js +var NURBSUtils_exports = {}; +__export(NURBSUtils_exports, { + calcBSplineDerivatives: () => calcBSplineDerivatives, + calcBSplinePoint: () => calcBSplinePoint, + calcBasisFunctionDerivatives: () => calcBasisFunctionDerivatives, + calcBasisFunctions: () => calcBasisFunctions, + calcKoverI: () => calcKoverI, + calcNURBSDerivatives: () => calcNURBSDerivatives, + calcRationalCurveDerivatives: () => calcRationalCurveDerivatives, + calcSurfacePoint: () => calcSurfacePoint, + calcVolumePoint: () => calcVolumePoint, + findSpan: () => findSpan +}); +function findSpan(p2, u, U) { + const n2 = U.length - p2 - 1; + if (u >= U[n2]) { + return n2 - 1; + } + if (u <= U[p2]) { + return p2; + } + let low = p2; + let high = n2; + let mid = Math.floor((low + high) / 2); + while (u < U[mid] || u >= U[mid + 1]) { + if (u < U[mid]) { + high = mid; + } else { + low = mid; + } + mid = Math.floor((low + high) / 2); + } + return mid; +} +function calcBasisFunctions(span, u, p2, U) { + const N = []; + const left = []; + const right = []; + N[0] = 1; + for (let j = 1; j <= p2; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r = 0; r < j; ++r) { + const rv = right[r + 1]; + const lv = left[j - r]; + const temp = N[r] / (rv + lv); + N[r] = saved + rv * temp; + saved = lv * temp; + } + N[j] = saved; + } + return N; +} +function calcBSplinePoint(p2, U, P, u) { + const span = findSpan(p2, u, U); + const N = calcBasisFunctions(span, u, p2, U); + const C2 = new Vector4(0, 0, 0, 0); + for (let j = 0; j <= p2; ++j) { + const point = P[span - p2 + j]; + const Nj = N[j]; + const wNj = point.w * Nj; + C2.x += point.x * wNj; + C2.y += point.y * wNj; + C2.z += point.z * wNj; + C2.w += point.w * Nj; + } + return C2; +} +function calcBasisFunctionDerivatives(span, u, p2, n2, U) { + const zeroArr = []; + for (let i = 0; i <= p2; ++i) + zeroArr[i] = 0; + const ders = []; + for (let i = 0; i <= n2; ++i) + ders[i] = zeroArr.slice(0); + const ndu = []; + for (let i = 0; i <= p2; ++i) + ndu[i] = zeroArr.slice(0); + ndu[0][0] = 1; + const left = zeroArr.slice(0); + const right = zeroArr.slice(0); + for (let j = 1; j <= p2; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r2 = 0; r2 < j; ++r2) { + const rv = right[r2 + 1]; + const lv = left[j - r2]; + ndu[j][r2] = rv + lv; + const temp = ndu[r2][j - 1] / ndu[j][r2]; + ndu[r2][j] = saved + rv * temp; + saved = lv * temp; + } + ndu[j][j] = saved; + } + for (let j = 0; j <= p2; ++j) { + ders[0][j] = ndu[j][p2]; + } + for (let r2 = 0; r2 <= p2; ++r2) { + let s1 = 0; + let s2 = 1; + const a2 = []; + for (let i = 0; i <= p2; ++i) { + a2[i] = zeroArr.slice(0); + } + a2[0][0] = 1; + for (let k2 = 1; k2 <= n2; ++k2) { + let d = 0; + const rk = r2 - k2; + const pk = p2 - k2; + if (r2 >= k2) { + a2[s2][0] = a2[s1][0] / ndu[pk + 1][rk]; + d = a2[s2][0] * ndu[rk][pk]; + } + const j1 = rk >= -1 ? 1 : -rk; + const j2 = r2 - 1 <= pk ? k2 - 1 : p2 - r2; + for (let j3 = j1; j3 <= j2; ++j3) { + a2[s2][j3] = (a2[s1][j3] - a2[s1][j3 - 1]) / ndu[pk + 1][rk + j3]; + d += a2[s2][j3] * ndu[rk + j3][pk]; + } + if (r2 <= pk) { + a2[s2][k2] = -a2[s1][k2 - 1] / ndu[pk + 1][r2]; + d += a2[s2][k2] * ndu[r2][pk]; + } + ders[k2][r2] = d; + const j = s1; + s1 = s2; + s2 = j; + } + } + let r = p2; + for (let k2 = 1; k2 <= n2; ++k2) { + for (let j = 0; j <= p2; ++j) { + ders[k2][j] *= r; + } + r *= p2 - k2; + } + return ders; +} +function calcBSplineDerivatives(p2, U, P, u, nd) { + const du = nd < p2 ? nd : p2; + const CK = []; + const span = findSpan(p2, u, U); + const nders = calcBasisFunctionDerivatives(span, u, p2, du, U); + const Pw = []; + for (let i = 0; i < P.length; ++i) { + const point = P[i].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + Pw[i] = point; + } + for (let k2 = 0; k2 <= du; ++k2) { + const point = Pw[span - p2].clone().multiplyScalar(nders[k2][0]); + for (let j = 1; j <= p2; ++j) { + point.add(Pw[span - p2 + j].clone().multiplyScalar(nders[k2][j])); + } + CK[k2] = point; + } + for (let k2 = du + 1; k2 <= nd + 1; ++k2) { + CK[k2] = new Vector4(0, 0, 0); + } + return CK; +} +function calcKoverI(k2, i) { + let nom = 1; + for (let j = 2; j <= k2; ++j) { + nom *= j; + } + let denom = 1; + for (let j = 2; j <= i; ++j) { + denom *= j; + } + for (let j = 2; j <= k2 - i; ++j) { + denom *= j; + } + return nom / denom; +} +function calcRationalCurveDerivatives(Pders) { + const nd = Pders.length; + const Aders = []; + const wders = []; + for (let i = 0; i < nd; ++i) { + const point = Pders[i]; + Aders[i] = new Vector3(point.x, point.y, point.z); + wders[i] = point.w; + } + const CK = []; + for (let k2 = 0; k2 < nd; ++k2) { + const v = Aders[k2].clone(); + for (let i = 1; i <= k2; ++i) { + v.sub(CK[k2 - i].clone().multiplyScalar(calcKoverI(k2, i) * wders[i])); + } + CK[k2] = v.divideScalar(wders[0]); + } + return CK; +} +function calcNURBSDerivatives(p2, U, P, u, nd) { + const Pders = calcBSplineDerivatives(p2, U, P, u, nd); + return calcRationalCurveDerivatives(Pders); +} +function calcSurfacePoint(p2, q2, U, V, P, u, v, target) { + const uspan = findSpan(p2, u, U); + const vspan = findSpan(q2, v, V); + const Nu = calcBasisFunctions(uspan, u, p2, U); + const Nv = calcBasisFunctions(vspan, v, q2, V); + const temp = []; + for (let l2 = 0; l2 <= q2; ++l2) { + temp[l2] = new Vector4(0, 0, 0, 0); + for (let k2 = 0; k2 <= p2; ++k2) { + const point = P[uspan - p2 + k2][vspan - q2 + l2].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + temp[l2].add(point.multiplyScalar(Nu[k2])); + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let l2 = 0; l2 <= q2; ++l2) { + Sw.add(temp[l2].multiplyScalar(Nv[l2])); + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} +function calcVolumePoint(p2, q2, r, U, V, W, P, u, v, w, target) { + const uspan = findSpan(p2, u, U); + const vspan = findSpan(q2, v, V); + const wspan = findSpan(r, w, W); + const Nu = calcBasisFunctions(uspan, u, p2, U); + const Nv = calcBasisFunctions(vspan, v, q2, V); + const Nw = calcBasisFunctions(wspan, w, r, W); + const temp = []; + for (let m = 0; m <= r; ++m) { + temp[m] = []; + for (let l2 = 0; l2 <= q2; ++l2) { + temp[m][l2] = new Vector4(0, 0, 0, 0); + for (let k2 = 0; k2 <= p2; ++k2) { + const point = P[uspan - p2 + k2][vspan - q2 + l2][wspan - r + m].clone(); + const w2 = point.w; + point.x *= w2; + point.y *= w2; + point.z *= w2; + temp[m][l2].add(point.multiplyScalar(Nu[k2])); + } + } + } + const Sw = new Vector4(0, 0, 0, 0); + for (let m = 0; m <= r; ++m) { + for (let l2 = 0; l2 <= q2; ++l2) { + Sw.add(temp[m][l2].multiplyScalar(Nw[m]).multiplyScalar(Nv[l2])); + } + } + Sw.divideScalar(Sw.w); + target.set(Sw.x, Sw.y, Sw.z); +} + +// node_modules/three/examples/jsm/curves/NURBSCurve.js +var NURBSCurve = class extends Curve { + constructor(degree, knots, controlPoints, startKnot, endKnot) { + super(); + this.degree = degree; + this.knots = knots; + this.controlPoints = []; + this.startKnot = startKnot || 0; + this.endKnot = endKnot || this.knots.length - 1; + for (let i = 0; i < controlPoints.length; ++i) { + const point = controlPoints[i]; + this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w); + } + } + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + const u = this.knots[this.startKnot] + t3 * (this.knots[this.endKnot] - this.knots[this.startKnot]); + const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u); + if (hpoint.w !== 1) { + hpoint.divideScalar(hpoint.w); + } + return point.set(hpoint.x, hpoint.y, hpoint.z); + } + getTangent(t3, optionalTarget = new Vector3()) { + const tangent = optionalTarget; + const u = this.knots[0] + t3 * (this.knots[this.knots.length - 1] - this.knots[0]); + const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1); + tangent.copy(ders[1]).normalize(); + return tangent; + } +}; + +// node_modules/three/examples/jsm/curves/NURBSSurface.js +var NURBSSurface = class { + constructor(degree1, degree2, knots1, knots2, controlPoints) { + this.degree1 = degree1; + this.degree2 = degree2; + this.knots1 = knots1; + this.knots2 = knots2; + this.controlPoints = []; + const len1 = knots1.length - degree1 - 1; + const len2 = knots2.length - degree2 - 1; + for (let i = 0; i < len1; ++i) { + this.controlPoints[i] = []; + for (let j = 0; j < len2; ++j) { + const point = controlPoints[i][j]; + this.controlPoints[i][j] = new Vector4(point.x, point.y, point.z, point.w); + } + } + } + getPoint(t1, t22, target) { + const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]); + const v = this.knots2[0] + t22 * (this.knots2[this.knots2.length - 1] - this.knots2[0]); + calcSurfacePoint(this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target); + } +}; + +// node_modules/three/examples/jsm/curves/NURBSVolume.js +var NURBSVolume = class { + constructor(degree1, degree2, degree3, knots1, knots2, knots3, controlPoints) { + this.degree1 = degree1; + this.degree2 = degree2; + this.degree3 = degree3; + this.knots1 = knots1; + this.knots2 = knots2; + this.knots3 = knots3; + this.controlPoints = []; + const len1 = knots1.length - degree1 - 1; + const len2 = knots2.length - degree2 - 1; + const len3 = knots3.length - degree3 - 1; + for (let i = 0; i < len1; ++i) { + this.controlPoints[i] = []; + for (let j = 0; j < len2; ++j) { + this.controlPoints[i][j] = []; + for (let k2 = 0; k2 < len3; ++k2) { + const point = controlPoints[i][j][k2]; + this.controlPoints[i][j][k2] = new Vector4(point.x, point.y, point.z, point.w); + } + } + } + } + getPoint(t1, t22, t3, target) { + const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]); + const v = this.knots2[0] + t22 * (this.knots2[this.knots2.length - 1] - this.knots2[0]); + const w = this.knots3[0] + t3 * (this.knots3[this.knots3.length - 1] - this.knots3[0]); + calcVolumePoint(this.degree1, this.degree2, this.degree3, this.knots1, this.knots2, this.knots3, this.controlPoints, u, v, w, target); + } +}; + +// node_modules/three/examples/jsm/effects/AnaglyphEffect.js +var AnaglyphEffect = class { + constructor(renderer2, width2 = 512, height2 = 512) { + this.colorMatrixLeft = new Matrix3().fromArray([ + 0.4561, + -0.0400822, + -0.0152161, + 0.500484, + -0.0378246, + -0.0205971, + 0.176381, + -0.0157589, + -546856e-8 + ]); + this.colorMatrixRight = new Matrix3().fromArray([ + -0.0434706, + 0.378476, + -0.0721527, + -0.0879388, + 0.73364, + -0.112961, + -155529e-8, + -0.0184503, + 1.2264 + ]); + const _camera2 = new OrthographicCamera(-1, 1, 1, -1, 0, 1); + const _scene = new Scene(); + const _stereo = new StereoCamera(); + const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat }; + const _renderTargetL = new WebGLRenderTarget(width2, height2, _params); + const _renderTargetR = new WebGLRenderTarget(width2, height2, _params); + const _material = new ShaderMaterial({ + uniforms: { + "mapLeft": { value: _renderTargetL.texture }, + "mapRight": { value: _renderTargetR.texture }, + "colorMatrixLeft": { value: this.colorMatrixLeft }, + "colorMatrixRight": { value: this.colorMatrixRight } + }, + vertexShader: [ + "varying vec2 vUv;", + "void main() {", + " vUv = vec2( uv.x, uv.y );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "uniform sampler2D mapLeft;", + "uniform sampler2D mapRight;", + "varying vec2 vUv;", + "uniform mat3 colorMatrixLeft;", + "uniform mat3 colorMatrixRight;", + "void main() {", + " vec2 uv = vUv;", + " vec4 colorL = texture2D( mapLeft, uv );", + " vec4 colorR = texture2D( mapRight, uv );", + " vec3 color = clamp(", + " colorMatrixLeft * colorL.rgb +", + " colorMatrixRight * colorR.rgb, 0., 1. );", + " gl_FragColor = vec4(", + " color.r, color.g, color.b,", + " max( colorL.a, colorR.a ) );", + " #include ", + " #include ", + "}" + ].join("\n") + }); + const _mesh = new Mesh(new PlaneGeometry(2, 2), _material); + _scene.add(_mesh); + this.setSize = function(width3, height3) { + renderer2.setSize(width3, height3); + const pixelRatio = renderer2.getPixelRatio(); + _renderTargetL.setSize(width3 * pixelRatio, height3 * pixelRatio); + _renderTargetR.setSize(width3 * pixelRatio, height3 * pixelRatio); + }; + this.render = function(scene, camera) { + const currentRenderTarget = renderer2.getRenderTarget(); + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.setRenderTarget(_renderTargetL); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraL); + renderer2.setRenderTarget(_renderTargetR); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraR); + renderer2.setRenderTarget(null); + renderer2.render(_scene, _camera2); + renderer2.setRenderTarget(currentRenderTarget); + }; + this.dispose = function() { + _renderTargetL.dispose(); + _renderTargetR.dispose(); + _mesh.geometry.dispose(); + _mesh.material.dispose(); + }; + } +}; + +// node_modules/three/examples/jsm/effects/AsciiEffect.js +var AsciiEffect = class { + constructor(renderer2, charSet = " .:-=+*#%@", options = {}) { + const fResolution = options["resolution"] || 0.15; + const iScale = options["scale"] || 1; + const bColor = options["color"] || false; + const bAlpha = options["alpha"] || false; + const bBlock = options["block"] || false; + const bInvert = options["invert"] || false; + const strResolution = options["strResolution"] || "low"; + let width2, height2; + const domElement = document.createElement("div"); + domElement.style.cursor = "default"; + const oAscii = document.createElement("table"); + domElement.appendChild(oAscii); + let iWidth, iHeight; + let oImg; + this.setSize = function(w, h) { + width2 = w; + height2 = h; + renderer2.setSize(w, h); + initAsciiSize(); + }; + this.render = function(scene, camera) { + renderer2.render(scene, camera); + asciifyImage(oAscii); + }; + this.domElement = domElement; + function initAsciiSize() { + iWidth = Math.floor(width2 * fResolution); + iHeight = Math.floor(height2 * fResolution); + oCanvas.width = iWidth; + oCanvas.height = iHeight; + oImg = renderer2.domElement; + if (oImg.style.backgroundColor) { + oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor; + oAscii.rows[0].cells[0].style.color = oImg.style.color; + } + oAscii.cellSpacing = 0; + oAscii.cellPadding = 0; + const oStyle = oAscii.style; + oStyle.whiteSpace = "pre"; + oStyle.margin = "0px"; + oStyle.padding = "0px"; + oStyle.letterSpacing = fLetterSpacing + "px"; + oStyle.fontFamily = strFont; + oStyle.fontSize = fFontSize + "px"; + oStyle.lineHeight = fLineHeight + "px"; + oStyle.textAlign = "left"; + oStyle.textDecoration = "none"; + } + const aDefaultCharList = " .,:;i1tfLCG08@".split(""); + const aDefaultColorCharList = " CGO08@".split(""); + const strFont = "courier new, monospace"; + const oCanvasImg = renderer2.domElement; + const oCanvas = document.createElement("canvas"); + if (!oCanvas.getContext) { + return; + } + const oCtx = oCanvas.getContext("2d"); + if (!oCtx.getImageData) { + return; + } + let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList; + if (charSet) aCharList = charSet; + const fFontSize = 2 / fResolution * iScale; + const fLineHeight = 2 / fResolution * iScale; + let fLetterSpacing = 0; + if (strResolution == "low") { + switch (iScale) { + case 1: + fLetterSpacing = -1; + break; + case 2: + case 3: + fLetterSpacing = -2.1; + break; + case 4: + fLetterSpacing = -3.1; + break; + case 5: + fLetterSpacing = -4.15; + break; + } + } + if (strResolution == "medium") { + switch (iScale) { + case 1: + fLetterSpacing = 0; + break; + case 2: + fLetterSpacing = -1; + break; + case 3: + fLetterSpacing = -1.04; + break; + case 4: + case 5: + fLetterSpacing = -2.1; + break; + } + } + if (strResolution == "high") { + switch (iScale) { + case 1: + case 2: + fLetterSpacing = 0; + break; + case 3: + case 4: + case 5: + fLetterSpacing = -1; + break; + } + } + function asciifyImage(oAscii2) { + oCtx.clearRect(0, 0, iWidth, iHeight); + oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight); + const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data; + let strChars = ""; + for (let y2 = 0; y2 < iHeight; y2 += 2) { + for (let x2 = 0; x2 < iWidth; x2++) { + const iOffset = (y2 * iWidth + x2) * 4; + const iRed = oImgData[iOffset]; + const iGreen = oImgData[iOffset + 1]; + const iBlue = oImgData[iOffset + 2]; + const iAlpha = oImgData[iOffset + 3]; + let iCharIdx; + let fBrightness; + fBrightness = (0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue) / 255; + if (iAlpha == 0) { + fBrightness = 1; + } + iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1)); + if (bInvert) { + iCharIdx = aCharList.length - iCharIdx - 1; + } + let strThisChar = aCharList[iCharIdx]; + if (strThisChar === void 0 || strThisChar == " ") + strThisChar = " "; + if (bColor) { + strChars += "" + strThisChar + ""; + } else { + strChars += strThisChar; + } + } + strChars += "
"; + } + oAscii2.innerHTML = `${strChars}`; + } + } +}; + +// node_modules/three/examples/jsm/effects/OutlineEffect.js +var OutlineEffect = class { + constructor(renderer2, parameters = {}) { + this.enabled = true; + const defaultThickness = parameters.defaultThickness !== void 0 ? parameters.defaultThickness : 3e-3; + const defaultColor = new Color().fromArray(parameters.defaultColor !== void 0 ? parameters.defaultColor : [0, 0, 0]); + const defaultAlpha = parameters.defaultAlpha !== void 0 ? parameters.defaultAlpha : 1; + const defaultKeepAlive = parameters.defaultKeepAlive !== void 0 ? parameters.defaultKeepAlive : false; + const cache = {}; + const removeThresholdCount = 60; + const originalMaterials = {}; + const originalOnBeforeRenders = {}; + const uniformsOutline = { + outlineThickness: { value: defaultThickness }, + outlineColor: { value: defaultColor }, + outlineAlpha: { value: defaultAlpha } + }; + const vertexShader = [ + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "#include ", + "uniform float outlineThickness;", + "vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {", + " float thickness = outlineThickness;", + " const float ratio = 1.0;", + // TODO: support outline thickness ratio for each vertex + " vec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );", + // NOTE: subtract pos2 from pos because BackSide objectNormal is negative + " vec4 norm = normalize( pos - pos2 );", + " return pos + norm * thickness * pos.w * ratio;", + "}", + "void main() {", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " #include ", + " vec3 outlineNormal = - objectNormal;", + // the outline material is always rendered with BackSide + " gl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );", + " #include ", + " #include ", + " #include ", + "}" + ].join("\n"); + const fragmentShader = [ + "#include ", + "#include ", + "#include ", + "#include ", + "uniform vec3 outlineColor;", + "uniform float outlineAlpha;", + "void main() {", + " #include ", + " #include ", + " gl_FragColor = vec4( outlineColor, outlineAlpha );", + " #include ", + " #include ", + " #include ", + " #include ", + "}" + ].join("\n"); + function createMaterial() { + return new ShaderMaterial({ + type: "OutlineEffect", + uniforms: UniformsUtils.merge([ + UniformsLib["fog"], + UniformsLib["displacementmap"], + uniformsOutline + ]), + vertexShader, + fragmentShader, + side: BackSide + }); + } + function getOutlineMaterialFromCache(originalMaterial) { + let data2 = cache[originalMaterial.uuid]; + if (data2 === void 0) { + data2 = { + material: createMaterial(), + used: true, + keepAlive: defaultKeepAlive, + count: 0 + }; + cache[originalMaterial.uuid] = data2; + } + data2.used = true; + return data2.material; + } + function getOutlineMaterial(originalMaterial) { + const outlineMaterial = getOutlineMaterialFromCache(originalMaterial); + originalMaterials[outlineMaterial.uuid] = originalMaterial; + updateOutlineMaterial(outlineMaterial, originalMaterial); + return outlineMaterial; + } + function isCompatible(object) { + const geometry = object.geometry; + const hasNormals = geometry !== void 0 && geometry.attributes.normal !== void 0; + return object.isMesh === true && object.material !== void 0 && hasNormals === true; + } + function setOutlineMaterial(object) { + if (isCompatible(object) === false) return; + if (Array.isArray(object.material)) { + for (let i = 0, il = object.material.length; i < il; i++) { + object.material[i] = getOutlineMaterial(object.material[i]); + } + } else { + object.material = getOutlineMaterial(object.material); + } + originalOnBeforeRenders[object.uuid] = object.onBeforeRender; + object.onBeforeRender = onBeforeRender; + } + function restoreOriginalMaterial(object) { + if (isCompatible(object) === false) return; + if (Array.isArray(object.material)) { + for (let i = 0, il = object.material.length; i < il; i++) { + object.material[i] = originalMaterials[object.material[i].uuid]; + } + } else { + object.material = originalMaterials[object.material.uuid]; + } + object.onBeforeRender = originalOnBeforeRenders[object.uuid]; + } + function onBeforeRender(renderer3, scene, camera, geometry, material) { + const originalMaterial = originalMaterials[material.uuid]; + if (originalMaterial === void 0) return; + updateUniforms(material, originalMaterial); + } + function updateUniforms(material, originalMaterial) { + const outlineParameters = originalMaterial.userData.outlineParameters; + material.uniforms.outlineAlpha.value = originalMaterial.opacity; + if (outlineParameters !== void 0) { + if (outlineParameters.thickness !== void 0) material.uniforms.outlineThickness.value = outlineParameters.thickness; + if (outlineParameters.color !== void 0) material.uniforms.outlineColor.value.fromArray(outlineParameters.color); + if (outlineParameters.alpha !== void 0) material.uniforms.outlineAlpha.value = outlineParameters.alpha; + } + if (originalMaterial.displacementMap) { + material.uniforms.displacementMap.value = originalMaterial.displacementMap; + material.uniforms.displacementScale.value = originalMaterial.displacementScale; + material.uniforms.displacementBias.value = originalMaterial.displacementBias; + } + } + function updateOutlineMaterial(material, originalMaterial) { + if (material.name === "invisible") return; + const outlineParameters = originalMaterial.userData.outlineParameters; + material.fog = originalMaterial.fog; + material.toneMapped = originalMaterial.toneMapped; + material.premultipliedAlpha = originalMaterial.premultipliedAlpha; + material.displacementMap = originalMaterial.displacementMap; + if (outlineParameters !== void 0) { + if (originalMaterial.visible === false) { + material.visible = false; + } else { + material.visible = outlineParameters.visible !== void 0 ? outlineParameters.visible : true; + } + material.transparent = outlineParameters.alpha !== void 0 && outlineParameters.alpha < 1 ? true : originalMaterial.transparent; + if (outlineParameters.keepAlive !== void 0) cache[originalMaterial.uuid].keepAlive = outlineParameters.keepAlive; + } else { + material.transparent = originalMaterial.transparent; + material.visible = originalMaterial.visible; + } + if (originalMaterial.wireframe === true || originalMaterial.depthTest === false) material.visible = false; + if (originalMaterial.clippingPlanes) { + material.clipping = true; + material.clippingPlanes = originalMaterial.clippingPlanes; + material.clipIntersection = originalMaterial.clipIntersection; + material.clipShadows = originalMaterial.clipShadows; + } + material.version = originalMaterial.version; + } + function cleanupCache() { + let keys2; + keys2 = Object.keys(originalMaterials); + for (let i = 0, il = keys2.length; i < il; i++) { + originalMaterials[keys2[i]] = void 0; + } + keys2 = Object.keys(originalOnBeforeRenders); + for (let i = 0, il = keys2.length; i < il; i++) { + originalOnBeforeRenders[keys2[i]] = void 0; + } + keys2 = Object.keys(cache); + for (let i = 0, il = keys2.length; i < il; i++) { + const key2 = keys2[i]; + if (cache[key2].used === false) { + cache[key2].count++; + if (cache[key2].keepAlive === false && cache[key2].count > removeThresholdCount) { + delete cache[key2]; + } + } else { + cache[key2].used = false; + cache[key2].count = 0; + } + } + } + this.render = function(scene, camera) { + if (this.enabled === false) { + renderer2.render(scene, camera); + return; + } + const currentAutoClear = renderer2.autoClear; + renderer2.autoClear = this.autoClear; + renderer2.render(scene, camera); + renderer2.autoClear = currentAutoClear; + this.renderOutline(scene, camera); + }; + this.renderOutline = function(scene, camera) { + const currentAutoClear = renderer2.autoClear; + const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate; + const currentSceneBackground = scene.background; + const currentShadowMapEnabled = renderer2.shadowMap.enabled; + scene.matrixWorldAutoUpdate = false; + scene.background = null; + renderer2.autoClear = false; + renderer2.shadowMap.enabled = false; + scene.traverse(setOutlineMaterial); + renderer2.render(scene, camera); + scene.traverse(restoreOriginalMaterial); + cleanupCache(); + scene.matrixWorldAutoUpdate = currentSceneAutoUpdate; + scene.background = currentSceneBackground; + renderer2.autoClear = currentAutoClear; + renderer2.shadowMap.enabled = currentShadowMapEnabled; + }; + this.autoClear = renderer2.autoClear; + this.domElement = renderer2.domElement; + this.shadowMap = renderer2.shadowMap; + this.clear = function(color, depth, stencil) { + renderer2.clear(color, depth, stencil); + }; + this.getPixelRatio = function() { + return renderer2.getPixelRatio(); + }; + this.setPixelRatio = function(value2) { + renderer2.setPixelRatio(value2); + }; + this.getSize = function(target) { + return renderer2.getSize(target); + }; + this.setSize = function(width2, height2, updateStyle) { + renderer2.setSize(width2, height2, updateStyle); + }; + this.setViewport = function(x2, y2, width2, height2) { + renderer2.setViewport(x2, y2, width2, height2); + }; + this.setScissor = function(x2, y2, width2, height2) { + renderer2.setScissor(x2, y2, width2, height2); + }; + this.setScissorTest = function(boolean) { + renderer2.setScissorTest(boolean); + }; + this.setRenderTarget = function(renderTarget) { + renderer2.setRenderTarget(renderTarget); + }; + } +}; + +// node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js +var ParallaxBarrierEffect = class { + constructor(renderer2) { + const _camera2 = new OrthographicCamera(-1, 1, 1, -1, 0, 1); + const _scene = new Scene(); + const _stereo = new StereoCamera(); + const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat }; + const _renderTargetL = new WebGLRenderTarget(512, 512, _params); + const _renderTargetR = new WebGLRenderTarget(512, 512, _params); + const _material = new ShaderMaterial({ + uniforms: { + "mapLeft": { value: _renderTargetL.texture }, + "mapRight": { value: _renderTargetR.texture } + }, + vertexShader: [ + "varying vec2 vUv;", + "void main() {", + " vUv = vec2( uv.x, uv.y );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "uniform sampler2D mapLeft;", + "uniform sampler2D mapRight;", + "varying vec2 vUv;", + "void main() {", + " vec2 uv = vUv;", + " if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {", + " gl_FragColor = texture2D( mapLeft, uv );", + " } else {", + " gl_FragColor = texture2D( mapRight, uv );", + " }", + " #include ", + " #include ", + "}" + ].join("\n") + }); + const mesh = new Mesh(new PlaneGeometry(2, 2), _material); + _scene.add(mesh); + this.setSize = function(width2, height2) { + renderer2.setSize(width2, height2); + const pixelRatio = renderer2.getPixelRatio(); + _renderTargetL.setSize(width2 * pixelRatio, height2 * pixelRatio); + _renderTargetR.setSize(width2 * pixelRatio, height2 * pixelRatio); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.setRenderTarget(_renderTargetL); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraL); + renderer2.setRenderTarget(_renderTargetR); + renderer2.clear(); + renderer2.render(scene, _stereo.cameraR); + renderer2.setRenderTarget(null); + renderer2.render(_scene, _camera2); + }; + } +}; + +// node_modules/three/examples/jsm/effects/PeppersGhostEffect.js +var PeppersGhostEffect = class { + constructor(renderer2) { + const scope = this; + scope.cameraDistance = 15; + scope.reflectFromAbove = false; + let _halfWidth, _width, _height; + const _cameraF = new PerspectiveCamera(); + const _cameraB = new PerspectiveCamera(); + const _cameraL = new PerspectiveCamera(); + const _cameraR = new PerspectiveCamera(); + const _position3 = new Vector3(); + const _quaternion4 = new Quaternion(); + const _scale5 = new Vector3(); + renderer2.autoClear = false; + this.setSize = function(width2, height2) { + _halfWidth = width2 / 2; + if (width2 < height2) { + _width = width2 / 3; + _height = width2 / 3; + } else { + _width = height2 / 3; + _height = height2 / 3; + } + renderer2.setSize(width2, height2); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + camera.matrixWorld.decompose(_position3, _quaternion4, _scale5); + _cameraF.position.copy(_position3); + _cameraF.quaternion.copy(_quaternion4); + _cameraF.translateZ(scope.cameraDistance); + _cameraF.lookAt(scene.position); + _cameraB.position.copy(_position3); + _cameraB.quaternion.copy(_quaternion4); + _cameraB.translateZ(-scope.cameraDistance); + _cameraB.lookAt(scene.position); + _cameraB.rotation.z += 180 * (Math.PI / 180); + _cameraL.position.copy(_position3); + _cameraL.quaternion.copy(_quaternion4); + _cameraL.translateX(-scope.cameraDistance); + _cameraL.lookAt(scene.position); + _cameraL.rotation.x += 90 * (Math.PI / 180); + _cameraR.position.copy(_position3); + _cameraR.quaternion.copy(_quaternion4); + _cameraR.translateX(scope.cameraDistance); + _cameraR.lookAt(scene.position); + _cameraR.rotation.x += 90 * (Math.PI / 180); + renderer2.clear(); + renderer2.setScissorTest(true); + renderer2.setScissor(_halfWidth - _width / 2, _height * 2, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2, _height * 2, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraB); + } else { + renderer2.render(scene, _cameraF); + } + renderer2.setScissor(_halfWidth - _width / 2, 0, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2, 0, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraF); + } else { + renderer2.render(scene, _cameraB); + } + renderer2.setScissor(_halfWidth - _width / 2 - _width, _height, _width, _height); + renderer2.setViewport(_halfWidth - _width / 2 - _width, _height, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraR); + } else { + renderer2.render(scene, _cameraL); + } + renderer2.setScissor(_halfWidth + _width / 2, _height, _width, _height); + renderer2.setViewport(_halfWidth + _width / 2, _height, _width, _height); + if (scope.reflectFromAbove) { + renderer2.render(scene, _cameraL); + } else { + renderer2.render(scene, _cameraR); + } + renderer2.setScissorTest(false); + }; + } +}; + +// node_modules/three/examples/jsm/effects/StereoEffect.js +var StereoEffect = class { + constructor(renderer2) { + const _stereo = new StereoCamera(); + _stereo.aspect = 0.5; + const size2 = new Vector2(); + this.setEyeSeparation = function(eyeSep) { + _stereo.eyeSep = eyeSep; + }; + this.setSize = function(width2, height2) { + renderer2.setSize(width2, height2); + }; + this.render = function(scene, camera) { + if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); + if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); + _stereo.update(camera); + renderer2.getSize(size2); + if (renderer2.autoClear) renderer2.clear(); + renderer2.setScissorTest(true); + renderer2.setScissor(0, 0, size2.width / 2, size2.height); + renderer2.setViewport(0, 0, size2.width / 2, size2.height); + renderer2.render(scene, _stereo.cameraL); + renderer2.setScissor(size2.width / 2, 0, size2.width / 2, size2.height); + renderer2.setViewport(size2.width / 2, 0, size2.width / 2, size2.height); + renderer2.render(scene, _stereo.cameraR); + renderer2.setScissorTest(false); + }; + } +}; + +// node_modules/three/examples/jsm/environments/DebugEnvironment.js +var DebugEnvironment = class extends Scene { + constructor() { + super(); + const geometry = new BoxGeometry(); + geometry.deleteAttribute("uv"); + const roomMaterial = new MeshStandardMaterial({ metalness: 0, side: BackSide }); + const room = new Mesh(geometry, roomMaterial); + room.scale.setScalar(10); + this.add(room); + const mainLight = new PointLight(16777215, 50, 0, 2); + this.add(mainLight); + const material1 = new MeshLambertMaterial({ color: 16711680, emissive: 16777215, emissiveIntensity: 10 }); + const light1 = new Mesh(geometry, material1); + light1.position.set(-5, 2, 0); + light1.scale.set(0.1, 1, 1); + this.add(light1); + const material2 = new MeshLambertMaterial({ color: 65280, emissive: 16777215, emissiveIntensity: 10 }); + const light2 = new Mesh(geometry, material2); + light2.position.set(0, 5, 0); + light2.scale.set(1, 0.1, 1); + this.add(light2); + const material3 = new MeshLambertMaterial({ color: 255, emissive: 16777215, emissiveIntensity: 10 }); + const light3 = new Mesh(geometry, material3); + light3.position.set(2, 1, 5); + light3.scale.set(1.5, 2, 0.1); + this.add(light3); + } +}; + +// node_modules/three/examples/jsm/environments/RoomEnvironment.js +var RoomEnvironment = class extends Scene { + constructor(renderer2 = null) { + super(); + const geometry = new BoxGeometry(); + geometry.deleteAttribute("uv"); + const roomMaterial = new MeshStandardMaterial({ side: BackSide }); + const boxMaterial = new MeshStandardMaterial(); + const mainLight = new PointLight(16777215, 900, 28, 2); + mainLight.position.set(0.418, 16.199, 0.3); + this.add(mainLight); + const room = new Mesh(geometry, roomMaterial); + room.position.set(-0.757, 13.219, 0.717); + room.scale.set(31.713, 28.305, 28.591); + this.add(room); + const box1 = new Mesh(geometry, boxMaterial); + box1.position.set(-10.906, 2.009, 1.846); + box1.rotation.set(0, -0.195, 0); + box1.scale.set(2.328, 7.905, 4.651); + this.add(box1); + const box2 = new Mesh(geometry, boxMaterial); + box2.position.set(-5.607, -0.754, -0.758); + box2.rotation.set(0, 0.994, 0); + box2.scale.set(1.97, 1.534, 3.955); + this.add(box2); + const box3 = new Mesh(geometry, boxMaterial); + box3.position.set(6.167, 0.857, 7.803); + box3.rotation.set(0, 0.561, 0); + box3.scale.set(3.927, 6.285, 3.687); + this.add(box3); + const box4 = new Mesh(geometry, boxMaterial); + box4.position.set(-2.017, 0.018, 6.124); + box4.rotation.set(0, 0.333, 0); + box4.scale.set(2.002, 4.566, 2.064); + this.add(box4); + const box5 = new Mesh(geometry, boxMaterial); + box5.position.set(2.291, -0.756, -2.621); + box5.rotation.set(0, -0.286, 0); + box5.scale.set(1.546, 1.552, 1.496); + this.add(box5); + const box6 = new Mesh(geometry, boxMaterial); + box6.position.set(-2.193, -0.369, -5.547); + box6.rotation.set(0, 0.516, 0); + box6.scale.set(3.875, 3.487, 2.986); + this.add(box6); + const light1 = new Mesh(geometry, createAreaLightMaterial(50)); + light1.position.set(-16.116, 14.37, 8.208); + light1.scale.set(0.1, 2.428, 2.739); + this.add(light1); + const light2 = new Mesh(geometry, createAreaLightMaterial(50)); + light2.position.set(-16.109, 18.021, -8.207); + light2.scale.set(0.1, 2.425, 2.751); + this.add(light2); + const light3 = new Mesh(geometry, createAreaLightMaterial(17)); + light3.position.set(14.904, 12.198, -1.832); + light3.scale.set(0.15, 4.265, 6.331); + this.add(light3); + const light4 = new Mesh(geometry, createAreaLightMaterial(43)); + light4.position.set(-0.462, 8.89, 14.52); + light4.scale.set(4.38, 5.441, 0.088); + this.add(light4); + const light5 = new Mesh(geometry, createAreaLightMaterial(20)); + light5.position.set(3.235, 11.486, -12.541); + light5.scale.set(2.5, 2, 0.1); + this.add(light5); + const light6 = new Mesh(geometry, createAreaLightMaterial(100)); + light6.position.set(0, 20, 0); + light6.scale.set(1, 0.1, 1); + this.add(light6); + } + dispose() { + const resources = /* @__PURE__ */ new Set(); + this.traverse((object) => { + if (object.isMesh) { + resources.add(object.geometry); + resources.add(object.material); + } + }); + for (const resource of resources) { + resource.dispose(); + } + } +}; +function createAreaLightMaterial(intensity) { + const material = new MeshBasicMaterial(); + material.color.setScalar(intensity); + return material; +} + +// node_modules/three/examples/jsm/exporters/DRACOExporter.js +var DRACOExporter = class _DRACOExporter { + parse(object, options = {}) { + options = Object.assign({ + decodeSpeed: 5, + encodeSpeed: 5, + encoderMethod: _DRACOExporter.MESH_EDGEBREAKER_ENCODING, + quantization: [16, 8, 8, 8, 8], + exportUvs: true, + exportNormals: true, + exportColor: false + }, options); + if (DracoEncoderModule === void 0) { + throw new Error("THREE.DRACOExporter: required the draco_encoder to work."); + } + const geometry = object.geometry; + const dracoEncoder = DracoEncoderModule(); + const encoder = new dracoEncoder.Encoder(); + let builder; + let dracoObject; + if (object.isMesh === true) { + builder = new dracoEncoder.MeshBuilder(); + dracoObject = new dracoEncoder.Mesh(); + const vertices = geometry.getAttribute("position"); + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); + const faces = geometry.getIndex(); + if (faces !== null) { + builder.AddFacesToMesh(dracoObject, faces.count / 3, faces.array); + } else { + const faces2 = new (vertices.count > 65535 ? Uint32Array : Uint16Array)(vertices.count); + for (let i = 0; i < faces2.length; i++) { + faces2[i] = i; + } + builder.AddFacesToMesh(dracoObject, vertices.count, faces2); + } + if (options.exportNormals === true) { + const normals = geometry.getAttribute("normal"); + if (normals !== void 0) { + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array); + } + } + if (options.exportUvs === true) { + const uvs = geometry.getAttribute("uv"); + if (uvs !== void 0) { + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array); + } + } + if (options.exportColor === true) { + const colors = geometry.getAttribute("color"); + if (colors !== void 0) { + const array = createVertexColorSRGBArray(colors); + builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array); + } + } + } else if (object.isPoints === true) { + builder = new dracoEncoder.PointCloudBuilder(); + dracoObject = new dracoEncoder.PointCloud(); + const vertices = geometry.getAttribute("position"); + builder.AddFloatAttribute(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); + if (options.exportColor === true) { + const colors = geometry.getAttribute("color"); + if (colors !== void 0) { + const array = createVertexColorSRGBArray(colors); + builder.AddFloatAttribute(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, array); + } + } + } else { + throw new Error("DRACOExporter: Unsupported object type."); + } + const encodedData = new dracoEncoder.DracoInt8Array(); + const encodeSpeed = options.encodeSpeed !== void 0 ? options.encodeSpeed : 5; + const decodeSpeed = options.decodeSpeed !== void 0 ? options.decodeSpeed : 5; + encoder.SetSpeedOptions(encodeSpeed, decodeSpeed); + if (options.encoderMethod !== void 0) { + encoder.SetEncodingMethod(options.encoderMethod); + } + if (options.quantization !== void 0) { + for (let i = 0; i < 5; i++) { + if (options.quantization[i] !== void 0) { + encoder.SetAttributeQuantization(i, options.quantization[i]); + } + } + } + let length2; + if (object.isMesh === true) { + length2 = encoder.EncodeMeshToDracoBuffer(dracoObject, encodedData); + } else { + length2 = encoder.EncodePointCloudToDracoBuffer(dracoObject, true, encodedData); + } + dracoEncoder.destroy(dracoObject); + if (length2 === 0) { + throw new Error("THREE.DRACOExporter: Draco encoding failed."); + } + const outputData = new Int8Array(new ArrayBuffer(length2)); + for (let i = 0; i < length2; i++) { + outputData[i] = encodedData.GetValue(i); + } + dracoEncoder.destroy(encodedData); + dracoEncoder.destroy(encoder); + dracoEncoder.destroy(builder); + return outputData; + } +}; +function createVertexColorSRGBArray(attribute) { + const _color5 = new Color(); + const count = attribute.count; + const itemSize = attribute.itemSize; + const array = new Float32Array(count * itemSize); + for (let i = 0, il = count; i < il; i++) { + _color5.fromBufferAttribute(attribute, i).convertLinearToSRGB(); + array[i * itemSize] = _color5.r; + array[i * itemSize + 1] = _color5.g; + array[i * itemSize + 2] = _color5.b; + if (itemSize === 4) { + array[i * itemSize + 3] = attribute.getW(i); + } + } + return array; +} +DRACOExporter.MESH_EDGEBREAKER_ENCODING = 1; +DRACOExporter.MESH_SEQUENTIAL_ENCODING = 0; +DRACOExporter.POINT_CLOUD = 0; +DRACOExporter.TRIANGULAR_MESH = 1; +DRACOExporter.INVALID = -1; +DRACOExporter.POSITION = 0; +DRACOExporter.NORMAL = 1; +DRACOExporter.COLOR = 2; +DRACOExporter.TEX_COORD = 3; +DRACOExporter.GENERIC = 4; + +// node_modules/three/examples/jsm/libs/fflate.module.js +var ch2 = {}; +var wk = function(c2, id, msg, transfer, cb) { + var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([ + c2 + ';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})' + ], { type: "text/javascript" })))); + w.onmessage = function(e) { + var d = e.data, ed = d.$e$; + if (ed) { + var err2 = new Error(ed[0]); + err2["code"] = ed[1]; + err2.stack = ed[2]; + cb(err2, null); + } else + cb(null, d); + }; + w.postMessage(msg, transfer); + return w; +}; +var u8 = Uint8Array; +var u16 = Uint16Array; +var i32 = Int32Array; +var 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 +]); +var 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 +]); +var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +var freb = function(eb, start) { + var b3 = new u16(31); + for (var i = 0; i < 31; ++i) { + b3[i] = start += 1 << eb[i - 1]; + } + var r = new i32(b3[30]); + for (var i = 1; i < 30; ++i) { + for (var j = b3[i]; j < b3[i + 1]; ++j) { + r[j] = j - b3[i] << 5 | i; + } + } + return { b: b3, r }; +}; +var _a = freb(fleb, 2); +var fl = _a.b; +var revfl = _a.r; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0); +var fd = _b.b; +var revfd = _b.r; +var rev = new u16(32768); +for (i = 0; i < 32768; ++i) { + x2 = (i & 43690) >> 1 | (i & 21845) << 1; + x2 = (x2 & 52428) >> 2 | (x2 & 13107) << 2; + x2 = (x2 & 61680) >> 4 | (x2 & 3855) << 4; + rev[i] = ((x2 & 65280) >> 8 | (x2 & 255) << 8) >> 1; +} +var x2; +var i; +var hMap = function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l2 = new u16(mb); + for (; i < s; ++i) { + if (cd[i]) + ++l2[cd[i] - 1]; + } + var le = new u16(mb); + for (i = 1; i < mb; ++i) { + le[i] = le[i - 1] + l2[i - 1] << 1; + } + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) { + if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) { + co[rev[v] >> rvb] = sv; + } + } + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) { + if (cd[i]) { + co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]; + } + } + } + return co; +}; +var flt = new u8(288); +for (i = 0; i < 144; ++i) + flt[i] = 8; +var i; +for (i = 144; i < 256; ++i) + flt[i] = 9; +var i; +for (i = 256; i < 280; ++i) + flt[i] = 7; +var i; +for (i = 280; i < 288; ++i) + flt[i] = 8; +var i; +var fdt = new u8(32); +for (i = 0; i < 32; ++i) + fdt[i] = 5; +var i; +var flm = hMap(flt, 9, 0); +var flrm = hMap(flt, 9, 1); +var fdm = hMap(fdt, 5, 0); +var fdrm = hMap(fdt, 5, 1); +var max = function(a2) { + var m = a2[0]; + for (var i = 1; i < a2.length; ++i) { + if (a2[i] > m) + m = a2[i]; + } + return m; +}; +var bits = function(d, p2, m) { + var o = p2 / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p2 & 7) & m; +}; +var bits16 = function(d, p2) { + var o = p2 / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p2 & 7); +}; +var shft = function(p2) { + return (p2 + 7) / 8 | 0; +}; +var slc = function(v, s, e) { + if (s == null || s < 0) + s = 0; + if (e == null || e > v.length) + e = v.length; + return new u8(v.subarray(s, e)); +}; +var ec = [ + "unexpected EOF", + "invalid block type", + "invalid length/literal", + "invalid distance", + "stream finished", + "no stream handler", + , + "no callback", + "invalid UTF-8 data", + "extra field too long", + "date not in range 1980-2099", + "filename too long", + "stream finishing", + "invalid zip data" + // determined by unknown compression method +]; +var err = function(ind, msg, nt2) { + var e = new Error(msg || ec[ind]); + e.code = ind; + if (Error.captureStackTrace) + Error.captureStackTrace(e, err); + if (!nt2) + throw e; + return e; +}; +var inflt = function(dat, st, buf, dict) { + var sl = dat.length, dl = dict ? dict.length : 0; + if (!sl || st.f && !st.l) + return buf || new u8(0); + var noBuf = !buf; + var resize = noBuf || st.i != 2; + var noSt = st.i; + if (noBuf) + buf = new u8(sl * 3); + var cbuf = function(l3) { + var bl = buf.length; + if (l3 > bl) { + var nbuf = new u8(Math.max(bl * 2, l3)); + nbuf.set(buf); + buf = nbuf; + } + }; + 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; + var tbts = sl * 8; + do { + if (!lm) { + final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l2 = dat[s - 4] | dat[s - 3] << 8, t3 = s + l2; + if (t3 > sl) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + l2); + buf.set(dat.subarray(s, t3), bt); + st.b = bt += l2, st.p = pos = t3 * 8, st.f = final; + continue; + } else if (type == 1) + lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) { + clt[clim[i]] = bits(dat, pos + i * 3, 7); + } + pos += hcLen * 3; + var clb = max(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl; ) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >> 4; + if (s < 16) { + ldt[i++] = s; + } else { + var c2 = 0, n2 = 0; + if (s == 16) + n2 = 3 + bits(dat, pos, 3), pos += 2, c2 = ldt[i - 1]; + else if (s == 17) + n2 = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) + n2 = 11 + bits(dat, pos, 127), pos += 7; + while (n2--) + ldt[i++] = c2; + } + } + var lt = ldt.subarray(0, hLit), dt2 = ldt.subarray(hLit); + lbt = max(lt); + dbt = max(dt2); + lm = hMap(lt, lbt, 1); + dm = hMap(dt2, dbt, 1); + } else + err(1); + if (pos > tbts) { + if (noSt) + err(0); + break; + } + } + if (resize) + cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (; ; lpos = pos) { + var c2 = lm[bits16(dat, pos) & lms], sym = c2 >> 4; + pos += c2 & 15; + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (!c2) + err(2); + if (sym < 256) + buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add2 = sym - 254; + if (sym > 264) { + var i = sym - 257, b3 = fleb[i]; + add2 = bits(dat, pos, (1 << b3) - 1) + fl[i]; + pos += b3; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >> 4; + if (!d) + err(3); + pos += d & 15; + var dt2 = fd[dsym]; + if (dsym > 3) { + var b3 = fdeb[dsym]; + dt2 += bits16(dat, pos) & (1 << b3) - 1, pos += b3; + } + if (pos > tbts) { + if (noSt) + err(0); + break; + } + if (resize) + cbuf(bt + 131072); + var end = bt + add2; + if (bt < dt2) { + var shift = dl - dt2, dend = Math.min(dt2, end); + if (shift + bt < 0) + err(3); + for (; bt < dend; ++bt) + buf[bt] = dict[shift + bt]; + } + for (; bt < end; ++bt) + buf[bt] = buf[bt - dt2]; + } + } + st.l = lm, st.p = lpos, st.b = bt, st.f = final; + if (lm) + final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt); +}; +var wbits = function(d, p2, v) { + v <<= p2 & 7; + var o = p2 / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; +}; +var wbits16 = function(d, p2, v) { + v <<= p2 & 7; + var o = p2 / 8 | 0; + d[o] |= v; + d[o + 1] |= v >> 8; + d[o + 2] |= v >> 16; +}; +var hTree = function(d, mb) { + var t3 = []; + for (var i = 0; i < d.length; ++i) { + if (d[i]) + t3.push({ s: i, f: d[i] }); + } + var s = t3.length; + var t22 = t3.slice(); + if (!s) + return { t: et, l: 0 }; + if (s == 1) { + var v = new u8(t3[0].s + 1); + v[t3[0].s] = 1; + return { t: v, l: 1 }; + } + t3.sort(function(a2, b3) { + return a2.f - b3.f; + }); + t3.push({ s: -1, f: 25001 }); + var l2 = t3[0], r = t3[1], i0 = 0, i1 = 1, i2 = 2; + t3[0] = { s: -1, f: l2.f + r.f, l: l2, r }; + while (i1 != s - 1) { + l2 = t3[t3[i0].f < t3[i2].f ? i0++ : i2++]; + r = t3[i0 != i1 && t3[i0].f < t3[i2].f ? i0++ : i2++]; + t3[i1++] = { s: -1, f: l2.f + r.f, l: l2, r }; + } + var maxSym = t22[0].s; + for (var i = 1; i < s; ++i) { + if (t22[i].s > maxSym) + maxSym = t22[i].s; + } + var tr = new u16(maxSym + 1); + var mbt = ln(t3[i1 - 1], tr, 0); + if (mbt > mb) { + var i = 0, dt2 = 0; + var lft = mbt - mb, cst = 1 << lft; + t22.sort(function(a2, b3) { + return tr[b3.s] - tr[a2.s] || a2.f - b3.f; + }); + for (; i < s; ++i) { + var i2_1 = t22[i].s; + if (tr[i2_1] > mb) { + dt2 += cst - (1 << mbt - tr[i2_1]); + tr[i2_1] = mb; + } else + break; + } + dt2 >>= lft; + while (dt2 > 0) { + var i2_2 = t22[i].s; + if (tr[i2_2] < mb) + dt2 -= 1 << mb - tr[i2_2]++ - 1; + else + ++i; + } + for (; i >= 0 && dt2; --i) { + var i2_3 = t22[i].s; + if (tr[i2_3] == mb) { + --tr[i2_3]; + ++dt2; + } + } + mbt = mb; + } + return { t: new u8(tr), l: mbt }; +}; +var ln = function(n2, l2, d) { + return n2.s == -1 ? Math.max(ln(n2.l, l2, d + 1), ln(n2.r, l2, d + 1)) : l2[n2.s] = d; +}; +var lc = function(c2) { + var s = c2.length; + while (s && !c2[--s]) + ; + var cl = new u16(++s); + var cli = 0, cln = c2[0], cls = 1; + var w = function(v) { + cl[cli++] = v; + }; + for (var i = 1; i <= s; ++i) { + if (c2[i] == cln && i != s) + ++cls; + else { + if (!cln && cls > 2) { + for (; cls > 138; cls -= 138) + w(32754); + if (cls > 2) { + w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); + cls = 0; + } + } else if (cls > 3) { + w(cln), --cls; + for (; cls > 6; cls -= 6) + w(8304); + if (cls > 2) + w(cls - 3 << 5 | 8208), cls = 0; + } + while (cls--) + w(cln); + cls = 1; + cln = c2[i]; + } + } + return { c: cl.subarray(0, cli), n: s }; +}; +var clen = function(cf, cl) { + var l2 = 0; + for (var i = 0; i < cl.length; ++i) + l2 += cf[i] * cl[i]; + return l2; +}; +var wfblk = function(out, pos, dat) { + var s = dat.length; + var o = shft(pos + 2); + out[o] = s & 255; + out[o + 1] = s >> 8; + out[o + 2] = out[o] ^ 255; + out[o + 3] = out[o + 1] ^ 255; + for (var i = 0; i < s; ++i) + out[o + i + 4] = dat[i]; + return (o + 4 + s) * 8; +}; +var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p2) { + wbits(out, p2++, final); + ++lf[256]; + var _a3 = hTree(lf, 15), dlt = _a3.t, mlb = _a3.l; + var _b3 = hTree(df, 15), ddt = _b3.t, mdb = _b3.l; + var _c = lc(dlt), lclt = _c.c, nlc = _c.n; + var _d = lc(ddt), lcdt = _d.c, ndc = _d.n; + var lcfreq = new u16(19); + for (var i = 0; i < lclt.length; ++i) + ++lcfreq[lclt[i] & 31]; + for (var i = 0; i < lcdt.length; ++i) + ++lcfreq[lcdt[i] & 31]; + var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l; + var nlcc = 19; + for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc) + ; + var flen = bl + 5 << 3; + var ftlen = clen(lf, flt) + clen(df, fdt) + eb; + var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]; + if (bs >= 0 && flen <= ftlen && flen <= dtlen) + return wfblk(out, p2, dat.subarray(bs, bs + bl)); + var lm, ll, dm, dl; + wbits(out, p2, 1 + (dtlen < ftlen)), p2 += 2; + if (dtlen < ftlen) { + lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; + var llm = hMap(lct, mlcb, 0); + wbits(out, p2, nlc - 257); + wbits(out, p2 + 5, ndc - 1); + wbits(out, p2 + 10, nlcc - 4); + p2 += 14; + for (var i = 0; i < nlcc; ++i) + wbits(out, p2 + 3 * i, lct[clim[i]]); + p2 += 3 * nlcc; + var lcts = [lclt, lcdt]; + for (var it = 0; it < 2; ++it) { + var clct = lcts[it]; + for (var i = 0; i < clct.length; ++i) { + var len = clct[i] & 31; + wbits(out, p2, llm[len]), p2 += lct[len]; + if (len > 15) + wbits(out, p2, clct[i] >> 5 & 127), p2 += clct[i] >> 12; + } + } + } else { + lm = flm, ll = flt, dm = fdm, dl = fdt; + } + for (var i = 0; i < li; ++i) { + var sym = syms[i]; + if (sym > 255) { + var len = sym >> 18 & 31; + wbits16(out, p2, lm[len + 257]), p2 += ll[len + 257]; + if (len > 7) + wbits(out, p2, sym >> 23 & 31), p2 += fleb[len]; + var dst = sym & 31; + wbits16(out, p2, dm[dst]), p2 += dl[dst]; + if (dst > 3) + wbits16(out, p2, sym >> 5 & 8191), p2 += fdeb[dst]; + } else { + wbits16(out, p2, lm[sym]), p2 += ll[sym]; + } + } + wbits16(out, p2, lm[256]); + return p2 + ll[256]; +}; +var deo = new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]); +var et = new u8(0); +var dflt = function(dat, lvl, plvl, pre, post2, st) { + var s = st.z || dat.length; + var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post2); + var w = o.subarray(pre, o.length - post2); + var lst = st.l; + var pos = (st.r || 0) & 7; + if (lvl) { + if (pos) + w[0] = st.r >> 3; + var opt = deo[lvl - 1]; + var n2 = opt >> 13, c2 = opt & 8191; + var msk_1 = (1 << plvl) - 1; + var prev = st.p || new u16(32768), head2 = st.h || new u16(msk_1 + 1); + var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; + var hsh = function(i2) { + return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1; + }; + var syms = new i32(25e3); + var lf = new u16(288), df = new u16(32); + var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0; + for (; i + 2 < s; ++i) { + var hv = hsh(i); + var imod = i & 32767, pimod = head2[hv]; + prev[imod] = pimod; + head2[hv] = imod; + if (wi <= i) { + var rem = s - i; + if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) { + pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); + li = lc_1 = eb = 0, bs = i; + for (var j = 0; j < 286; ++j) + lf[j] = 0; + for (var j = 0; j < 30; ++j) + df[j] = 0; + } + var l2 = 2, d = 0, ch_1 = c2, dif = imod - pimod & 32767; + if (rem > 2 && hv == hsh(i - dif)) { + var maxn = Math.min(n2, rem) - 1; + var maxd = Math.min(32767, i); + var ml = Math.min(258, rem); + while (dif <= maxd && --ch_1 && imod != pimod) { + if (dat[i + l2] == dat[i + l2 - dif]) { + var nl = 0; + for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl) + ; + if (nl > l2) { + l2 = nl, d = dif; + if (nl > maxn) + break; + var mmd = Math.min(dif, nl - 2); + var md = 0; + for (var j = 0; j < mmd; ++j) { + var ti = i - dif + j & 32767; + var pti = prev[ti]; + var cd = ti - pti & 32767; + if (cd > md) + md = cd, pimod = ti; + } + } + } + imod = pimod, pimod = prev[imod]; + dif += imod - pimod & 32767; + } + } + if (d) { + syms[li++] = 268435456 | revfl[l2] << 18 | revfd[d]; + var lin = revfl[l2] & 31, din = revfd[d] & 31; + eb += fleb[lin] + fdeb[din]; + ++lf[257 + lin]; + ++df[din]; + wi = i + l2; + ++lc_1; + } else { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + } + } + for (i = Math.max(i, wi); i < s; ++i) { + syms[li++] = dat[i]; + ++lf[dat[i]]; + } + pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); + if (!lst) { + st.r = pos & 7 | w[pos / 8 | 0] << 3; + pos -= 7; + st.h = head2, st.p = prev, st.i = i, st.w = wi; + } + } else { + for (var i = st.w || 0; i < s + lst; i += 65535) { + var e = i + 65535; + if (e >= s) { + w[pos / 8 | 0] = lst; + e = s; + } + pos = wfblk(w, pos + 1, dat.subarray(i, e)); + } + st.i = s; + } + return slc(o, 0, pre + shft(pos) + post2); +}; +var crct = function() { + var t3 = new Int32Array(256); + for (var i = 0; i < 256; ++i) { + var c2 = i, k2 = 9; + while (--k2) + c2 = (c2 & 1 && -306674912) ^ c2 >>> 1; + t3[i] = c2; + } + return t3; +}(); +var crc = function() { + var c2 = -1; + return { + p: function(d) { + var cr = c2; + for (var i = 0; i < d.length; ++i) + cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8; + c2 = cr; + }, + d: function() { + return ~c2; + } + }; +}; +var adler = function() { + var a2 = 1, b3 = 0; + return { + p: function(d) { + var n2 = a2, m = b3; + var l2 = d.length | 0; + for (var i = 0; i != l2; ) { + var e = Math.min(i + 2655, l2); + for (; i < e; ++i) + m += n2 += d[i]; + n2 = (n2 & 65535) + 15 * (n2 >> 16), m = (m & 65535) + 15 * (m >> 16); + } + a2 = n2, b3 = m; + }, + d: function() { + a2 %= 65521, b3 %= 65521; + return (a2 & 255) << 24 | (a2 & 65280) << 8 | (b3 & 255) << 8 | b3 >> 8; + } + }; +}; +var dopt = function(dat, opt, pre, post2, st) { + if (!st) { + st = { l: 1 }; + if (opt.dictionary) { + var dict = opt.dictionary.subarray(-32768); + var newDat = new u8(dict.length + dat.length); + newDat.set(dict); + newDat.set(dat, dict.length); + dat = newDat; + st.w = dict.length; + } + } + 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, post2, st); +}; +var mrg = function(a2, b3) { + var o = {}; + for (var k2 in a2) + o[k2] = a2[k2]; + for (var k2 in b3) + o[k2] = b3[k2]; + return o; +}; +var wcln = function(fn, fnStr, td2) { + var dt2 = fn(); + var st = fn.toString(); + var ks = st.slice(st.indexOf("[") + 1, st.lastIndexOf("]")).replace(/\s+/g, "").split(","); + for (var i = 0; i < dt2.length; ++i) { + var v = dt2[i], k2 = ks[i]; + if (typeof v == "function") { + fnStr += ";" + k2 + "="; + var st_1 = v.toString(); + if (v.prototype) { + if (st_1.indexOf("[native code]") != -1) { + var spInd = st_1.indexOf(" ", 8) + 1; + fnStr += st_1.slice(spInd, st_1.indexOf("(", spInd)); + } else { + fnStr += st_1; + for (var t3 in v.prototype) + fnStr += ";" + k2 + ".prototype." + t3 + "=" + v.prototype[t3].toString(); + } + } else + fnStr += st_1; + } else + td2[k2] = v; + } + return fnStr; +}; +var ch = []; +var cbfs = function(v) { + var tl = []; + for (var k2 in v) { + if (v[k2].buffer) { + tl.push((v[k2] = new v[k2].constructor(v[k2])).buffer); + } + } + return tl; +}; +var wrkr = function(fns, init, id, cb) { + if (!ch[id]) { + var fnStr = "", td_1 = {}, m = fns.length - 1; + for (var i = 0; i < m; ++i) + fnStr = wcln(fns[i], fnStr, td_1); + ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 }; + } + var td2 = mrg({}, ch[id].e); + return wk(ch[id].c + ";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=" + init.toString() + "}", id, td2, cbfs(td2), cb); +}; +var 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]; +}; +var 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]; +}; +var guze = function() { + return [gzs, gzl]; +}; +var zule = function() { + return [zls]; +}; +var pbf = function(msg) { + return postMessage(msg, [msg.buffer]); +}; +var gopt = function(o) { + return o && { + out: o.size && new u8(o.size), + dictionary: o.dictionary + }; +}; +var astrm = function(strm) { + strm.ondata = function(dat, final) { + return postMessage([dat, final], [dat.buffer]); + }; + return function(ev) { + if (ev.data.length) { + strm.push(ev.data[0], ev.data[1]); + postMessage([ev.data[0].length]); + } else + strm.flush(); + }; +}; +var astrmify = function(fns, strm, opts, init, id, flush, ext) { + var t3; + var w = wrkr(fns, init, id, function(err2, dat) { + if (err2) + w.terminate(), strm.ondata.call(strm, err2); + else if (!Array.isArray(dat)) + ext(dat); + else if (dat.length == 1) { + strm.queuedSize -= dat[0]; + if (strm.ondrain) + strm.ondrain(dat[0]); + } else { + if (dat[1]) + w.terminate(); + strm.ondata.call(strm, err2, dat[0], dat[1]); + } + }); + w.postMessage(opts); + strm.queuedSize = 0; + strm.push = function(d, f) { + if (!strm.ondata) + err(5); + if (t3) + strm.ondata(err(4, 0, 1), null, !!f); + strm.queuedSize += d.length; + w.postMessage([d, t3 = f], [d.buffer]); + }; + strm.terminate = function() { + w.terminate(); + }; + if (flush) { + strm.flush = function() { + w.postMessage([]); + }; + } +}; +var b2 = function(d, b3) { + return d[b3] | d[b3 + 1] << 8; +}; +var b4 = function(d, b3) { + return (d[b3] | d[b3 + 1] << 8 | d[b3 + 2] << 16 | d[b3 + 3] << 24) >>> 0; +}; +var b8 = function(d, b3) { + return b4(d, b3) + b4(d, b3 + 4) * 4294967296; +}; +var wbytes = function(d, b3, v) { + for (; v; ++b3) + d[b3] = v, v >>>= 8; +}; +var gzh = function(c2, o) { + var fn = o.filename; + c2[0] = 31, c2[1] = 139, c2[2] = 8, c2[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c2[9] = 3; + if (o.mtime != 0) + wbytes(c2, 4, Math.floor(new Date(o.mtime || Date.now()) / 1e3)); + if (fn) { + c2[3] = 8; + for (var i = 0; i <= fn.length; ++i) + c2[i + 10] = fn.charCodeAt(i); + } +}; +var gzs = function(d) { + if (d[0] != 31 || d[1] != 139 || d[2] != 8) + err(6, "invalid gzip data"); + var flg = d[3]; + var st = 10; + if (flg & 4) + st += (d[10] | d[11] << 8) + 2; + for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]) + ; + return st + (flg & 2); +}; +var gzl = function(d) { + var l2 = d.length; + return (d[l2 - 4] | d[l2 - 3] << 8 | d[l2 - 2] << 16 | d[l2 - 1] << 24) >>> 0; +}; +var gzhl = function(o) { + return 10 + (o.filename ? o.filename.length + 1 : 0); +}; +var zlh = function(c2, o) { + var lv = o.level, fl2 = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2; + c2[0] = 120, c2[1] = fl2 << 6 | (o.dictionary && 32); + c2[1] |= 31 - (c2[0] << 8 | c2[1]) % 31; + if (o.dictionary) { + var h = adler(); + h.p(o.dictionary); + wbytes(c2, 2, h.d()); + } +}; +var zls = function(d, dict) { + if ((d[0] & 15) != 8 || d[0] >> 4 > 7 || (d[0] << 8 | d[1]) % 31) + err(6, "invalid zlib data"); + if ((d[1] >> 5 & 1) == +!dict) + err(6, "invalid zlib data: " + (d[1] & 32 ? "need" : "unexpected") + " dictionary"); + return (d[1] >> 3 & 4) + 2; +}; +function StrmOpt(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + return opts; +} +var Deflate = function() { + function Deflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + this.o = opts || {}; + this.s = { l: 0, i: 32768, w: 32768, z: 32768 }; + this.b = new u8(98304); + if (this.o.dictionary) { + var dict = this.o.dictionary.subarray(-32768); + this.b.set(dict, 32768 - dict.length); + this.s.i = 32768 - dict.length; + } + } + Deflate2.prototype.p = function(c2, f) { + this.ondata(dopt(c2, this.o, 0, 0, this.s), f); + }; + Deflate2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + var endLen = chunk.length + this.s.z; + if (endLen > this.b.length) { + if (endLen > 2 * this.b.length - 32768) { + var newBuf = new u8(endLen & -32768); + newBuf.set(this.b.subarray(0, this.s.z)); + this.b = newBuf; + } + var split = this.b.length - this.s.z; + this.b.set(chunk.subarray(0, split), this.s.z); + this.s.z = this.b.length; + this.p(this.b, false); + this.b.set(this.b.subarray(-32768)); + this.b.set(chunk.subarray(split), 32768); + this.s.z = chunk.length - split + 32768; + this.s.i = 32766, this.s.w = 32768; + } else { + this.b.set(chunk, this.s.z); + this.s.z += chunk.length; + } + this.s.l = final & 1; + if (this.s.z > this.s.w + 8191 || final) { + this.p(this.b, final || false); + this.s.w = this.s.i, this.s.i -= 2; + } + }; + Deflate2.prototype.flush = function() { + if (!this.ondata) + err(5); + if (this.s.l) + err(4); + this.p(this.b, false); + this.s.w = this.s.i, this.s.i -= 2; + }; + return Deflate2; +}(); +var AsyncDeflate = /* @__PURE__ */ function() { + function AsyncDeflate2(opts, cb) { + astrmify([ + bDflt, + function() { + return [astrm, Deflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Deflate(ev.data); + onmessage = astrm(strm); + }, 6, 1); + } + return AsyncDeflate2; +}(); +function deflateSync(data2, opts) { + return dopt(data2, opts || {}, 0, 0); +} +var Inflate = function() { + function Inflate2(opts, cb) { + if (typeof opts == "function") + cb = opts, opts = {}; + this.ondata = cb; + var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768); + this.s = { i: 0, b: dict ? dict.length : 0 }; + this.o = new u8(32768); + this.p = new u8(0); + if (dict) + this.o.set(dict); + } + Inflate2.prototype.e = function(c2) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + if (!this.p.length) + this.p = c2; + else if (c2.length) { + var n2 = new u8(this.p.length + c2.length); + n2.set(this.p), n2.set(c2, this.p.length), this.p = n2; + } + }; + Inflate2.prototype.c = function(final) { + this.s.i = +(this.d = final || false); + var bts = this.s.b; + var dt2 = inflt(this.p, this.s, this.o); + this.ondata(slc(dt2, bts, this.s.b), this.d); + this.o = slc(dt2, this.s.b - 32768), this.s.b = this.o.length; + this.p = slc(this.p, this.s.p / 8 | 0), this.s.p &= 7; + }; + Inflate2.prototype.push = function(chunk, final) { + this.e(chunk), this.c(final); + }; + return Inflate2; +}(); +var AsyncInflate = /* @__PURE__ */ function() { + function AsyncInflate2(opts, cb) { + astrmify([ + bInflt, + function() { + return [astrm, Inflate]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Inflate(ev.data); + onmessage = astrm(strm); + }, 7, 0); + } + return AsyncInflate2; +}(); +function inflateSync(data2, opts) { + return inflt(data2, { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +var Gzip = function() { + function Gzip2(opts, cb) { + this.c = crc(); + this.l = 0; + this.v = 1; + Deflate.call(this, opts, cb); + } + Gzip2.prototype.push = function(chunk, final) { + this.c.p(chunk); + this.l += chunk.length; + Deflate.prototype.push.call(this, chunk, final); + }; + Gzip2.prototype.p = function(c2, f) { + var raw = dopt(c2, this.o, this.v && gzhl(this.o), f && 8, this.s); + if (this.v) + gzh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l); + this.ondata(raw, f); + }; + Gzip2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Gzip2; +}(); +var Gunzip = function() { + function Gunzip2(opts, cb) { + this.v = 1; + this.r = 0; + Inflate.call(this, opts, cb); + } + Gunzip2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + this.r += chunk.length; + if (this.v) { + var p2 = this.p.subarray(this.v - 1); + var s = p2.length > 3 ? gzs(p2) : 4; + if (s > p2.length) { + if (!final) + return; + } else if (this.v > 1 && this.onmember) { + this.onmember(this.r - p2.length); + } + this.p = p2.subarray(s), this.v = 0; + } + Inflate.prototype.c.call(this, final); + if (this.s.f && !this.s.l && !final) { + this.v = shft(this.s.p) + 9; + this.s = { i: 0 }; + this.o = new u8(0); + this.push(new u8(0), final); + } + }; + return Gunzip2; +}(); +var AsyncGunzip = /* @__PURE__ */ function() { + function AsyncGunzip2(opts, cb) { + var _this = this; + astrmify([ + bInflt, + guze, + function() { + return [astrm, Inflate, Gunzip]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Gunzip(ev.data); + strm.onmember = function(offset) { + return postMessage(offset); + }; + onmessage = astrm(strm); + }, 9, 0, function(offset) { + return _this.onmember && _this.onmember(offset); + }); + } + return AsyncGunzip2; +}(); +function gunzipSync(data2, opts) { + var st = gzs(data2); + if (st + 8 > data2.length) + err(6, "invalid gzip data"); + return inflt(data2.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data2)), opts && opts.dictionary); +} +var Zlib = function() { + function Zlib2(opts, cb) { + this.c = adler(); + this.v = 1; + Deflate.call(this, opts, cb); + } + Zlib2.prototype.push = function(chunk, final) { + this.c.p(chunk); + Deflate.prototype.push.call(this, chunk, final); + }; + Zlib2.prototype.p = function(c2, f) { + var raw = dopt(c2, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s); + if (this.v) + zlh(raw, this.o), this.v = 0; + if (f) + wbytes(raw, raw.length - 4, this.c.d()); + this.ondata(raw, f); + }; + Zlib2.prototype.flush = function() { + Deflate.prototype.flush.call(this); + }; + return Zlib2; +}(); +function zlibSync(data2, opts) { + if (!opts) + opts = {}; + var a2 = adler(); + a2.p(data2); + var d = dopt(data2, opts, opts.dictionary ? 6 : 2, 4); + return zlh(d, opts), wbytes(d, d.length - 4, a2.d()), d; +} +var Unzlib = function() { + function Unzlib2(opts, cb) { + Inflate.call(this, opts, cb); + this.v = opts && opts.dictionary ? 2 : 1; + } + Unzlib2.prototype.push = function(chunk, final) { + Inflate.prototype.e.call(this, chunk); + if (this.v) { + if (this.p.length < 6 && !final) + return; + this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0; + } + if (final) { + if (this.p.length < 4) + err(6, "invalid zlib data"); + this.p = this.p.subarray(0, -4); + } + Inflate.prototype.c.call(this, final); + }; + return Unzlib2; +}(); +var AsyncUnzlib = /* @__PURE__ */ function() { + function AsyncUnzlib2(opts, cb) { + astrmify([ + bInflt, + zule, + function() { + return [astrm, Inflate, Unzlib]; + } + ], this, StrmOpt.call(this, opts, cb), function(ev) { + var strm = new Unzlib(ev.data); + onmessage = astrm(strm); + }, 11, 0); + } + return AsyncUnzlib2; +}(); +function unzlibSync(data2, opts) { + return inflt(data2.subarray(zls(data2, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary); +} +var Decompress = function() { + function Decompress2(opts, cb) { + this.o = StrmOpt.call(this, opts, cb) || {}; + this.G = Gunzip; + this.I = Inflate; + this.Z = Unzlib; + } + Decompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(dat, final) { + _this.ondata(dat, final); + }; + }; + Decompress2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (!this.s) { + if (this.p && this.p.length) { + var n2 = new u8(this.p.length + chunk.length); + n2.set(this.p), n2.set(chunk, this.p.length); + } else + this.p = chunk; + if (this.p.length > 2) { + this.s = this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8 ? new this.G(this.o) : (this.p[0] & 15) != 8 || this.p[0] >> 4 > 7 || (this.p[0] << 8 | this.p[1]) % 31 ? new this.I(this.o) : new this.Z(this.o); + this.i(); + this.s.push(this.p, final); + this.p = null; + } + } else + this.s.push(chunk, final); + }; + return Decompress2; +}(); +var AsyncDecompress = function() { + function AsyncDecompress2(opts, cb) { + Decompress.call(this, opts, cb); + this.queuedSize = 0; + this.G = AsyncGunzip; + this.I = AsyncInflate; + this.Z = AsyncUnzlib; + } + AsyncDecompress2.prototype.i = function() { + var _this = this; + this.s.ondata = function(err2, dat, final) { + _this.ondata(err2, dat, final); + }; + this.s.ondrain = function(size2) { + _this.queuedSize -= size2; + if (_this.ondrain) + _this.ondrain(size2); + }; + }; + AsyncDecompress2.prototype.push = function(chunk, final) { + this.queuedSize += chunk.length; + Decompress.prototype.push.call(this, chunk, final); + }; + return AsyncDecompress2; +}(); +var fltn = function(d, p2, t3, o) { + for (var k2 in d) { + var val2 = d[k2], n2 = p2 + k2, op = o; + if (Array.isArray(val2)) + op = mrg(o, val2[1]), val2 = val2[0]; + if (val2 instanceof u8) + t3[n2] = [val2, op]; + else { + t3[n2 += "/"] = [new u8(0), op]; + fltn(val2, n2, t3, o); + } + } +}; +var te = typeof TextEncoder != "undefined" && new TextEncoder(); +var td = typeof TextDecoder != "undefined" && new TextDecoder(); +var tds = 0; +try { + td.decode(et, { stream: true }); + tds = 1; +} catch (e) { +} +var dutf8 = function(d) { + for (var r = "", i = 0; ; ) { + var c2 = d[i++]; + var eb = (c2 > 127) + (c2 > 223) + (c2 > 239); + if (i + eb > d.length) + return { s: r, r: slc(d, i - 1) }; + if (!eb) + r += String.fromCharCode(c2); + else if (eb == 3) { + c2 = ((c2 & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | d[i++] & 63) - 65536, r += String.fromCharCode(55296 | c2 >> 10, 56320 | c2 & 1023); + } else if (eb & 1) + r += String.fromCharCode((c2 & 31) << 6 | d[i++] & 63); + else + r += String.fromCharCode((c2 & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63); + } +}; +var DecodeUTF8 = function() { + function DecodeUTF82(cb) { + this.ondata = cb; + if (tds) + this.t = new TextDecoder(); + else + this.p = et; + } + DecodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + final = !!final; + if (this.t) { + this.ondata(this.t.decode(chunk, { stream: true }), final); + if (final) { + if (this.t.decode().length) + err(8); + this.t = null; + } + return; + } + if (!this.p) + err(4); + var dat = new u8(this.p.length + chunk.length); + dat.set(this.p); + dat.set(chunk, this.p.length); + var _a3 = dutf8(dat), s = _a3.s, r = _a3.r; + if (final) { + if (r.length) + err(8); + this.p = null; + } else + this.p = r; + this.ondata(s, final); + }; + return DecodeUTF82; +}(); +var EncodeUTF8 = function() { + function EncodeUTF82(cb) { + this.ondata = cb; + } + EncodeUTF82.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + if (this.d) + err(4); + this.ondata(strToU8(chunk), this.d = final || false); + }; + return EncodeUTF82; +}(); +function strToU8(str, latin1) { + if (latin1) { + var ar_1 = new u8(str.length); + for (var i = 0; i < str.length; ++i) + ar_1[i] = str.charCodeAt(i); + return ar_1; + } + if (te) + return te.encode(str); + var l2 = str.length; + var ar = new u8(str.length + (str.length >> 1)); + var ai = 0; + var w = function(v) { + ar[ai++] = v; + }; + for (var i = 0; i < l2; ++i) { + if (ai + 5 > ar.length) { + var n2 = new u8(ai + 8 + (l2 - i << 1)); + n2.set(ar); + ar = n2; + } + var c2 = str.charCodeAt(i); + if (c2 < 128 || latin1) + w(c2); + else if (c2 < 2048) + w(192 | c2 >> 6), w(128 | c2 & 63); + else if (c2 > 55295 && c2 < 57344) + c2 = 65536 + (c2 & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c2 >> 18), w(128 | c2 >> 12 & 63), w(128 | c2 >> 6 & 63), w(128 | c2 & 63); + else + w(224 | c2 >> 12), w(128 | c2 >> 6 & 63), w(128 | c2 & 63); + } + return slc(ar, 0, ai); +} +function strFromU8(dat, latin1) { + if (latin1) { + var r = ""; + for (var i = 0; i < dat.length; i += 16384) + r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384)); + return r; + } else if (td) { + return td.decode(dat); + } else { + var _a3 = dutf8(dat), s = _a3.s, r = _a3.r; + if (r.length) + err(8); + return s; + } +} +var dbf = function(l2) { + return l2 == 1 ? 3 : l2 < 6 ? 2 : l2 == 9 ? 1 : 0; +}; +var slzh = function(d, b3) { + return b3 + 30 + b2(d, b3 + 26) + b2(d, b3 + 28); +}; +var zh = function(d, b3, z) { + var fnl = b2(d, b3 + 28), fn = strFromU8(d.subarray(b3 + 46, b3 + 46 + fnl), !(b2(d, b3 + 8) & 2048)), es = b3 + 46 + fnl, bs = b4(d, b3 + 20); + var _a3 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b3 + 24), b4(d, b3 + 42)], sc = _a3[0], su = _a3[1], off = _a3[2]; + return [b2(d, b3 + 10), sc, su, fn, es + b2(d, b3 + 30) + b2(d, b3 + 32), off]; +}; +var z64e = function(d, b3) { + for (; b2(d, b3) != 1; b3 += 4 + b2(d, b3 + 2)) + ; + return [b8(d, b3 + 12), b8(d, b3 + 4), b8(d, b3 + 20)]; +}; +var exfl = function(ex) { + var le = 0; + if (ex) { + for (var k2 in ex) { + var l2 = ex[k2].length; + if (l2 > 65535) + err(9); + le += l2 + 4; + } + } + return le; +}; +var wzh = function(d, b3, f, fn, u, c2, ce2, co) { + var fl2 = fn.length, ex = f.extra, col = co && co.length; + var exl = exfl(ex); + wbytes(d, b3, ce2 != null ? 33639248 : 67324752), b3 += 4; + if (ce2 != null) + d[b3++] = 20, d[b3++] = f.os; + d[b3] = 20, b3 += 2; + d[b3++] = f.flag << 1 | (c2 < 0 && 8), d[b3++] = u && 8; + d[b3++] = f.compression & 255, d[b3++] = f.compression >> 8; + var dt2 = new Date(f.mtime == null ? Date.now() : f.mtime), y2 = dt2.getFullYear() - 1980; + if (y2 < 0 || y2 > 119) + err(10); + wbytes(d, b3, y2 << 25 | dt2.getMonth() + 1 << 21 | dt2.getDate() << 16 | dt2.getHours() << 11 | dt2.getMinutes() << 5 | dt2.getSeconds() >> 1), b3 += 4; + if (c2 != -1) { + wbytes(d, b3, f.crc); + wbytes(d, b3 + 4, c2 < 0 ? -c2 - 2 : c2); + wbytes(d, b3 + 8, f.size); + } + wbytes(d, b3 + 12, fl2); + wbytes(d, b3 + 14, exl), b3 += 16; + if (ce2 != null) { + wbytes(d, b3, col); + wbytes(d, b3 + 6, f.attrs); + wbytes(d, b3 + 10, ce2), b3 += 14; + } + d.set(fn, b3); + b3 += fl2; + if (exl) { + for (var k2 in ex) { + var exf = ex[k2], l2 = exf.length; + wbytes(d, b3, +k2); + wbytes(d, b3 + 2, l2); + d.set(exf, b3 + 4), b3 += 4 + l2; + } + } + if (col) + d.set(co, b3), b3 += col; + return b3; +}; +var wzf = function(o, b3, c2, d, e) { + wbytes(o, b3, 101010256); + wbytes(o, b3 + 8, c2); + wbytes(o, b3 + 10, c2); + wbytes(o, b3 + 12, d); + wbytes(o, b3 + 16, e); +}; +var ZipPassThrough = function() { + function ZipPassThrough2(filename) { + this.filename = filename; + this.c = crc(); + this.size = 0; + this.compression = 0; + } + ZipPassThrough2.prototype.process = function(chunk, final) { + this.ondata(null, chunk, final); + }; + ZipPassThrough2.prototype.push = function(chunk, final) { + if (!this.ondata) + err(5); + this.c.p(chunk); + this.size += chunk.length; + if (final) + this.crc = this.c.d(); + this.process(chunk, final || false); + }; + return ZipPassThrough2; +}(); +var ZipDeflate = function() { + function ZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new Deflate(opts, function(dat, final) { + _this.ondata(null, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + } + ZipDeflate2.prototype.process = function(chunk, final) { + try { + this.d.push(chunk, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + ZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return ZipDeflate2; +}(); +var AsyncZipDeflate = function() { + function AsyncZipDeflate2(filename, opts) { + var _this = this; + if (!opts) + opts = {}; + ZipPassThrough.call(this, filename); + this.d = new AsyncDeflate(opts, function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.compression = 8; + this.flag = dbf(opts.level); + this.terminate = this.d.terminate; + } + AsyncZipDeflate2.prototype.process = function(chunk, final) { + this.d.push(chunk, final); + }; + AsyncZipDeflate2.prototype.push = function(chunk, final) { + ZipPassThrough.prototype.push.call(this, chunk, final); + }; + return AsyncZipDeflate2; +}(); +var Zip = function() { + function Zip2(cb) { + this.ondata = cb; + this.u = []; + this.d = 1; + } + Zip2.prototype.add = function(file) { + var _this = this; + if (!this.ondata) + err(5); + if (this.d & 2) + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false); + else { + var f = strToU8(file.filename), fl_1 = f.length; + var com = file.comment, o = com && strToU8(com); + var u = fl_1 != file.filename.length || o && com.length != o.length; + var hl_1 = fl_1 + exfl(file.extra) + 30; + if (fl_1 > 65535) + this.ondata(err(11, 0, 1), null, false); + var header = new u8(hl_1); + wzh(header, 0, file, f, u, -1); + var chks_1 = [header]; + var pAll_1 = function() { + for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) { + var chk = chks_2[_i]; + _this.ondata(null, chk, false); + } + chks_1 = []; + }; + var tr_1 = this.d; + this.d = 0; + var ind_1 = this.u.length; + var uf_1 = mrg(file, { + f, + u, + o, + t: function() { + if (file.terminate) + file.terminate(); + }, + r: function() { + pAll_1(); + if (tr_1) { + var nxt = _this.u[ind_1 + 1]; + if (nxt) + nxt.r(); + else + _this.d = 1; + } + tr_1 = 1; + } + }); + var cl_1 = 0; + file.ondata = function(err2, dat, final) { + if (err2) { + _this.ondata(err2, dat, final); + _this.terminate(); + } else { + cl_1 += dat.length; + chks_1.push(dat); + if (final) { + var dd = new u8(16); + wbytes(dd, 0, 134695760); + wbytes(dd, 4, file.crc); + wbytes(dd, 8, cl_1); + wbytes(dd, 12, file.size); + chks_1.push(dd); + uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size; + if (tr_1) + uf_1.r(); + tr_1 = 1; + } else if (tr_1) + pAll_1(); + } + }; + this.u.push(uf_1); + } + }; + Zip2.prototype.end = function() { + var _this = this; + if (this.d & 2) { + this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true); + return; + } + if (this.d) + this.e(); + else + this.u.push({ + r: function() { + if (!(_this.d & 1)) + return; + _this.u.splice(-1, 1); + _this.e(); + }, + t: function() { + } + }); + this.d = 3; + }; + Zip2.prototype.e = function() { + var bt = 0, l2 = 0, tl = 0; + for (var _i = 0, _a3 = this.u; _i < _a3.length; _i++) { + var f = _a3[_i]; + tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0); + } + var out = new u8(tl + 22); + for (var _b3 = 0, _c = this.u; _b3 < _c.length; _b3++) { + var f = _c[_b3]; + wzh(out, bt, f, f.f, f.u, -f.c - 2, l2, f.o); + bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l2 += f.b; + } + wzf(out, bt, this.u.length, tl, l2); + this.ondata(null, out, true); + this.d = 2; + }; + Zip2.prototype.terminate = function() { + for (var _i = 0, _a3 = this.u; _i < _a3.length; _i++) { + var f = _a3[_i]; + f.t(); + } + this.d = 2; + }; + return Zip2; +}(); +function zipSync(data2, opts) { + if (!opts) + opts = {}; + var r = {}; + var files = []; + fltn(data2, "", r, opts); + var o = 0; + var tot = 0; + for (var fn in r) { + var _a3 = r[fn], file = _a3[0], p2 = _a3[1]; + var compression = p2.level == 0 ? 0 : 8; + var f = strToU8(fn), s = f.length; + var com = p2.comment, m = com && strToU8(com), ms = m && m.length; + var exl = exfl(p2.extra); + if (s > 65535) + err(11); + var d = compression ? deflateSync(file, p2) : file, l2 = d.length; + var c2 = crc(); + c2.p(file); + files.push(mrg(p2, { + size: file.length, + crc: c2.d(), + c: d, + f, + m, + u: s != fn.length || m && com.length != ms, + o, + compression + })); + o += 30 + s + exl + l2; + tot += 76 + 2 * (s + exl) + (ms || 0) + l2; + } + var out = new u8(tot + 22), oe = o, cdl = tot - o; + for (var i = 0; i < files.length; ++i) { + var f = files[i]; + wzh(out, f.o, f, f.f, f.u, f.c.length); + var badd = 30 + f.f.length + exfl(f.extra); + out.set(f.c, f.o + badd); + wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0); + } + wzf(out, o, files.length, cdl, oe); + return out; +} +var UnzipPassThrough = function() { + function UnzipPassThrough2() { + } + UnzipPassThrough2.prototype.push = function(data2, final) { + this.ondata(null, data2, final); + }; + UnzipPassThrough2.compression = 0; + return UnzipPassThrough2; +}(); +var UnzipInflate = function() { + function UnzipInflate2() { + var _this = this; + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } + UnzipInflate2.prototype.push = function(data2, final) { + try { + this.i.push(data2, final); + } catch (e) { + this.ondata(e, null, final); + } + }; + UnzipInflate2.compression = 8; + return UnzipInflate2; +}(); +var AsyncUnzipInflate = function() { + function AsyncUnzipInflate2(_, sz) { + var _this = this; + if (sz < 32e4) { + this.i = new Inflate(function(dat, final) { + _this.ondata(null, dat, final); + }); + } else { + this.i = new AsyncInflate(function(err2, dat, final) { + _this.ondata(err2, dat, final); + }); + this.terminate = this.i.terminate; + } + } + AsyncUnzipInflate2.prototype.push = function(data2, final) { + if (this.i.terminate) + data2 = slc(data2, 0); + this.i.push(data2, final); + }; + AsyncUnzipInflate2.compression = 8; + return AsyncUnzipInflate2; +}(); +var Unzip = function() { + function Unzip2(cb) { + this.onfile = cb; + this.k = []; + this.o = { + 0: UnzipPassThrough + }; + this.p = et; + } + Unzip2.prototype.push = function(chunk, final) { + var _this = this; + if (!this.onfile) + err(5); + if (!this.p) + err(4); + if (this.c > 0) { + var len = Math.min(this.c, chunk.length); + var toAdd = chunk.subarray(0, len); + this.c -= len; + if (this.d) + this.d.push(toAdd, !this.c); + else + this.k[0].push(toAdd); + chunk = chunk.subarray(len); + if (chunk.length) + return this.push(chunk, final); + } else { + var f = 0, i = 0, is = void 0, buf = void 0; + if (!this.p.length) + buf = chunk; + else if (!chunk.length) + buf = this.p; + else { + buf = new u8(this.p.length + chunk.length); + buf.set(this.p), buf.set(chunk, this.p.length); + } + var l2 = buf.length, oc = this.c, add2 = oc && this.d; + var _loop_2 = function() { + var _a3; + var sig = b4(buf, i); + if (sig == 67324752) { + f = 1, is = i; + this_1.d = null; + this_1.c = 0; + 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); + if (l2 > i + 30 + fnl + es) { + var chks_3 = []; + this_1.k.unshift(chks_3); + f = 2; + var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22); + var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u); + if (sc_1 == 4294967295) { + _a3 = dd ? [-2] : z64e(buf, i), sc_1 = _a3[0], su_1 = _a3[1]; + } else if (dd) + sc_1 = -1; + i += es; + this_1.c = sc_1; + var d_1; + var file_1 = { + name: fn_1, + compression: cmp_1, + start: function() { + if (!file_1.ondata) + err(5); + if (!sc_1) + file_1.ondata(null, et, true); + else { + var ctr = _this.o[cmp_1]; + if (!ctr) + file_1.ondata(err(14, "unknown compression type " + cmp_1, 1), null, false); + d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1); + d_1.ondata = function(err2, dat3, final2) { + file_1.ondata(err2, dat3, final2); + }; + for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) { + var dat2 = chks_4[_i]; + d_1.push(dat2, false); + } + if (_this.k[0] == chks_3 && _this.c) + _this.d = d_1; + else + d_1.push(et, true); + } + }, + terminate: function() { + if (d_1 && d_1.terminate) + d_1.terminate(); + } + }; + if (sc_1 >= 0) + file_1.size = sc_1, file_1.originalSize = su_1; + this_1.onfile(file_1); + } + return "break"; + } else if (oc) { + if (sig == 134695760) { + is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0; + return "break"; + } else if (sig == 33639248) { + is = i -= 4, f = 3, this_1.c = 0; + return "break"; + } + } + }; + var this_1 = this; + for (; i < l2 - 4; ++i) { + var state_1 = _loop_2(); + if (state_1 === "break") + break; + } + this.p = et; + if (oc < 0) { + var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 134695760 && 4)) : buf.subarray(0, i); + if (add2) + add2.push(dat, !!f); + else + this.k[+(f == 2)].push(dat); + } + if (f & 2) + return this.push(buf.subarray(i), final); + this.p = buf.subarray(i); + } + if (final) { + if (this.c) + err(13); + this.p = null; + } + }; + Unzip2.prototype.register = function(decoder) { + this.o[decoder.compression] = decoder; + }; + return Unzip2; +}(); +function unzipSync(data2, opts) { + var files = {}; + var e = data2.length - 22; + for (; b4(data2, e) != 101010256; --e) { + if (!e || data2.length - e > 65558) + err(13); + } + ; + var c2 = b2(data2, e + 8); + if (!c2) + return {}; + var o = b4(data2, e + 16); + var z = o == 4294967295 || c2 == 65535; + if (z) { + var ze = b4(data2, e - 12); + z = b4(data2, ze) == 101075792; + if (z) { + c2 = b4(data2, ze + 32); + o = b4(data2, ze + 48); + } + } + var fltr = opts && opts.filter; + for (var i = 0; i < c2; ++i) { + var _a3 = zh(data2, o, z), c_2 = _a3[0], sc = _a3[1], su = _a3[2], fn = _a3[3], no = _a3[4], off = _a3[5], b3 = slzh(data2, off); + o = no; + if (!fltr || fltr({ + name: fn, + size: sc, + originalSize: su, + compression: c_2 + })) { + if (!c_2) + files[fn] = slc(data2, b3, b3 + sc); + else if (c_2 == 8) + files[fn] = inflateSync(data2.subarray(b3, b3 + sc), { out: new u8(su) }); + else + err(14, "unknown compression type " + c_2); + } + } + return files; +} + +// node_modules/three/examples/jsm/exporters/EXRExporter.js +var textEncoder = new TextEncoder(); +var NO_COMPRESSION = 0; +var ZIPS_COMPRESSION = 2; +var ZIP_COMPRESSION = 3; +var EXRExporter = class { + parse(arg1, arg2, arg3) { + if (!arg1 || !(arg1.isWebGLRenderer || arg1.isDataTexture)) { + throw Error("EXRExporter.parse: Unsupported first parameter, expected instance of WebGLRenderer or DataTexture."); + } else if (arg1.isWebGLRenderer) { + const renderer2 = arg1, renderTarget = arg2, options = arg3; + supportedRTT(renderTarget); + const info = buildInfoRTT(renderTarget, options), dataBuffer = getPixelData(renderer2, renderTarget, info), rawContentBuffer = reorganizeDataBuffer(dataBuffer, info), chunks = compressData(rawContentBuffer, info); + return fillData(chunks, info); + } else if (arg1.isDataTexture) { + const texture = arg1, options = arg2; + supportedDT(texture); + const info = buildInfoDT(texture, options), dataBuffer = texture.image.data, rawContentBuffer = reorganizeDataBuffer(dataBuffer, info), chunks = compressData(rawContentBuffer, info); + return fillData(chunks, info); + } + } +}; +function supportedRTT(renderTarget) { + if (!renderTarget || !renderTarget.isWebGLRenderTarget) { + throw Error("EXRExporter.parse: Unsupported second parameter, expected instance of WebGLRenderTarget."); + } + if (renderTarget.isWebGLCubeRenderTarget || renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget) { + throw Error("EXRExporter.parse: Unsupported render target type, expected instance of WebGLRenderTarget."); + } + if (renderTarget.texture.type !== FloatType && renderTarget.texture.type !== HalfFloatType) { + throw Error("EXRExporter.parse: Unsupported WebGLRenderTarget texture type."); + } + if (renderTarget.texture.format !== RGBAFormat) { + throw Error("EXRExporter.parse: Unsupported WebGLRenderTarget texture format, expected RGBAFormat."); + } +} +function supportedDT(texture) { + if (texture.type !== FloatType && texture.type !== HalfFloatType) { + throw Error("EXRExporter.parse: Unsupported DataTexture texture type."); + } + if (texture.format !== RGBAFormat) { + throw Error("EXRExporter.parse: Unsupported DataTexture texture format, expected RGBAFormat."); + } + if (!texture.image.data) { + throw Error("EXRExporter.parse: Invalid DataTexture image data."); + } + if (texture.type === FloatType && texture.image.data.constructor.name !== "Float32Array") { + throw Error("EXRExporter.parse: DataTexture image data doesn't match type, expected 'Float32Array'."); + } + if (texture.type === HalfFloatType && texture.image.data.constructor.name !== "Uint16Array") { + throw Error("EXRExporter.parse: DataTexture image data doesn't match type, expected 'Uint16Array'."); + } +} +function buildInfoRTT(renderTarget, options = {}) { + const compressionSizes = { + 0: 1, + 2: 1, + 3: 16 + }; + const WIDTH = renderTarget.width, HEIGHT = renderTarget.height, TYPE = renderTarget.texture.type, FORMAT = renderTarget.texture.format, COMPRESSION = options.compression !== void 0 ? options.compression : ZIP_COMPRESSION, EXPORTER_TYPE = options.type !== void 0 ? options.type : HalfFloatType, OUT_TYPE = EXPORTER_TYPE === FloatType ? 2 : 1, COMPRESSION_SIZE = compressionSizes[COMPRESSION], NUM_CHANNELS = 4; + return { + width: WIDTH, + height: HEIGHT, + type: TYPE, + format: FORMAT, + compression: COMPRESSION, + blockLines: COMPRESSION_SIZE, + dataType: OUT_TYPE, + dataSize: 2 * OUT_TYPE, + numBlocks: Math.ceil(HEIGHT / COMPRESSION_SIZE), + numInputChannels: 4, + numOutputChannels: NUM_CHANNELS + }; +} +function buildInfoDT(texture, options = {}) { + const compressionSizes = { + 0: 1, + 2: 1, + 3: 16 + }; + const WIDTH = texture.image.width, HEIGHT = texture.image.height, TYPE = texture.type, FORMAT = texture.format, COMPRESSION = options.compression !== void 0 ? options.compression : ZIP_COMPRESSION, EXPORTER_TYPE = options.type !== void 0 ? options.type : HalfFloatType, OUT_TYPE = EXPORTER_TYPE === FloatType ? 2 : 1, COMPRESSION_SIZE = compressionSizes[COMPRESSION], NUM_CHANNELS = 4; + return { + width: WIDTH, + height: HEIGHT, + type: TYPE, + format: FORMAT, + compression: COMPRESSION, + blockLines: COMPRESSION_SIZE, + dataType: OUT_TYPE, + dataSize: 2 * OUT_TYPE, + numBlocks: Math.ceil(HEIGHT / COMPRESSION_SIZE), + numInputChannels: 4, + numOutputChannels: NUM_CHANNELS + }; +} +function getPixelData(renderer2, rtt, info) { + let dataBuffer; + if (info.type === FloatType) { + dataBuffer = new Float32Array(info.width * info.height * info.numInputChannels); + } else { + dataBuffer = new Uint16Array(info.width * info.height * info.numInputChannels); + } + renderer2.readRenderTargetPixels(rtt, 0, 0, info.width, info.height, dataBuffer); + return dataBuffer; +} +function reorganizeDataBuffer(inBuffer, info) { + const w = info.width, h = info.height, dec = { r: 0, g: 0, b: 0, a: 0 }, offset = { value: 0 }, cOffset = info.numOutputChannels == 4 ? 1 : 0, getValue = info.type == FloatType ? getFloat32 : getFloat16, setValue = info.dataType == 1 ? setFloat16 : setFloat32, outBuffer = new Uint8Array(info.width * info.height * info.numOutputChannels * info.dataSize), dv = new DataView(outBuffer.buffer); + for (let y2 = 0; y2 < h; ++y2) { + for (let x2 = 0; x2 < w; ++x2) { + const i = y2 * w * 4 + x2 * 4; + const r = getValue(inBuffer, i); + const g2 = getValue(inBuffer, i + 1); + const b3 = getValue(inBuffer, i + 2); + const a2 = getValue(inBuffer, i + 3); + const line2 = (h - y2 - 1) * w * (3 + cOffset) * info.dataSize; + decodeLinear(dec, r, g2, b3, a2); + offset.value = line2 + x2 * info.dataSize; + setValue(dv, dec.a, offset); + offset.value = line2 + cOffset * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.b, offset); + offset.value = line2 + (1 + cOffset) * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.g, offset); + offset.value = line2 + (2 + cOffset) * w * info.dataSize + x2 * info.dataSize; + setValue(dv, dec.r, offset); + } + } + return outBuffer; +} +function compressData(inBuffer, info) { + let compress, tmpBuffer, sum2 = 0; + const chunks = { data: new Array(), totalSize: 0 }, size2 = info.width * info.numOutputChannels * info.blockLines * info.dataSize; + switch (info.compression) { + case 0: + compress = compressNONE; + break; + case 2: + case 3: + compress = compressZIP; + break; + } + if (info.compression !== 0) { + tmpBuffer = new Uint8Array(size2); + } + for (let i = 0; i < info.numBlocks; ++i) { + const arr = inBuffer.subarray(size2 * i, size2 * (i + 1)); + const block = compress(arr, tmpBuffer); + sum2 += block.length; + chunks.data.push({ dataChunk: block, size: block.length }); + } + chunks.totalSize = sum2; + return chunks; +} +function compressNONE(data2) { + return data2; +} +function compressZIP(data2, tmpBuffer) { + let t1 = 0, t22 = Math.floor((data2.length + 1) / 2), s = 0; + const stop = data2.length - 1; + while (true) { + if (s > stop) break; + tmpBuffer[t1++] = data2[s++]; + if (s > stop) break; + tmpBuffer[t22++] = data2[s++]; + } + let p2 = tmpBuffer[0]; + for (let t3 = 1; t3 < tmpBuffer.length; t3++) { + const d = tmpBuffer[t3] - p2 + (128 + 256); + p2 = tmpBuffer[t3]; + tmpBuffer[t3] = d; + } + const deflate = zlibSync(tmpBuffer); + return deflate; +} +function fillHeader(outBuffer, chunks, info) { + const offset = { value: 0 }; + const dv = new DataView(outBuffer.buffer); + setUint32(dv, 20000630, offset); + setUint32(dv, 2, offset); + setString(dv, "compression", offset); + setString(dv, "compression", offset); + setUint32(dv, 1, offset); + setUint8(dv, info.compression, offset); + setString(dv, "screenWindowCenter", offset); + setString(dv, "v2f", offset); + setUint32(dv, 8, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setString(dv, "screenWindowWidth", offset); + setString(dv, "float", offset); + setUint32(dv, 4, offset); + setFloat32(dv, 1, offset); + setString(dv, "pixelAspectRatio", offset); + setString(dv, "float", offset); + setUint32(dv, 4, offset); + setFloat32(dv, 1, offset); + setString(dv, "lineOrder", offset); + setString(dv, "lineOrder", offset); + setUint32(dv, 1, offset); + setUint8(dv, 0, offset); + setString(dv, "dataWindow", offset); + setString(dv, "box2i", offset); + setUint32(dv, 16, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setUint32(dv, info.width - 1, offset); + setUint32(dv, info.height - 1, offset); + setString(dv, "displayWindow", offset); + setString(dv, "box2i", offset); + setUint32(dv, 16, offset); + setUint32(dv, 0, offset); + setUint32(dv, 0, offset); + setUint32(dv, info.width - 1, offset); + setUint32(dv, info.height - 1, offset); + setString(dv, "channels", offset); + setString(dv, "chlist", offset); + setUint32(dv, info.numOutputChannels * 18 + 1, offset); + setString(dv, "A", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "B", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "G", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setString(dv, "R", offset); + setUint32(dv, info.dataType, offset); + offset.value += 4; + setUint32(dv, 1, offset); + setUint32(dv, 1, offset); + setUint8(dv, 0, offset); + setUint8(dv, 0, offset); + let sum2 = offset.value + info.numBlocks * 8; + for (let i = 0; i < chunks.data.length; ++i) { + setUint64(dv, sum2, offset); + sum2 += chunks.data[i].size + 8; + } +} +function fillData(chunks, info) { + const TableSize = info.numBlocks * 8, HeaderSize = 259 + 18 * info.numOutputChannels, offset = { value: HeaderSize + TableSize }, outBuffer = new Uint8Array(HeaderSize + TableSize + chunks.totalSize + info.numBlocks * 8), dv = new DataView(outBuffer.buffer); + fillHeader(outBuffer, chunks, info); + for (let i = 0; i < chunks.data.length; ++i) { + const data2 = chunks.data[i].dataChunk; + const size2 = chunks.data[i].size; + setUint32(dv, i * info.blockLines, offset); + setUint32(dv, size2, offset); + outBuffer.set(data2, offset.value); + offset.value += size2; + } + return outBuffer; +} +function decodeLinear(dec, r, g2, b3, a2) { + dec.r = r; + dec.g = g2; + dec.b = b3; + dec.a = a2; +} +function setUint8(dv, value2, offset) { + dv.setUint8(offset.value, value2); + offset.value += 1; +} +function setUint32(dv, value2, offset) { + dv.setUint32(offset.value, value2, true); + offset.value += 4; +} +function setFloat16(dv, value2, offset) { + dv.setUint16(offset.value, DataUtils.toHalfFloat(value2), true); + offset.value += 2; +} +function setFloat32(dv, value2, offset) { + dv.setFloat32(offset.value, value2, true); + offset.value += 4; +} +function setUint64(dv, value2, offset) { + dv.setBigUint64(offset.value, BigInt(value2), true); + offset.value += 8; +} +function setString(dv, string, offset) { + const tmp = textEncoder.encode(string + "\0"); + for (let i = 0; i < tmp.length; ++i) { + setUint8(dv, tmp[i], offset); + } +} +function decodeFloat16(binary) { + const exponent = (binary & 31744) >> 10, fraction = binary & 1023; + return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); +} +function getFloat16(arr, i) { + return decodeFloat16(arr[i]); +} +function getFloat32(arr, i) { + return arr[i]; +} + +// node_modules/three/examples/jsm/utils/TextureUtils.js +var _renderer; +var fullscreenQuadGeometry; +var fullscreenQuadMaterial; +var fullscreenQuad; +function decompress(texture, maxTextureSize = Infinity, renderer2 = null) { + if (!fullscreenQuadGeometry) fullscreenQuadGeometry = new PlaneGeometry(2, 2, 1, 1); + if (!fullscreenQuadMaterial) fullscreenQuadMaterial = new ShaderMaterial({ + uniforms: { blitTexture: new Uniform(texture) }, + vertexShader: ` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = vec4(position.xy * 1.0,0.,.999999); + }`, + fragmentShader: ` + uniform sampler2D blitTexture; + varying vec2 vUv; + + void main(){ + gl_FragColor = vec4(vUv.xy, 0, 1); + + #ifdef IS_SRGB + gl_FragColor = sRGBTransferOETF( texture2D( blitTexture, vUv) ); + #else + gl_FragColor = texture2D( blitTexture, vUv); + #endif + }` + }); + fullscreenQuadMaterial.uniforms.blitTexture.value = texture; + fullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace; + fullscreenQuadMaterial.needsUpdate = true; + if (!fullscreenQuad) { + fullscreenQuad = new Mesh(fullscreenQuadGeometry, fullscreenQuadMaterial); + fullscreenQuad.frustumCulled = false; + } + const _camera2 = new PerspectiveCamera(); + const _scene = new Scene(); + _scene.add(fullscreenQuad); + if (renderer2 === null) { + renderer2 = _renderer = new WebGLRenderer({ antialias: false }); + } + const width2 = Math.min(texture.image.width, maxTextureSize); + const height2 = Math.min(texture.image.height, maxTextureSize); + renderer2.setSize(width2, height2); + renderer2.clear(); + renderer2.render(_scene, _camera2); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + canvas.width = width2; + canvas.height = height2; + context.drawImage(renderer2.domElement, 0, 0, width2, height2); + const readableTexture = new CanvasTexture(canvas); + readableTexture.minFilter = texture.minFilter; + readableTexture.magFilter = texture.magFilter; + readableTexture.wrapS = texture.wrapS; + readableTexture.wrapT = texture.wrapT; + readableTexture.name = texture.name; + if (_renderer) { + _renderer.forceContextLoss(); + _renderer.dispose(); + _renderer = null; + } + return readableTexture; +} + +// node_modules/three/examples/jsm/exporters/GLTFExporter.js +var KHR_mesh_quantization_ExtraAttrTypes = { + POSITION: [ + "byte", + "byte normalized", + "unsigned byte", + "unsigned byte normalized", + "short", + "short normalized", + "unsigned short", + "unsigned short normalized" + ], + NORMAL: [ + "byte normalized", + "short normalized" + ], + TANGENT: [ + "byte normalized", + "short normalized" + ], + TEXCOORD: [ + "byte", + "byte normalized", + "unsigned byte", + "short", + "short normalized", + "unsigned short" + ] +}; +var GLTFExporter = class { + constructor() { + this.pluginCallbacks = []; + this.register(function(writer) { + return new GLTFLightExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsUnlitExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsTransmissionExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsVolumeExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsIorExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsSpecularExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsClearcoatExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsDispersionExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsIridescenceExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsSheenExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsAnisotropyExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsEmissiveStrengthExtension(writer); + }); + this.register(function(writer) { + return new GLTFMaterialsBumpExtension(writer); + }); + this.register(function(writer) { + return new GLTFMeshGpuInstancing(writer); + }); + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) { + this.pluginCallbacks.push(callback); + } + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) { + this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + } + return this; + } + /** + * Parse scenes and generate GLTF output + * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes + * @param {Function} onDone Callback on completed + * @param {Function} onError Callback on errors + * @param {Object} options options + */ + parse(input, onDone, onError, options) { + const writer = new GLTFWriter(); + const plugins = []; + for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) { + plugins.push(this.pluginCallbacks[i](writer)); + } + writer.setPlugins(plugins); + writer.write(input, onDone, options).catch(onError); + } + parseAsync(input, options) { + const scope = this; + return new Promise(function(resolve, reject2) { + scope.parse(input, resolve, reject2, options); + }); + } +}; +var WEBGL_CONSTANTS = { + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + BYTE: 5120, + UNSIGNED_BYTE: 5121, + SHORT: 5122, + UNSIGNED_SHORT: 5123, + INT: 5124, + UNSIGNED_INT: 5125, + FLOAT: 5126, + ARRAY_BUFFER: 34962, + ELEMENT_ARRAY_BUFFER: 34963, + NEAREST: 9728, + LINEAR: 9729, + NEAREST_MIPMAP_NEAREST: 9984, + LINEAR_MIPMAP_NEAREST: 9985, + NEAREST_MIPMAP_LINEAR: 9986, + LINEAR_MIPMAP_LINEAR: 9987, + CLAMP_TO_EDGE: 33071, + MIRRORED_REPEAT: 33648, + REPEAT: 10497 +}; +var KHR_MESH_QUANTIZATION = "KHR_mesh_quantization"; +var THREE_TO_WEBGL = {}; +THREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS.NEAREST; +THREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST; +THREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR; +THREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS.LINEAR; +THREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST; +THREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR; +THREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE; +THREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS.REPEAT; +THREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT; +var PATH_PROPERTIES = { + scale: "scale", + position: "translation", + quaternion: "rotation", + morphTargetInfluences: "weights" +}; +var DEFAULT_SPECULAR_COLOR = new Color(); +var GLB_HEADER_BYTES = 12; +var GLB_HEADER_MAGIC = 1179937895; +var GLB_VERSION = 2; +var GLB_CHUNK_PREFIX_BYTES = 8; +var GLB_CHUNK_TYPE_JSON = 1313821514; +var GLB_CHUNK_TYPE_BIN = 5130562; +function equalArray(array1, array2) { + return array1.length === array2.length && array1.every(function(element, index2) { + return element === array2[index2]; + }); +} +function stringToArrayBuffer(text2) { + return new TextEncoder().encode(text2).buffer; +} +function isIdentityMatrix(matrix3) { + return equalArray(matrix3.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]); +} +function getMinMax(attribute, start, count) { + const output = { + min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY), + max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY) + }; + for (let i = start; i < start + count; i++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + let value2; + if (attribute.itemSize > 4) { + value2 = attribute.array[i * attribute.itemSize + a2]; + } else { + if (a2 === 0) value2 = attribute.getX(i); + else if (a2 === 1) value2 = attribute.getY(i); + else if (a2 === 2) value2 = attribute.getZ(i); + else if (a2 === 3) value2 = attribute.getW(i); + if (attribute.normalized === true) { + value2 = MathUtils.normalize(value2, attribute.array); + } + } + output.min[a2] = Math.min(output.min[a2], value2); + output.max[a2] = Math.max(output.max[a2], value2); + } + } + return output; +} +function getPaddedBufferSize(bufferSize) { + return Math.ceil(bufferSize / 4) * 4; +} +function getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) { + const paddedLength = getPaddedBufferSize(arrayBuffer.byteLength); + if (paddedLength !== arrayBuffer.byteLength) { + const array = new Uint8Array(paddedLength); + array.set(new Uint8Array(arrayBuffer)); + if (paddingByte !== 0) { + for (let i = arrayBuffer.byteLength; i < paddedLength; i++) { + array[i] = paddingByte; + } + } + return array.buffer; + } + return arrayBuffer; +} +function getCanvas() { + if (typeof document === "undefined" && typeof OffscreenCanvas !== "undefined") { + return new OffscreenCanvas(1, 1); + } + return document.createElement("canvas"); +} +function getToBlobPromise(canvas, mimeType) { + if (canvas.toBlob !== void 0) { + return new Promise((resolve) => canvas.toBlob(resolve, mimeType)); + } + let quality; + if (mimeType === "image/jpeg") { + quality = 0.92; + } else if (mimeType === "image/webp") { + quality = 0.8; + } + return canvas.convertToBlob({ + type: mimeType, + quality + }); +} +var GLTFWriter = class { + constructor() { + this.plugins = []; + this.options = {}; + this.pending = []; + this.buffers = []; + this.byteOffset = 0; + this.buffers = []; + this.nodeMap = /* @__PURE__ */ new Map(); + this.skins = []; + this.extensionsUsed = {}; + this.extensionsRequired = {}; + this.uids = /* @__PURE__ */ new Map(); + this.uid = 0; + this.json = { + asset: { + version: "2.0", + generator: "THREE.GLTFExporter r" + REVISION + } + }; + this.cache = { + meshes: /* @__PURE__ */ new Map(), + attributes: /* @__PURE__ */ new Map(), + attributesNormalized: /* @__PURE__ */ new Map(), + materials: /* @__PURE__ */ new Map(), + textures: /* @__PURE__ */ new Map(), + images: /* @__PURE__ */ new Map() + }; + } + setPlugins(plugins) { + this.plugins = plugins; + } + /** + * Parse scenes and generate GLTF output + * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes + * @param {Function} onDone Callback on completed + * @param {Object} options options + */ + async write(input, onDone, options = {}) { + this.options = Object.assign({ + // default options + binary: false, + trs: false, + onlyVisible: true, + maxTextureSize: Infinity, + animations: [], + includeCustomExtensions: false + }, options); + if (this.options.animations.length > 0) { + this.options.trs = true; + } + this.processInput(input); + await Promise.all(this.pending); + const writer = this; + const buffers = writer.buffers; + const json = writer.json; + options = writer.options; + const extensionsUsed = writer.extensionsUsed; + const extensionsRequired = writer.extensionsRequired; + const blob = new Blob(buffers, { type: "application/octet-stream" }); + const extensionsUsedList = Object.keys(extensionsUsed); + const extensionsRequiredList = Object.keys(extensionsRequired); + if (extensionsUsedList.length > 0) json.extensionsUsed = extensionsUsedList; + if (extensionsRequiredList.length > 0) json.extensionsRequired = extensionsRequiredList; + if (json.buffers && json.buffers.length > 0) json.buffers[0].byteLength = blob.size; + if (options.binary === true) { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + reader.onloadend = function() { + const binaryChunk = getPaddedArrayBuffer(reader.result); + const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); + binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true); + binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true); + const jsonChunk = getPaddedArrayBuffer(stringToArrayBuffer(JSON.stringify(json)), 32); + const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); + jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true); + jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true); + const header = new ArrayBuffer(GLB_HEADER_BYTES); + const headerView = new DataView(header); + headerView.setUint32(0, GLB_HEADER_MAGIC, true); + headerView.setUint32(4, GLB_VERSION, true); + const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength; + headerView.setUint32(8, totalByteLength, true); + const glbBlob = new Blob([ + header, + jsonChunkPrefix, + jsonChunk, + binaryChunkPrefix, + binaryChunk + ], { type: "application/octet-stream" }); + const glbReader = new FileReader(); + glbReader.readAsArrayBuffer(glbBlob); + glbReader.onloadend = function() { + onDone(glbReader.result); + }; + }; + } else { + if (json.buffers && json.buffers.length > 0) { + const reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onloadend = function() { + const base64data = reader.result; + json.buffers[0].uri = base64data; + onDone(json); + }; + } else { + onDone(json); + } + } + } + /** + * Serializes a userData. + * + * @param {THREE.Object3D|THREE.Material} object + * @param {Object} objectDef + */ + serializeUserData(object, objectDef) { + if (Object.keys(object.userData).length === 0) return; + const options = this.options; + const extensionsUsed = this.extensionsUsed; + try { + const json = JSON.parse(JSON.stringify(object.userData)); + if (options.includeCustomExtensions && json.gltfExtensions) { + if (objectDef.extensions === void 0) objectDef.extensions = {}; + for (const extensionName in json.gltfExtensions) { + objectDef.extensions[extensionName] = json.gltfExtensions[extensionName]; + extensionsUsed[extensionName] = true; + } + delete json.gltfExtensions; + } + if (Object.keys(json).length > 0) objectDef.extras = json; + } catch (error) { + console.warn("THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message); + } + } + /** + * Returns ids for buffer attributes. + * @param {Object} object + * @return {Integer} + */ + getUID(attribute, isRelativeCopy = false) { + if (this.uids.has(attribute) === false) { + const uids2 = /* @__PURE__ */ new Map(); + uids2.set(true, this.uid++); + uids2.set(false, this.uid++); + this.uids.set(attribute, uids2); + } + const uids = this.uids.get(attribute); + return uids.get(isRelativeCopy); + } + /** + * Checks if normal attribute values are normalized. + * + * @param {BufferAttribute} normal + * @returns {Boolean} + */ + isNormalizedNormalAttribute(normal) { + const cache = this.cache; + if (cache.attributesNormalized.has(normal)) return false; + const v = new Vector3(); + for (let i = 0, il = normal.count; i < il; i++) { + if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4) return false; + } + return true; + } + /** + * Creates normalized normal buffer attribute. + * + * @param {BufferAttribute} normal + * @returns {BufferAttribute} + * + */ + createNormalizedNormalAttribute(normal) { + const cache = this.cache; + if (cache.attributesNormalized.has(normal)) return cache.attributesNormalized.get(normal); + const attribute = normal.clone(); + const v = new Vector3(); + for (let i = 0, il = attribute.count; i < il; i++) { + v.fromBufferAttribute(attribute, i); + if (v.x === 0 && v.y === 0 && v.z === 0) { + v.setX(1); + } else { + v.normalize(); + } + attribute.setXYZ(i, v.x, v.y, v.z); + } + cache.attributesNormalized.set(normal, attribute); + return attribute; + } + /** + * Applies a texture transform, if present, to the map definition. Requires + * the KHR_texture_transform extension. + * + * @param {Object} mapDef + * @param {THREE.Texture} texture + */ + applyTextureTransform(mapDef, texture) { + let didTransform = false; + const transformDef = {}; + if (texture.offset.x !== 0 || texture.offset.y !== 0) { + transformDef.offset = texture.offset.toArray(); + didTransform = true; + } + if (texture.rotation !== 0) { + transformDef.rotation = texture.rotation; + didTransform = true; + } + if (texture.repeat.x !== 1 || texture.repeat.y !== 1) { + transformDef.scale = texture.repeat.toArray(); + didTransform = true; + } + if (didTransform) { + mapDef.extensions = mapDef.extensions || {}; + mapDef.extensions["KHR_texture_transform"] = transformDef; + this.extensionsUsed["KHR_texture_transform"] = true; + } + } + buildMetalRoughTexture(metalnessMap, roughnessMap) { + if (metalnessMap === roughnessMap) return metalnessMap; + function getEncodingConversion(map2) { + if (map2.colorSpace === SRGBColorSpace) { + return function SRGBToLinear(c2) { + return c2 < 0.04045 ? c2 * 0.0773993808 : Math.pow(c2 * 0.9478672986 + 0.0521327014, 2.4); + }; + } + return function LinearToLinear(c2) { + return c2; + }; + } + console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."); + if (metalnessMap instanceof CompressedTexture) { + metalnessMap = decompress(metalnessMap); + } + if (roughnessMap instanceof CompressedTexture) { + roughnessMap = decompress(roughnessMap); + } + const metalness = metalnessMap ? metalnessMap.image : null; + const roughness = roughnessMap ? roughnessMap.image : null; + const width2 = Math.max(metalness ? metalness.width : 0, roughness ? roughness.width : 0); + const height2 = Math.max(metalness ? metalness.height : 0, roughness ? roughness.height : 0); + const canvas = getCanvas(); + canvas.width = width2; + canvas.height = height2; + const context = canvas.getContext("2d", { + willReadFrequently: true + }); + context.fillStyle = "#00ffff"; + context.fillRect(0, 0, width2, height2); + const composite = context.getImageData(0, 0, width2, height2); + if (metalness) { + context.drawImage(metalness, 0, 0, width2, height2); + const convert = getEncodingConversion(metalnessMap); + const data2 = context.getImageData(0, 0, width2, height2).data; + for (let i = 2; i < data2.length; i += 4) { + composite.data[i] = convert(data2[i] / 256) * 256; + } + } + if (roughness) { + context.drawImage(roughness, 0, 0, width2, height2); + const convert = getEncodingConversion(roughnessMap); + const data2 = context.getImageData(0, 0, width2, height2).data; + for (let i = 1; i < data2.length; i += 4) { + composite.data[i] = convert(data2[i] / 256) * 256; + } + } + context.putImageData(composite, 0, 0); + const reference = metalnessMap || roughnessMap; + const texture = reference.clone(); + texture.source = new Source(canvas); + texture.colorSpace = NoColorSpace; + texture.channel = (metalnessMap || roughnessMap).channel; + if (metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel) { + console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."); + } + return texture; + } + /** + * Process a buffer to append to the default one. + * @param {ArrayBuffer} buffer + * @return {Integer} + */ + processBuffer(buffer) { + const json = this.json; + const buffers = this.buffers; + if (!json.buffers) json.buffers = [{ byteLength: 0 }]; + buffers.push(buffer); + return 0; + } + /** + * Process and generate a BufferView + * @param {BufferAttribute} attribute + * @param {number} componentType + * @param {number} start + * @param {number} count + * @param {number} target (Optional) Target usage of the BufferView + * @return {Object} + */ + processBufferView(attribute, componentType, start, count, target) { + const json = this.json; + if (!json.bufferViews) json.bufferViews = []; + let componentSize; + switch (componentType) { + case WEBGL_CONSTANTS.BYTE: + case WEBGL_CONSTANTS.UNSIGNED_BYTE: + componentSize = 1; + break; + case WEBGL_CONSTANTS.SHORT: + case WEBGL_CONSTANTS.UNSIGNED_SHORT: + componentSize = 2; + break; + default: + componentSize = 4; + } + let byteStride = attribute.itemSize * componentSize; + if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) { + byteStride = Math.ceil(byteStride / 4) * 4; + } + const byteLength = getPaddedBufferSize(count * byteStride); + const dataView = new DataView(new ArrayBuffer(byteLength)); + let offset = 0; + for (let i = start; i < start + count; i++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + let value2; + if (attribute.itemSize > 4) { + value2 = attribute.array[i * attribute.itemSize + a2]; + } else { + if (a2 === 0) value2 = attribute.getX(i); + else if (a2 === 1) value2 = attribute.getY(i); + else if (a2 === 2) value2 = attribute.getZ(i); + else if (a2 === 3) value2 = attribute.getW(i); + if (attribute.normalized === true) { + value2 = MathUtils.normalize(value2, attribute.array); + } + } + if (componentType === WEBGL_CONSTANTS.FLOAT) { + dataView.setFloat32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.INT) { + dataView.setInt32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) { + dataView.setUint32(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.SHORT) { + dataView.setInt16(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) { + dataView.setUint16(offset, value2, true); + } else if (componentType === WEBGL_CONSTANTS.BYTE) { + dataView.setInt8(offset, value2); + } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) { + dataView.setUint8(offset, value2); + } + offset += componentSize; + } + if (offset % byteStride !== 0) { + offset += byteStride - offset % byteStride; + } + } + const bufferViewDef = { + buffer: this.processBuffer(dataView.buffer), + byteOffset: this.byteOffset, + byteLength + }; + if (target !== void 0) bufferViewDef.target = target; + if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) { + bufferViewDef.byteStride = byteStride; + } + this.byteOffset += byteLength; + json.bufferViews.push(bufferViewDef); + const output = { + id: json.bufferViews.length - 1, + byteLength: 0 + }; + return output; + } + /** + * Process and generate a BufferView from an image Blob. + * @param {Blob} blob + * @return {Promise} + */ + processBufferViewImage(blob) { + const writer = this; + const json = writer.json; + if (!json.bufferViews) json.bufferViews = []; + return new Promise(function(resolve) { + const reader = new FileReader(); + reader.readAsArrayBuffer(blob); + reader.onloadend = function() { + const buffer = getPaddedArrayBuffer(reader.result); + const bufferViewDef = { + buffer: writer.processBuffer(buffer), + byteOffset: writer.byteOffset, + byteLength: buffer.byteLength + }; + writer.byteOffset += buffer.byteLength; + resolve(json.bufferViews.push(bufferViewDef) - 1); + }; + }); + } + /** + * Process attribute to generate an accessor + * @param {BufferAttribute} attribute Attribute to process + * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range + * @param {Integer} start (Optional) + * @param {Integer} count (Optional) + * @return {Integer|null} Index of the processed accessor on the "accessors" array + */ + processAccessor(attribute, geometry, start, count) { + const json = this.json; + const types = { + 1: "SCALAR", + 2: "VEC2", + 3: "VEC3", + 4: "VEC4", + 9: "MAT3", + 16: "MAT4" + }; + let componentType; + if (attribute.array.constructor === Float32Array) { + componentType = WEBGL_CONSTANTS.FLOAT; + } else if (attribute.array.constructor === Int32Array) { + componentType = WEBGL_CONSTANTS.INT; + } else if (attribute.array.constructor === Uint32Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_INT; + } else if (attribute.array.constructor === Int16Array) { + componentType = WEBGL_CONSTANTS.SHORT; + } else if (attribute.array.constructor === Uint16Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT; + } else if (attribute.array.constructor === Int8Array) { + componentType = WEBGL_CONSTANTS.BYTE; + } else if (attribute.array.constructor === Uint8Array) { + componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE; + } else { + throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: " + attribute.array.constructor.name); + } + if (start === void 0) start = 0; + if (count === void 0 || count === Infinity) count = attribute.count; + if (count === 0) return null; + const minMax = getMinMax(attribute, start, count); + let bufferViewTarget; + if (geometry !== void 0) { + bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER; + } + const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget); + const accessorDef = { + bufferView: bufferView.id, + byteOffset: bufferView.byteOffset, + componentType, + count, + max: minMax.max, + min: minMax.min, + type: types[attribute.itemSize] + }; + if (attribute.normalized === true) accessorDef.normalized = true; + if (!json.accessors) json.accessors = []; + return json.accessors.push(accessorDef) - 1; + } + /** + * Process image + * @param {Image} image to process + * @param {Integer} format of the image (RGBAFormat) + * @param {Boolean} flipY before writing out the image + * @param {String} mimeType export format + * @return {Integer} Index of the processed texture in the "images" array + */ + processImage(image, format, flipY, mimeType = "image/png") { + if (image !== null) { + const writer = this; + const cache = writer.cache; + const json = writer.json; + const options = writer.options; + const pending = writer.pending; + if (!cache.images.has(image)) cache.images.set(image, {}); + const cachedImages = cache.images.get(image); + const key2 = mimeType + ":flipY/" + flipY.toString(); + if (cachedImages[key2] !== void 0) return cachedImages[key2]; + if (!json.images) json.images = []; + const imageDef = { mimeType }; + const canvas = getCanvas(); + canvas.width = Math.min(image.width, options.maxTextureSize); + canvas.height = Math.min(image.height, options.maxTextureSize); + const ctx = canvas.getContext("2d", { + willReadFrequently: true + }); + if (flipY === true) { + ctx.translate(0, canvas.height); + ctx.scale(1, -1); + } + if (image.data !== void 0) { + if (format !== RGBAFormat) { + console.error("GLTFExporter: Only RGBAFormat is supported.", format); + } + if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) { + console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image); + } + const data2 = new Uint8ClampedArray(image.height * image.width * 4); + for (let i = 0; i < data2.length; i += 4) { + data2[i + 0] = image.data[i + 0]; + data2[i + 1] = image.data[i + 1]; + data2[i + 2] = image.data[i + 2]; + data2[i + 3] = image.data[i + 3]; + } + ctx.putImageData(new ImageData(data2, image.width, image.height), 0, 0); + } else { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas) { + ctx.drawImage(image, 0, 0, canvas.width, canvas.height); + } else { + throw new Error("THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas."); + } + } + if (options.binary === true) { + pending.push( + getToBlobPromise(canvas, mimeType).then((blob) => writer.processBufferViewImage(blob)).then((bufferViewIndex) => { + imageDef.bufferView = bufferViewIndex; + }) + ); + } else { + if (canvas.toDataURL !== void 0) { + imageDef.uri = canvas.toDataURL(mimeType); + } else { + pending.push( + getToBlobPromise(canvas, mimeType).then((blob) => new FileReader().readAsDataURL(blob)).then((dataURL) => { + imageDef.uri = dataURL; + }) + ); + } + } + const index2 = json.images.push(imageDef) - 1; + cachedImages[key2] = index2; + return index2; + } else { + throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture."); + } + } + /** + * Process sampler + * @param {Texture} map Texture to process + * @return {Integer} Index of the processed texture in the "samplers" array + */ + processSampler(map2) { + const json = this.json; + if (!json.samplers) json.samplers = []; + const samplerDef = { + magFilter: THREE_TO_WEBGL[map2.magFilter], + minFilter: THREE_TO_WEBGL[map2.minFilter], + wrapS: THREE_TO_WEBGL[map2.wrapS], + wrapT: THREE_TO_WEBGL[map2.wrapT] + }; + return json.samplers.push(samplerDef) - 1; + } + /** + * Process texture + * @param {Texture} map Map to process + * @return {Integer} Index of the processed texture in the "textures" array + */ + processTexture(map2) { + const writer = this; + const options = writer.options; + const cache = this.cache; + const json = this.json; + if (cache.textures.has(map2)) return cache.textures.get(map2); + if (!json.textures) json.textures = []; + if (map2 instanceof CompressedTexture) { + map2 = decompress(map2, options.maxTextureSize); + } + let mimeType = map2.userData.mimeType; + if (mimeType === "image/webp") mimeType = "image/png"; + const textureDef = { + sampler: this.processSampler(map2), + source: this.processImage(map2.image, map2.format, map2.flipY, mimeType) + }; + if (map2.name) textureDef.name = map2.name; + this._invokeAll(function(ext) { + ext.writeTexture && ext.writeTexture(map2, textureDef); + }); + const index2 = json.textures.push(textureDef) - 1; + cache.textures.set(map2, index2); + return index2; + } + /** + * Process material + * @param {THREE.Material} material Material to process + * @return {Integer|null} Index of the processed material in the "materials" array + */ + processMaterial(material) { + const cache = this.cache; + const json = this.json; + if (cache.materials.has(material)) return cache.materials.get(material); + if (material.isShaderMaterial) { + console.warn("GLTFExporter: THREE.ShaderMaterial not supported."); + return null; + } + if (!json.materials) json.materials = []; + const materialDef = { pbrMetallicRoughness: {} }; + if (material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true) { + console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results."); + } + const color = material.color.toArray().concat([material.opacity]); + if (!equalArray(color, [1, 1, 1, 1])) { + materialDef.pbrMetallicRoughness.baseColorFactor = color; + } + if (material.isMeshStandardMaterial) { + materialDef.pbrMetallicRoughness.metallicFactor = material.metalness; + materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness; + } else { + materialDef.pbrMetallicRoughness.metallicFactor = 0.5; + materialDef.pbrMetallicRoughness.roughnessFactor = 0.5; + } + if (material.metalnessMap || material.roughnessMap) { + const metalRoughTexture = this.buildMetalRoughTexture(material.metalnessMap, material.roughnessMap); + const metalRoughMapDef = { + index: this.processTexture(metalRoughTexture), + channel: metalRoughTexture.channel + }; + this.applyTextureTransform(metalRoughMapDef, metalRoughTexture); + materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef; + } + if (material.map) { + const baseColorMapDef = { + index: this.processTexture(material.map), + texCoord: material.map.channel + }; + this.applyTextureTransform(baseColorMapDef, material.map); + materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef; + } + if (material.emissive) { + const emissive = material.emissive; + const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b); + if (maxEmissiveComponent > 0) { + materialDef.emissiveFactor = material.emissive.toArray(); + } + if (material.emissiveMap) { + const emissiveMapDef = { + index: this.processTexture(material.emissiveMap), + texCoord: material.emissiveMap.channel + }; + this.applyTextureTransform(emissiveMapDef, material.emissiveMap); + materialDef.emissiveTexture = emissiveMapDef; + } + } + if (material.normalMap) { + const normalMapDef = { + index: this.processTexture(material.normalMap), + texCoord: material.normalMap.channel + }; + if (material.normalScale && material.normalScale.x !== 1) { + normalMapDef.scale = material.normalScale.x; + } + this.applyTextureTransform(normalMapDef, material.normalMap); + materialDef.normalTexture = normalMapDef; + } + if (material.aoMap) { + const occlusionMapDef = { + index: this.processTexture(material.aoMap), + texCoord: material.aoMap.channel + }; + if (material.aoMapIntensity !== 1) { + occlusionMapDef.strength = material.aoMapIntensity; + } + this.applyTextureTransform(occlusionMapDef, material.aoMap); + materialDef.occlusionTexture = occlusionMapDef; + } + if (material.transparent) { + materialDef.alphaMode = "BLEND"; + } else { + if (material.alphaTest > 0) { + materialDef.alphaMode = "MASK"; + materialDef.alphaCutoff = material.alphaTest; + } + } + if (material.side === DoubleSide) materialDef.doubleSided = true; + if (material.name !== "") materialDef.name = material.name; + this.serializeUserData(material, materialDef); + this._invokeAll(function(ext) { + ext.writeMaterial && ext.writeMaterial(material, materialDef); + }); + const index2 = json.materials.push(materialDef) - 1; + cache.materials.set(material, index2); + return index2; + } + /** + * Process mesh + * @param {THREE.Mesh} mesh Mesh to process + * @return {Integer|null} Index of the processed mesh in the "meshes" array + */ + processMesh(mesh) { + const cache = this.cache; + const json = this.json; + const meshCacheKeyParts = [mesh.geometry.uuid]; + if (Array.isArray(mesh.material)) { + for (let i = 0, l2 = mesh.material.length; i < l2; i++) { + meshCacheKeyParts.push(mesh.material[i].uuid); + } + } else { + meshCacheKeyParts.push(mesh.material.uuid); + } + const meshCacheKey = meshCacheKeyParts.join(":"); + if (cache.meshes.has(meshCacheKey)) return cache.meshes.get(meshCacheKey); + const geometry = mesh.geometry; + let mode; + if (mesh.isLineSegments) { + mode = WEBGL_CONSTANTS.LINES; + } else if (mesh.isLineLoop) { + mode = WEBGL_CONSTANTS.LINE_LOOP; + } else if (mesh.isLine) { + mode = WEBGL_CONSTANTS.LINE_STRIP; + } else if (mesh.isPoints) { + mode = WEBGL_CONSTANTS.POINTS; + } else { + mode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES; + } + const meshDef = {}; + const attributes = {}; + const primitives = []; + const targets = []; + const nameConversion = { + uv: "TEXCOORD_0", + uv1: "TEXCOORD_1", + uv2: "TEXCOORD_2", + uv3: "TEXCOORD_3", + color: "COLOR_0", + skinWeight: "WEIGHTS_0", + skinIndex: "JOINTS_0" + }; + const originalNormal = geometry.getAttribute("normal"); + if (originalNormal !== void 0 && !this.isNormalizedNormalAttribute(originalNormal)) { + console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."); + geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal)); + } + let modifiedAttribute = null; + for (let attributeName in geometry.attributes) { + if (attributeName.slice(0, 5) === "morph") continue; + const attribute = geometry.attributes[attributeName]; + attributeName = nameConversion[attributeName] || attributeName.toUpperCase(); + const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/; + if (!validVertexAttributes.test(attributeName)) attributeName = "_" + attributeName; + if (cache.attributes.has(this.getUID(attribute))) { + attributes[attributeName] = cache.attributes.get(this.getUID(attribute)); + continue; + } + modifiedAttribute = null; + const array = attribute.array; + if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) { + console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.'); + modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized); + } + const accessor = this.processAccessor(modifiedAttribute || attribute, geometry); + if (accessor !== null) { + if (!attributeName.startsWith("_")) { + this.detectMeshQuantization(attributeName, attribute); + } + attributes[attributeName] = accessor; + cache.attributes.set(this.getUID(attribute), accessor); + } + } + if (originalNormal !== void 0) geometry.setAttribute("normal", originalNormal); + if (Object.keys(attributes).length === 0) return null; + if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) { + const weights = []; + const targetNames = []; + const reverseDictionary = {}; + if (mesh.morphTargetDictionary !== void 0) { + for (const key2 in mesh.morphTargetDictionary) { + reverseDictionary[mesh.morphTargetDictionary[key2]] = key2; + } + } + for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) { + const target = {}; + let warned = false; + for (const attributeName in geometry.morphAttributes) { + if (attributeName !== "position" && attributeName !== "normal") { + if (!warned) { + console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."); + warned = true; + } + continue; + } + const attribute = geometry.morphAttributes[attributeName][i]; + const gltfAttributeName = attributeName.toUpperCase(); + const baseAttribute = geometry.attributes[attributeName]; + if (cache.attributes.has(this.getUID(attribute, true))) { + target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute, true)); + continue; + } + const relativeAttribute = attribute.clone(); + if (!geometry.morphTargetsRelative) { + for (let j = 0, jl = attribute.count; j < jl; j++) { + for (let a2 = 0; a2 < attribute.itemSize; a2++) { + if (a2 === 0) relativeAttribute.setX(j, attribute.getX(j) - baseAttribute.getX(j)); + if (a2 === 1) relativeAttribute.setY(j, attribute.getY(j) - baseAttribute.getY(j)); + if (a2 === 2) relativeAttribute.setZ(j, attribute.getZ(j) - baseAttribute.getZ(j)); + if (a2 === 3) relativeAttribute.setW(j, attribute.getW(j) - baseAttribute.getW(j)); + } + } + } + target[gltfAttributeName] = this.processAccessor(relativeAttribute, geometry); + cache.attributes.set(this.getUID(baseAttribute, true), target[gltfAttributeName]); + } + targets.push(target); + weights.push(mesh.morphTargetInfluences[i]); + if (mesh.morphTargetDictionary !== void 0) targetNames.push(reverseDictionary[i]); + } + meshDef.weights = weights; + if (targetNames.length > 0) { + meshDef.extras = {}; + meshDef.extras.targetNames = targetNames; + } + } + const isMultiMaterial = Array.isArray(mesh.material); + if (isMultiMaterial && geometry.groups.length === 0) return null; + let didForceIndices = false; + if (isMultiMaterial && geometry.index === null) { + const indices = []; + for (let i = 0, il = geometry.attributes.position.count; i < il; i++) { + indices[i] = i; + } + geometry.setIndex(indices); + didForceIndices = true; + } + const materials = isMultiMaterial ? mesh.material : [mesh.material]; + const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }]; + for (let i = 0, il = groups.length; i < il; i++) { + const primitive = { + mode, + attributes + }; + this.serializeUserData(geometry, primitive); + if (targets.length > 0) primitive.targets = targets; + if (geometry.index !== null) { + let cacheKey = this.getUID(geometry.index); + if (groups[i].start !== void 0 || groups[i].count !== void 0) { + cacheKey += ":" + groups[i].start + ":" + groups[i].count; + } + if (cache.attributes.has(cacheKey)) { + primitive.indices = cache.attributes.get(cacheKey); + } else { + primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count); + cache.attributes.set(cacheKey, primitive.indices); + } + if (primitive.indices === null) delete primitive.indices; + } + const material = this.processMaterial(materials[groups[i].materialIndex]); + if (material !== null) primitive.material = material; + primitives.push(primitive); + } + if (didForceIndices === true) { + geometry.setIndex(null); + } + meshDef.primitives = primitives; + if (!json.meshes) json.meshes = []; + this._invokeAll(function(ext) { + ext.writeMesh && ext.writeMesh(mesh, meshDef); + }); + const index2 = json.meshes.push(meshDef) - 1; + cache.meshes.set(meshCacheKey, index2); + return index2; + } + /** + * If a vertex attribute with a + * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview) + * is used, it is checked whether it is a valid data type according to the + * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md) + * extension. + * In this case the extension is automatically added to the list of used extensions. + * + * @param {string} attributeName + * @param {THREE.BufferAttribute} attribute + */ + detectMeshQuantization(attributeName, attribute) { + if (this.extensionsUsed[KHR_MESH_QUANTIZATION]) return; + let attrType = void 0; + switch (attribute.array.constructor) { + case Int8Array: + attrType = "byte"; + break; + case Uint8Array: + attrType = "unsigned byte"; + break; + case Int16Array: + attrType = "short"; + break; + case Uint16Array: + attrType = "unsigned short"; + break; + default: + return; + } + if (attribute.normalized) attrType += " normalized"; + const attrNamePrefix = attributeName.split("_", 1)[0]; + if (KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix] && KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix].includes(attrType)) { + this.extensionsUsed[KHR_MESH_QUANTIZATION] = true; + this.extensionsRequired[KHR_MESH_QUANTIZATION] = true; + } + } + /** + * Process camera + * @param {THREE.Camera} camera Camera to process + * @return {Integer} Index of the processed mesh in the "camera" array + */ + processCamera(camera) { + const json = this.json; + if (!json.cameras) json.cameras = []; + const isOrtho = camera.isOrthographicCamera; + const cameraDef = { + type: isOrtho ? "orthographic" : "perspective" + }; + if (isOrtho) { + cameraDef.orthographic = { + xmag: camera.right * 2, + ymag: camera.top * 2, + zfar: camera.far <= 0 ? 1e-3 : camera.far, + znear: camera.near < 0 ? 0 : camera.near + }; + } else { + cameraDef.perspective = { + aspectRatio: camera.aspect, + yfov: MathUtils.degToRad(camera.fov), + zfar: camera.far <= 0 ? 1e-3 : camera.far, + znear: camera.near < 0 ? 0 : camera.near + }; + } + if (camera.name !== "") cameraDef.name = camera.type; + return json.cameras.push(cameraDef) - 1; + } + /** + * Creates glTF animation entry from AnimationClip object. + * + * Status: + * - Only properties listed in PATH_PROPERTIES may be animated. + * + * @param {THREE.AnimationClip} clip + * @param {THREE.Object3D} root + * @return {number|null} + */ + processAnimation(clip, root) { + const json = this.json; + const nodeMap = this.nodeMap; + if (!json.animations) json.animations = []; + clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root); + const tracks = clip.tracks; + const channels = []; + const samplers = []; + for (let i = 0; i < tracks.length; ++i) { + const track = tracks[i]; + const trackBinding = PropertyBinding.parseTrackName(track.name); + let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName); + const trackProperty = PATH_PROPERTIES[trackBinding.propertyName]; + if (trackBinding.objectName === "bones") { + if (trackNode.isSkinnedMesh === true) { + trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex); + } else { + trackNode = void 0; + } + } + if (!trackNode || !trackProperty) { + console.warn('THREE.GLTFExporter: Could not export animation track "%s".', track.name); + continue; + } + const inputItemSize = 1; + let outputItemSize = track.values.length / track.times.length; + if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) { + outputItemSize /= trackNode.morphTargetInfluences.length; + } + let interpolation; + if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) { + interpolation = "CUBICSPLINE"; + outputItemSize /= 3; + } else if (track.getInterpolation() === InterpolateDiscrete) { + interpolation = "STEP"; + } else { + interpolation = "LINEAR"; + } + samplers.push({ + input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)), + output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)), + interpolation + }); + channels.push({ + sampler: samplers.length - 1, + target: { + node: nodeMap.get(trackNode), + path: trackProperty + } + }); + } + json.animations.push({ + name: clip.name || "clip_" + json.animations.length, + samplers, + channels + }); + return json.animations.length - 1; + } + /** + * @param {THREE.Object3D} object + * @return {number|null} + */ + processSkin(object) { + const json = this.json; + const nodeMap = this.nodeMap; + const node = json.nodes[nodeMap.get(object)]; + const skeleton = object.skeleton; + if (skeleton === void 0) return null; + const rootJoint = object.skeleton.bones[0]; + if (rootJoint === void 0) return null; + const joints = []; + const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16); + const temporaryBoneInverse = new Matrix4(); + for (let i = 0; i < skeleton.bones.length; ++i) { + joints.push(nodeMap.get(skeleton.bones[i])); + temporaryBoneInverse.copy(skeleton.boneInverses[i]); + temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16); + } + if (json.skins === void 0) json.skins = []; + json.skins.push({ + inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)), + joints, + skeleton: nodeMap.get(rootJoint) + }); + const skinIndex = node.skin = json.skins.length - 1; + return skinIndex; + } + /** + * Process Object3D node + * @param {THREE.Object3D} node Object3D to processNode + * @return {Integer} Index of the node in the nodes list + */ + processNode(object) { + const json = this.json; + const options = this.options; + const nodeMap = this.nodeMap; + if (!json.nodes) json.nodes = []; + const nodeDef = {}; + if (options.trs) { + const rotation2 = object.quaternion.toArray(); + const position2 = object.position.toArray(); + const scale2 = object.scale.toArray(); + if (!equalArray(rotation2, [0, 0, 0, 1])) { + nodeDef.rotation = rotation2; + } + if (!equalArray(position2, [0, 0, 0])) { + nodeDef.translation = position2; + } + if (!equalArray(scale2, [1, 1, 1])) { + nodeDef.scale = scale2; + } + } else { + if (object.matrixAutoUpdate) { + object.updateMatrix(); + } + if (isIdentityMatrix(object.matrix) === false) { + nodeDef.matrix = object.matrix.elements; + } + } + if (object.name !== "") nodeDef.name = String(object.name); + this.serializeUserData(object, nodeDef); + if (object.isMesh || object.isLine || object.isPoints) { + const meshIndex = this.processMesh(object); + if (meshIndex !== null) nodeDef.mesh = meshIndex; + } else if (object.isCamera) { + nodeDef.camera = this.processCamera(object); + } + if (object.isSkinnedMesh) this.skins.push(object); + if (object.children.length > 0) { + const children = []; + for (let i = 0, l2 = object.children.length; i < l2; i++) { + const child = object.children[i]; + if (child.visible || options.onlyVisible === false) { + const nodeIndex2 = this.processNode(child); + if (nodeIndex2 !== null) children.push(nodeIndex2); + } + } + if (children.length > 0) nodeDef.children = children; + } + this._invokeAll(function(ext) { + ext.writeNode && ext.writeNode(object, nodeDef); + }); + const nodeIndex = json.nodes.push(nodeDef) - 1; + nodeMap.set(object, nodeIndex); + return nodeIndex; + } + /** + * Process Scene + * @param {Scene} node Scene to process + */ + processScene(scene) { + const json = this.json; + const options = this.options; + if (!json.scenes) { + json.scenes = []; + json.scene = 0; + } + const sceneDef = {}; + if (scene.name !== "") sceneDef.name = scene.name; + json.scenes.push(sceneDef); + const nodes = []; + for (let i = 0, l2 = scene.children.length; i < l2; i++) { + const child = scene.children[i]; + if (child.visible || options.onlyVisible === false) { + const nodeIndex = this.processNode(child); + if (nodeIndex !== null) nodes.push(nodeIndex); + } + } + if (nodes.length > 0) sceneDef.nodes = nodes; + this.serializeUserData(scene, sceneDef); + } + /** + * Creates a Scene to hold a list of objects and parse it + * @param {Array} objects List of objects to process + */ + processObjects(objects) { + const scene = new Scene(); + scene.name = "AuxScene"; + for (let i = 0; i < objects.length; i++) { + scene.children.push(objects[i]); + } + this.processScene(scene); + } + /** + * @param {THREE.Object3D|Array} input + */ + processInput(input) { + const options = this.options; + input = input instanceof Array ? input : [input]; + this._invokeAll(function(ext) { + ext.beforeParse && ext.beforeParse(input); + }); + const objectsWithoutScene = []; + for (let i = 0; i < input.length; i++) { + if (input[i] instanceof Scene) { + this.processScene(input[i]); + } else { + objectsWithoutScene.push(input[i]); + } + } + if (objectsWithoutScene.length > 0) this.processObjects(objectsWithoutScene); + for (let i = 0; i < this.skins.length; ++i) { + this.processSkin(this.skins[i]); + } + for (let i = 0; i < options.animations.length; ++i) { + this.processAnimation(options.animations[i], input[0]); + } + this._invokeAll(function(ext) { + ext.afterParse && ext.afterParse(input); + }); + } + _invokeAll(func) { + for (let i = 0, il = this.plugins.length; i < il; i++) { + func(this.plugins[i]); + } + } +}; +var GLTFLightExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_lights_punctual"; + } + writeNode(light, nodeDef) { + if (!light.isLight) return; + if (!light.isDirectionalLight && !light.isPointLight && !light.isSpotLight) { + console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light); + return; + } + const writer = this.writer; + const json = writer.json; + const extensionsUsed = writer.extensionsUsed; + const lightDef = {}; + if (light.name) lightDef.name = light.name; + lightDef.color = light.color.toArray(); + lightDef.intensity = light.intensity; + if (light.isDirectionalLight) { + lightDef.type = "directional"; + } else if (light.isPointLight) { + lightDef.type = "point"; + if (light.distance > 0) lightDef.range = light.distance; + } else if (light.isSpotLight) { + lightDef.type = "spot"; + if (light.distance > 0) lightDef.range = light.distance; + lightDef.spot = {}; + lightDef.spot.innerConeAngle = (1 - light.penumbra) * light.angle; + lightDef.spot.outerConeAngle = light.angle; + } + if (light.decay !== void 0 && light.decay !== 2) { + console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."); + } + if (light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) { + console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."); + } + if (!extensionsUsed[this.name]) { + json.extensions = json.extensions || {}; + json.extensions[this.name] = { lights: [] }; + extensionsUsed[this.name] = true; + } + const lights = json.extensions[this.name].lights; + lights.push(lightDef); + nodeDef.extensions = nodeDef.extensions || {}; + nodeDef.extensions[this.name] = { light: lights.length - 1 }; + } +}; +var GLTFMaterialsUnlitExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_unlit"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshBasicMaterial) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = {}; + extensionsUsed[this.name] = true; + materialDef.pbrMetallicRoughness.metallicFactor = 0; + materialDef.pbrMetallicRoughness.roughnessFactor = 0.9; + } +}; +var GLTFMaterialsClearcoatExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_clearcoat"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.clearcoat === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.clearcoatFactor = material.clearcoat; + if (material.clearcoatMap) { + const clearcoatMapDef = { + index: writer.processTexture(material.clearcoatMap), + texCoord: material.clearcoatMap.channel + }; + writer.applyTextureTransform(clearcoatMapDef, material.clearcoatMap); + extensionDef.clearcoatTexture = clearcoatMapDef; + } + extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness; + if (material.clearcoatRoughnessMap) { + const clearcoatRoughnessMapDef = { + index: writer.processTexture(material.clearcoatRoughnessMap), + texCoord: material.clearcoatRoughnessMap.channel + }; + writer.applyTextureTransform(clearcoatRoughnessMapDef, material.clearcoatRoughnessMap); + extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef; + } + if (material.clearcoatNormalMap) { + const clearcoatNormalMapDef = { + index: writer.processTexture(material.clearcoatNormalMap), + texCoord: material.clearcoatNormalMap.channel + }; + if (material.clearcoatNormalScale.x !== 1) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x; + writer.applyTextureTransform(clearcoatNormalMapDef, material.clearcoatNormalMap); + extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsDispersionExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_dispersion"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.dispersion === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.dispersion = material.dispersion; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsIridescenceExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_iridescence"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.iridescence === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.iridescenceFactor = material.iridescence; + if (material.iridescenceMap) { + const iridescenceMapDef = { + index: writer.processTexture(material.iridescenceMap), + texCoord: material.iridescenceMap.channel + }; + writer.applyTextureTransform(iridescenceMapDef, material.iridescenceMap); + extensionDef.iridescenceTexture = iridescenceMapDef; + } + extensionDef.iridescenceIor = material.iridescenceIOR; + extensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[0]; + extensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[1]; + if (material.iridescenceThicknessMap) { + const iridescenceThicknessMapDef = { + index: writer.processTexture(material.iridescenceThicknessMap), + texCoord: material.iridescenceThicknessMap.channel + }; + writer.applyTextureTransform(iridescenceThicknessMapDef, material.iridescenceThicknessMap); + extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsTransmissionExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_transmission"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.transmissionFactor = material.transmission; + if (material.transmissionMap) { + const transmissionMapDef = { + index: writer.processTexture(material.transmissionMap), + texCoord: material.transmissionMap.channel + }; + writer.applyTextureTransform(transmissionMapDef, material.transmissionMap); + extensionDef.transmissionTexture = transmissionMapDef; + } + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsVolumeExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_volume"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.thicknessFactor = material.thickness; + if (material.thicknessMap) { + const thicknessMapDef = { + index: writer.processTexture(material.thicknessMap), + texCoord: material.thicknessMap.channel + }; + writer.applyTextureTransform(thicknessMapDef, material.thicknessMap); + extensionDef.thicknessTexture = thicknessMapDef; + } + extensionDef.attenuationDistance = material.attenuationDistance; + extensionDef.attenuationColor = material.attenuationColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsIorExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_ior"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.ior === 1.5) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.ior = material.ior; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsSpecularExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_specular"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.specularIntensity === 1 && material.specularColor.equals(DEFAULT_SPECULAR_COLOR) && !material.specularIntensityMap && !material.specularColorMap) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.specularIntensityMap) { + const specularIntensityMapDef = { + index: writer.processTexture(material.specularIntensityMap), + texCoord: material.specularIntensityMap.channel + }; + writer.applyTextureTransform(specularIntensityMapDef, material.specularIntensityMap); + extensionDef.specularTexture = specularIntensityMapDef; + } + if (material.specularColorMap) { + const specularColorMapDef = { + index: writer.processTexture(material.specularColorMap), + texCoord: material.specularColorMap.channel + }; + writer.applyTextureTransform(specularColorMapDef, material.specularColorMap); + extensionDef.specularColorTexture = specularColorMapDef; + } + extensionDef.specularFactor = material.specularIntensity; + extensionDef.specularColorFactor = material.specularColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsSheenExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_sheen"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.sheen == 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.sheenRoughnessMap) { + const sheenRoughnessMapDef = { + index: writer.processTexture(material.sheenRoughnessMap), + texCoord: material.sheenRoughnessMap.channel + }; + writer.applyTextureTransform(sheenRoughnessMapDef, material.sheenRoughnessMap); + extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef; + } + if (material.sheenColorMap) { + const sheenColorMapDef = { + index: writer.processTexture(material.sheenColorMap), + texCoord: material.sheenColorMap.channel + }; + writer.applyTextureTransform(sheenColorMapDef, material.sheenColorMap); + extensionDef.sheenColorTexture = sheenColorMapDef; + } + extensionDef.sheenRoughnessFactor = material.sheenRoughness; + extensionDef.sheenColorFactor = material.sheenColor.toArray(); + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsAnisotropyExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_anisotropy"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshPhysicalMaterial || material.anisotropy == 0) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.anisotropyMap) { + const anisotropyMapDef = { index: writer.processTexture(material.anisotropyMap) }; + writer.applyTextureTransform(anisotropyMapDef, material.anisotropyMap); + extensionDef.anisotropyTexture = anisotropyMapDef; + } + extensionDef.anisotropyStrength = material.anisotropy; + extensionDef.anisotropyRotation = material.anisotropyRotation; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsEmissiveStrengthExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "KHR_materials_emissive_strength"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshStandardMaterial || material.emissiveIntensity === 1) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + extensionDef.emissiveStrength = material.emissiveIntensity; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMaterialsBumpExtension = class { + constructor(writer) { + this.writer = writer; + this.name = "EXT_materials_bump"; + } + writeMaterial(material, materialDef) { + if (!material.isMeshStandardMaterial || material.bumpScale === 1 && !material.bumpMap) return; + const writer = this.writer; + const extensionsUsed = writer.extensionsUsed; + const extensionDef = {}; + if (material.bumpMap) { + const bumpMapDef = { + index: writer.processTexture(material.bumpMap), + texCoord: material.bumpMap.channel + }; + writer.applyTextureTransform(bumpMapDef, material.bumpMap); + extensionDef.bumpTexture = bumpMapDef; + } + extensionDef.bumpFactor = material.bumpScale; + materialDef.extensions = materialDef.extensions || {}; + materialDef.extensions[this.name] = extensionDef; + extensionsUsed[this.name] = true; + } +}; +var GLTFMeshGpuInstancing = class { + constructor(writer) { + this.writer = writer; + this.name = "EXT_mesh_gpu_instancing"; + } + writeNode(object, nodeDef) { + if (!object.isInstancedMesh) return; + const writer = this.writer; + const mesh = object; + const translationAttr = new Float32Array(mesh.count * 3); + const rotationAttr = new Float32Array(mesh.count * 4); + const scaleAttr = new Float32Array(mesh.count * 3); + const matrix3 = new Matrix4(); + const position2 = new Vector3(); + const quaternion = new Quaternion(); + const scale2 = new Vector3(); + for (let i = 0; i < mesh.count; i++) { + mesh.getMatrixAt(i, matrix3); + matrix3.decompose(position2, quaternion, scale2); + position2.toArray(translationAttr, i * 3); + quaternion.toArray(rotationAttr, i * 4); + scale2.toArray(scaleAttr, i * 3); + } + const attributes = { + TRANSLATION: writer.processAccessor(new BufferAttribute(translationAttr, 3)), + ROTATION: writer.processAccessor(new BufferAttribute(rotationAttr, 4)), + SCALE: writer.processAccessor(new BufferAttribute(scaleAttr, 3)) + }; + if (mesh.instanceColor) + attributes._COLOR_0 = writer.processAccessor(mesh.instanceColor); + nodeDef.extensions = nodeDef.extensions || {}; + nodeDef.extensions[this.name] = { attributes }; + writer.extensionsUsed[this.name] = true; + writer.extensionsRequired[this.name] = true; + } +}; +GLTFExporter.Utils = { + insertKeyframe: function(track, time2) { + const tolerance = 1e-3; + const valueSize = track.getValueSize(); + const times = new track.TimeBufferType(track.times.length + 1); + const values2 = new track.ValueBufferType(track.values.length + valueSize); + const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize)); + let index2; + if (track.times.length === 0) { + times[0] = time2; + for (let i = 0; i < valueSize; i++) { + values2[i] = 0; + } + index2 = 0; + } else if (time2 < track.times[0]) { + if (Math.abs(track.times[0] - time2) < tolerance) return 0; + times[0] = time2; + times.set(track.times, 1); + values2.set(interpolant.evaluate(time2), 0); + values2.set(track.values, valueSize); + index2 = 0; + } else if (time2 > track.times[track.times.length - 1]) { + if (Math.abs(track.times[track.times.length - 1] - time2) < tolerance) { + return track.times.length - 1; + } + times[times.length - 1] = time2; + times.set(track.times, 0); + values2.set(track.values, 0); + values2.set(interpolant.evaluate(time2), track.values.length); + index2 = times.length - 1; + } else { + for (let i = 0; i < track.times.length; i++) { + if (Math.abs(track.times[i] - time2) < tolerance) return i; + if (track.times[i] < time2 && track.times[i + 1] > time2) { + times.set(track.times.slice(0, i + 1), 0); + times[i + 1] = time2; + times.set(track.times.slice(i + 1), i + 2); + values2.set(track.values.slice(0, (i + 1) * valueSize), 0); + values2.set(interpolant.evaluate(time2), (i + 1) * valueSize); + values2.set(track.values.slice((i + 1) * valueSize), (i + 2) * valueSize); + index2 = i + 1; + break; + } + } + } + track.times = times; + track.values = values2; + return index2; + }, + mergeMorphTargetTracks: function(clip, root) { + const tracks = []; + const mergedTracks = {}; + const sourceTracks = clip.tracks; + for (let i = 0; i < sourceTracks.length; ++i) { + let sourceTrack = sourceTracks[i]; + const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name); + const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName); + if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) { + tracks.push(sourceTrack); + continue; + } + if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) { + if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) { + throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation."); + } + console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."); + sourceTrack = sourceTrack.clone(); + sourceTrack.setInterpolation(InterpolateLinear); + } + const targetCount = sourceTrackNode.morphTargetInfluences.length; + const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex]; + if (targetIndex === void 0) { + throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex); + } + let mergedTrack; + if (mergedTracks[sourceTrackNode.uuid] === void 0) { + mergedTrack = sourceTrack.clone(); + const values2 = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length); + for (let j = 0; j < mergedTrack.times.length; j++) { + values2[j * targetCount + targetIndex] = mergedTrack.values[j]; + } + mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences"; + mergedTrack.values = values2; + mergedTracks[sourceTrackNode.uuid] = mergedTrack; + tracks.push(mergedTrack); + continue; + } + const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1)); + mergedTrack = mergedTracks[sourceTrackNode.uuid]; + for (let j = 0; j < mergedTrack.times.length; j++) { + mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]); + } + for (let j = 0; j < sourceTrack.times.length; j++) { + const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]); + mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j]; + } + } + clip.tracks = tracks; + return clip; + } +}; + +// node_modules/three/examples/jsm/libs/ktx-parse.module.js +var t = 0; +var n = 2; +var l = 1; +var p = 1; +var y = 1; +var x = 2; +var E = 0; +var F = 1; +var X = 10; +var R = 0; +var Y = 1; +var q = 2; +var Q = 15; +var Z = 128; +var $ = 64; +var et2 = 16; +var nt = 0; +var ct = 9; +var gt = 15; +var yt = 16; +var dt = 22; +var Ot = 37; +var Ft = 43; +var $t = 76; +var se = 83; +var pe = 97; +var xe = 100; +var de = 103; +var Ae = 109; +var Sn = 165; +var In = 166; +var Si = class { + 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; + } +}; +var Ii = class { + constructor(t3, e, n2, i) { + this._dataView = new DataView(t3.buffer, t3.byteOffset + e, n2), this._littleEndian = i, this._offset = 0; + } + _nextUint8() { + const t3 = this._dataView.getUint8(this._offset); + return this._offset += 1, t3; + } + _nextUint16() { + const t3 = this._dataView.getUint16(this._offset, this._littleEndian); + return this._offset += 2, t3; + } + _nextUint32() { + const t3 = this._dataView.getUint32(this._offset, this._littleEndian); + return this._offset += 4, t3; + } + _nextUint64() { + const t3 = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian); + return this._offset += 8, t3; + } + _nextInt32() { + const t3 = this._dataView.getInt32(this._offset, this._littleEndian); + return this._offset += 4, t3; + } + _skip(t3) { + return this._offset += t3, this; + } + _scan(t3, e = 0) { + const n2 = this._offset; + let i = 0; + for (; this._dataView.getUint8(this._offset) !== e && i < t3; ) i++, this._offset++; + return i < t3 && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + n2, i); + } +}; +var Oi = new Uint8Array([0]); +var Ti = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10]; +function Vi(t3) { + return "undefined" != typeof TextEncoder ? new TextEncoder().encode(t3) : Buffer.from(t3); +} +function Ei(t3) { + return "undefined" != typeof TextDecoder ? new TextDecoder().decode(t3) : Buffer.from(t3).toString("utf8"); +} +function Fi(t3) { + let e = 0; + for (const n3 of t3) e += n3.byteLength; + const n2 = new Uint8Array(e); + let i = 0; + for (const e2 of t3) n2.set(new Uint8Array(e2), i), i += e2.byteLength; + return n2; +} +function Pi(t3) { + const e = new Uint8Array(t3.buffer, t3.byteOffset, Ti.length); + if (e[0] !== Ti[0] || e[1] !== Ti[1] || e[2] !== Ti[2] || e[3] !== Ti[3] || e[4] !== Ti[4] || e[5] !== Ti[5] || e[6] !== Ti[6] || e[7] !== Ti[7] || e[8] !== Ti[8] || e[9] !== Ti[9] || e[10] !== Ti[10] || e[11] !== Ti[11]) throw new Error("Missing KTX 2.0 identifier."); + const n2 = new Si(), i = 17 * Uint32Array.BYTES_PER_ELEMENT, s = new Ii(t3, Ti.length, i, true); + n2.vkFormat = s._nextUint32(), n2.typeSize = s._nextUint32(), n2.pixelWidth = s._nextUint32(), n2.pixelHeight = s._nextUint32(), n2.pixelDepth = s._nextUint32(), n2.layerCount = s._nextUint32(), n2.faceCount = s._nextUint32(); + const a2 = s._nextUint32(); + n2.supercompressionScheme = s._nextUint32(); + const r = s._nextUint32(), o = s._nextUint32(), l2 = s._nextUint32(), f = s._nextUint32(), U = s._nextUint64(), c2 = s._nextUint64(), h = new Ii(t3, Ti.length + i, 3 * a2 * 8, true); + for (let e2 = 0; e2 < a2; e2++) n2.levels.push({ levelData: new Uint8Array(t3.buffer, t3.byteOffset + h._nextUint64(), h._nextUint64()), uncompressedByteLength: h._nextUint64() }); + const _ = new Ii(t3, r, o, true), p2 = { vendorId: _._skip(4)._nextUint16(), descriptorType: _._nextUint16(), versionNumber: _._nextUint16(), descriptorBlockSize: _._nextUint16(), colorModel: _._nextUint8(), colorPrimaries: _._nextUint8(), transferFunction: _._nextUint8(), flags: _._nextUint8(), texelBlockDimension: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], bytesPlane: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], samples: [] }, g2 = (p2.descriptorBlockSize / 4 - 6) / 4; + for (let t4 = 0; t4 < g2; t4++) { + const e2 = { bitOffset: _._nextUint16(), bitLength: _._nextUint8(), channelType: _._nextUint8(), samplePosition: [_._nextUint8(), _._nextUint8(), _._nextUint8(), _._nextUint8()], sampleLower: -Infinity, sampleUpper: Infinity }; + 64 & e2.channelType ? (e2.sampleLower = _._nextInt32(), e2.sampleUpper = _._nextInt32()) : (e2.sampleLower = _._nextUint32(), e2.sampleUpper = _._nextUint32()), p2.samples[t4] = e2; + } + n2.dataFormatDescriptor.length = 0, n2.dataFormatDescriptor.push(p2); + const y2 = new Ii(t3, l2, f, true); + for (; y2._offset < f; ) { + const t4 = y2._nextUint32(), e2 = y2._scan(t4), i2 = Ei(e2), s2 = y2._scan(t4 - e2.byteLength); + n2.keyValue[i2] = i2.match(/^ktx/i) ? Ei(s2) : s2, y2._offset % 4 && y2._skip(4 - y2._offset % 4); + } + if (c2 <= 0) return n2; + const x2 = new Ii(t3, U, c2, true), u = x2._nextUint16(), b3 = x2._nextUint16(), d = x2._nextUint32(), m = x2._nextUint32(), w = x2._nextUint32(), D = x2._nextUint32(), B2 = []; + for (let t4 = 0; t4 < a2; t4++) B2.push({ imageFlags: x2._nextUint32(), rgbSliceByteOffset: x2._nextUint32(), rgbSliceByteLength: x2._nextUint32(), alphaSliceByteOffset: x2._nextUint32(), alphaSliceByteLength: x2._nextUint32() }); + const L = U + x2._offset, A2 = L + d, k2 = A2 + m, v = k2 + w, S = new Uint8Array(t3.buffer, t3.byteOffset + L, d), I2 = new Uint8Array(t3.buffer, t3.byteOffset + A2, m), O = new Uint8Array(t3.buffer, t3.byteOffset + k2, w), T = new Uint8Array(t3.buffer, t3.byteOffset + v, D); + return n2.globalData = { endpointCount: u, selectorCount: b3, imageDescs: B2, endpointsData: S, selectorsData: I2, tablesData: O, extendedData: T }, n2; +} +function Ci() { + return (Ci = Object.assign || function(t3) { + for (var e = 1; e < arguments.length; e++) { + var n2 = arguments[e]; + for (var i in n2) Object.prototype.hasOwnProperty.call(n2, i) && (t3[i] = n2[i]); + } + return t3; + }).apply(this, arguments); +} +var zi = { keepWriter: false }; +function Mi(t3, e = {}) { + e = Ci({}, zi, e); + let n2 = new ArrayBuffer(0); + if (t3.globalData) { + const e2 = new ArrayBuffer(20 + 5 * t3.globalData.imageDescs.length * 4), i2 = new DataView(e2); + i2.setUint16(0, t3.globalData.endpointCount, true), i2.setUint16(2, t3.globalData.selectorCount, true), i2.setUint32(4, t3.globalData.endpointsData.byteLength, true), i2.setUint32(8, t3.globalData.selectorsData.byteLength, true), i2.setUint32(12, t3.globalData.tablesData.byteLength, true), i2.setUint32(16, t3.globalData.extendedData.byteLength, true); + for (let e3 = 0; e3 < t3.globalData.imageDescs.length; e3++) { + const n3 = t3.globalData.imageDescs[e3]; + i2.setUint32(20 + 5 * e3 * 4 + 0, n3.imageFlags, true), i2.setUint32(20 + 5 * e3 * 4 + 4, n3.rgbSliceByteOffset, true), i2.setUint32(20 + 5 * e3 * 4 + 8, n3.rgbSliceByteLength, true), i2.setUint32(20 + 5 * e3 * 4 + 12, n3.alphaSliceByteOffset, true), i2.setUint32(20 + 5 * e3 * 4 + 16, n3.alphaSliceByteLength, true); + } + n2 = Fi([e2, t3.globalData.endpointsData, t3.globalData.selectorsData, t3.globalData.tablesData, t3.globalData.extendedData]); + } + const i = []; + let s = t3.keyValue; + e.keepWriter || (s = Ci({}, t3.keyValue, { KTXwriter: "KTX-Parse v0.3.1" })); + for (const t4 in s) { + const e2 = s[t4], n3 = Vi(t4), a3 = "string" == typeof e2 ? Vi(e2) : e2, r2 = n3.byteLength + 1 + a3.byteLength + 1, o2 = r2 % 4 ? 4 - r2 % 4 : 0; + i.push(Fi([new Uint32Array([r2]), n3, Oi, a3, Oi, new Uint8Array(o2).fill(0)])); + } + const a2 = Fi(i); + if (1 !== t3.dataFormatDescriptor.length || 0 !== t3.dataFormatDescriptor[0].descriptorType) throw new Error("Only BASICFORMAT Data Format Descriptor output supported."); + const r = t3.dataFormatDescriptor[0], o = new ArrayBuffer(28 + 16 * r.samples.length), l2 = new DataView(o), f = 24 + 16 * r.samples.length; + if (l2.setUint32(0, o.byteLength, true), l2.setUint16(4, r.vendorId, true), l2.setUint16(6, r.descriptorType, true), l2.setUint16(8, r.versionNumber, true), l2.setUint16(10, f, true), l2.setUint8(12, r.colorModel), l2.setUint8(13, r.colorPrimaries), l2.setUint8(14, r.transferFunction), l2.setUint8(15, r.flags), !Array.isArray(r.texelBlockDimension)) throw new Error("texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`."); + l2.setUint8(16, r.texelBlockDimension[0]), l2.setUint8(17, r.texelBlockDimension[1]), l2.setUint8(18, r.texelBlockDimension[2]), l2.setUint8(19, r.texelBlockDimension[3]); + for (let t4 = 0; t4 < 8; t4++) l2.setUint8(20 + t4, r.bytesPlane[t4]); + for (let t4 = 0; t4 < r.samples.length; t4++) { + const e2 = r.samples[t4], n3 = 28 + 16 * t4; + if (e2.channelID) throw new Error("channelID has been renamed to channelType."); + l2.setUint16(n3 + 0, e2.bitOffset, true), l2.setUint8(n3 + 2, e2.bitLength), l2.setUint8(n3 + 3, e2.channelType), l2.setUint8(n3 + 4, e2.samplePosition[0]), l2.setUint8(n3 + 5, e2.samplePosition[1]), l2.setUint8(n3 + 6, e2.samplePosition[2]), l2.setUint8(n3 + 7, e2.samplePosition[3]), 64 & e2.channelType ? (l2.setInt32(n3 + 8, e2.sampleLower, true), l2.setInt32(n3 + 12, e2.sampleUpper, true)) : (l2.setUint32(n3 + 8, e2.sampleLower, true), l2.setUint32(n3 + 12, e2.sampleUpper, true)); + } + const U = Ti.length + 68 + 3 * t3.levels.length * 8, c2 = U + o.byteLength; + let h = n2.byteLength > 0 ? c2 + a2.byteLength : 0; + h % 8 && (h += 8 - h % 8); + const _ = [], p2 = new DataView(new ArrayBuffer(3 * t3.levels.length * 8)); + let g2 = (h || c2 + a2.byteLength) + n2.byteLength; + for (let e2 = 0; e2 < t3.levels.length; e2++) { + const n3 = t3.levels[e2]; + _.push(n3.levelData), p2.setBigUint64(24 * e2 + 0, BigInt(g2), true), p2.setBigUint64(24 * e2 + 8, BigInt(n3.levelData.byteLength), true), p2.setBigUint64(24 * e2 + 16, BigInt(n3.uncompressedByteLength), true), g2 += n3.levelData.byteLength; + } + const y2 = new ArrayBuffer(68), x2 = new DataView(y2); + return x2.setUint32(0, t3.vkFormat, true), x2.setUint32(4, t3.typeSize, true), x2.setUint32(8, t3.pixelWidth, true), x2.setUint32(12, t3.pixelHeight, true), x2.setUint32(16, t3.pixelDepth, true), x2.setUint32(20, t3.layerCount, true), x2.setUint32(24, t3.faceCount, true), x2.setUint32(28, t3.levels.length, true), x2.setUint32(32, t3.supercompressionScheme, true), x2.setUint32(36, U, true), x2.setUint32(40, o.byteLength, true), x2.setUint32(44, c2, true), x2.setUint32(48, a2.byteLength, true), x2.setBigUint64(52, BigInt(n2.byteLength > 0 ? h : 0), true), x2.setBigUint64(60, BigInt(n2.byteLength), true), new Uint8Array(Fi([new Uint8Array(Ti).buffer, y2, p2.buffer, o, a2, h > 0 ? new ArrayBuffer(h - (c2 + a2.byteLength)) : new ArrayBuffer(0), n2, ..._])); +} + +// node_modules/three/examples/jsm/exporters/KTX2Exporter.js +var VK_FORMAT_MAP = { + [RGBAFormat]: { + [FloatType]: { + [NoColorSpace]: Ae, + [LinearSRGBColorSpace]: Ae + }, + [HalfFloatType]: { + [NoColorSpace]: pe, + [LinearSRGBColorSpace]: pe + }, + [UnsignedByteType]: { + [NoColorSpace]: Ot, + [LinearSRGBColorSpace]: Ot, + [SRGBColorSpace]: Ft + } + }, + [RGFormat]: { + [FloatType]: { + [NoColorSpace]: de, + [LinearSRGBColorSpace]: de + }, + [HalfFloatType]: { + [NoColorSpace]: se, + [LinearSRGBColorSpace]: se + }, + [UnsignedByteType]: { + [NoColorSpace]: yt, + [LinearSRGBColorSpace]: yt, + [SRGBColorSpace]: dt + } + }, + [RedFormat]: { + [FloatType]: { + [NoColorSpace]: xe, + [LinearSRGBColorSpace]: xe + }, + [HalfFloatType]: { + [NoColorSpace]: $t, + [LinearSRGBColorSpace]: $t + }, + [UnsignedByteType]: { + [NoColorSpace]: ct, + [LinearSRGBColorSpace]: ct, + [SRGBColorSpace]: gt + } + } +}; +var KHR_DF_CHANNEL_MAP = { + 0: R, + 1: Y, + 2: q, + 3: Q +}; +var ERROR_INPUT = "THREE.KTX2Exporter: Supported inputs are DataTexture, Data3DTexture, or WebGLRenderer and WebGLRenderTarget."; +var ERROR_FORMAT = "THREE.KTX2Exporter: Supported formats are RGBAFormat, RGFormat, or RedFormat."; +var ERROR_TYPE = 'THREE.KTX2Exporter: Supported types are FloatType, HalfFloatType, or UnsignedByteType."'; +var ERROR_COLOR_SPACE = "THREE.KTX2Exporter: Supported color spaces are SRGBColorSpace (UnsignedByteType only), LinearSRGBColorSpace, or NoColorSpace."; +var KTX2Exporter = class { + parse(arg1, arg2) { + let texture; + if (arg1.isDataTexture || arg1.isData3DTexture) { + texture = arg1; + } else if (arg1.isWebGLRenderer && arg2.isWebGLRenderTarget) { + texture = toDataTexture(arg1, arg2); + } else { + throw new Error(ERROR_INPUT); + } + if (VK_FORMAT_MAP[texture.format] === void 0) { + throw new Error(ERROR_FORMAT); + } + if (VK_FORMAT_MAP[texture.format][texture.type] === void 0) { + throw new Error(ERROR_TYPE); + } + if (VK_FORMAT_MAP[texture.format][texture.type][texture.colorSpace] === void 0) { + throw new Error(ERROR_COLOR_SPACE); + } + const array = texture.image.data; + const channelCount = getChannelCount(texture); + const container = new Si(); + container.vkFormat = VK_FORMAT_MAP[texture.format][texture.type][texture.colorSpace]; + container.typeSize = array.BYTES_PER_ELEMENT; + container.pixelWidth = texture.image.width; + container.pixelHeight = texture.image.height; + if (texture.isData3DTexture) { + container.pixelDepth = texture.image.depth; + } + const basicDesc = container.dataFormatDescriptor[0]; + basicDesc.colorModel = l; + basicDesc.colorPrimaries = texture.colorSpace === NoColorSpace ? E : F; + basicDesc.transferFunction = texture.colorSpace === SRGBColorSpace ? x : y; + basicDesc.texelBlockDimension = [0, 0, 0, 0]; + basicDesc.bytesPlane = [ + container.typeSize * channelCount, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]; + for (let i = 0; i < channelCount; ++i) { + let channelType = KHR_DF_CHANNEL_MAP[i]; + if (texture.colorSpace === LinearSRGBColorSpace || texture.colorSpace === NoColorSpace) { + channelType |= et2; + } + if (texture.type === FloatType || texture.type === HalfFloatType) { + channelType |= Z; + channelType |= $; + } + basicDesc.samples.push({ + channelType, + bitOffset: i * array.BYTES_PER_ELEMENT, + bitLength: array.BYTES_PER_ELEMENT * 8 - 1, + samplePosition: [0, 0, 0, 0], + sampleLower: texture.type === UnsignedByteType ? 0 : -1, + sampleUpper: texture.type === UnsignedByteType ? 255 : 1 + }); + } + container.levels = [{ + levelData: new Uint8Array(array.buffer, array.byteOffset, array.byteLength), + uncompressedByteLength: array.byteLength + }]; + container.keyValue["KTXwriter"] = `three.js ${REVISION}`; + return Mi(container, { keepWriter: true }); + } +}; +function toDataTexture(renderer2, rtt) { + const channelCount = getChannelCount(rtt.texture); + let view; + if (rtt.texture.type === FloatType) { + view = new Float32Array(rtt.width * rtt.height * channelCount); + } else if (rtt.texture.type === HalfFloatType) { + view = new Uint16Array(rtt.width * rtt.height * channelCount); + } else if (rtt.texture.type === UnsignedByteType) { + view = new Uint8Array(rtt.width * rtt.height * channelCount); + } else { + throw new Error(ERROR_TYPE); + } + renderer2.readRenderTargetPixels(rtt, 0, 0, rtt.width, rtt.height, view); + return new DataTexture(view, rtt.width, rtt.height, rtt.texture.format, rtt.texture.type); +} +function getChannelCount(texture) { + switch (texture.format) { + case RGBAFormat: + return 4; + case RGFormat: + case RGIntegerFormat: + return 2; + case RedFormat: + case RedIntegerFormat: + return 1; + default: + throw new Error(ERROR_FORMAT); + } +} + +// node_modules/three/examples/jsm/libs/mmdparser.module.js +function CharsetEncoder() { +} +CharsetEncoder.prototype.s2u = function(uint8Array) { + var t3 = this.s2uTable; + var str = ""; + var p2 = 0; + while (p2 < uint8Array.length) { + var key2 = uint8Array[p2++]; + if (!(key2 >= 0 && key2 <= 126 || key2 >= 161 && key2 <= 223) && p2 < uint8Array.length) { + key2 = key2 << 8 | uint8Array[p2++]; + } + if (t3[key2] === void 0) { + console.error("unknown char code " + key2 + "."); + return str; + } + str += String.fromCharCode(t3[key2]); + } + return str; +}; +CharsetEncoder.prototype.s2uTable = { + 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, + 14: 14, + 15: 15, + 16: 16, + 17: 17, + 18: 18, + 19: 19, + 20: 20, + 21: 21, + 22: 22, + 23: 23, + 24: 24, + 25: 25, + 26: 26, + 27: 27, + 28: 28, + 29: 29, + 30: 30, + 31: 31, + 32: 32, + 33: 33, + 34: 34, + 35: 35, + 36: 36, + 37: 37, + 38: 38, + 39: 39, + 40: 40, + 41: 41, + 42: 42, + 43: 43, + 44: 44, + 45: 45, + 46: 46, + 47: 47, + 48: 48, + 49: 49, + 50: 50, + 51: 51, + 52: 52, + 53: 53, + 54: 54, + 55: 55, + 56: 56, + 57: 57, + 58: 58, + 59: 59, + 60: 60, + 61: 61, + 62: 62, + 63: 63, + 64: 64, + 65: 65, + 66: 66, + 67: 67, + 68: 68, + 69: 69, + 70: 70, + 71: 71, + 72: 72, + 73: 73, + 74: 74, + 75: 75, + 76: 76, + 77: 77, + 78: 78, + 79: 79, + 80: 80, + 81: 81, + 82: 82, + 83: 83, + 84: 84, + 85: 85, + 86: 86, + 87: 87, + 88: 88, + 89: 89, + 90: 90, + 91: 91, + 92: 92, + 93: 93, + 94: 94, + 95: 95, + 96: 96, + 97: 97, + 98: 98, + 99: 99, + 100: 100, + 101: 101, + 102: 102, + 103: 103, + 104: 104, + 105: 105, + 106: 106, + 107: 107, + 108: 108, + 109: 109, + 110: 110, + 111: 111, + 112: 112, + 113: 113, + 114: 114, + 115: 115, + 116: 116, + 117: 117, + 118: 118, + 119: 119, + 120: 120, + 121: 121, + 122: 122, + 123: 123, + 124: 124, + 125: 125, + 126: 126, + 161: 65377, + 162: 65378, + 163: 65379, + 164: 65380, + 165: 65381, + 166: 65382, + 167: 65383, + 168: 65384, + 169: 65385, + 170: 65386, + 171: 65387, + 172: 65388, + 173: 65389, + 174: 65390, + 175: 65391, + 176: 65392, + 177: 65393, + 178: 65394, + 179: 65395, + 180: 65396, + 181: 65397, + 182: 65398, + 183: 65399, + 184: 65400, + 185: 65401, + 186: 65402, + 187: 65403, + 188: 65404, + 189: 65405, + 190: 65406, + 191: 65407, + 192: 65408, + 193: 65409, + 194: 65410, + 195: 65411, + 196: 65412, + 197: 65413, + 198: 65414, + 199: 65415, + 200: 65416, + 201: 65417, + 202: 65418, + 203: 65419, + 204: 65420, + 205: 65421, + 206: 65422, + 207: 65423, + 208: 65424, + 209: 65425, + 210: 65426, + 211: 65427, + 212: 65428, + 213: 65429, + 214: 65430, + 215: 65431, + 216: 65432, + 217: 65433, + 218: 65434, + 219: 65435, + 220: 65436, + 221: 65437, + 222: 65438, + 223: 65439, + 33088: 12288, + 33089: 12289, + 33090: 12290, + 33091: 65292, + 33092: 65294, + 33093: 12539, + 33094: 65306, + 33095: 65307, + 33096: 65311, + 33097: 65281, + 33098: 12443, + 33099: 12444, + 33100: 180, + 33101: 65344, + 33102: 168, + 33103: 65342, + 33104: 65507, + 33105: 65343, + 33106: 12541, + 33107: 12542, + 33108: 12445, + 33109: 12446, + 33110: 12291, + 33111: 20189, + 33112: 12293, + 33113: 12294, + 33114: 12295, + 33115: 12540, + 33116: 8213, + 33117: 8208, + 33118: 65295, + 33119: 65340, + 33120: 65374, + 33121: 8741, + 33122: 65372, + 33123: 8230, + 33124: 8229, + 33125: 8216, + 33126: 8217, + 33127: 8220, + 33128: 8221, + 33129: 65288, + 33130: 65289, + 33131: 12308, + 33132: 12309, + 33133: 65339, + 33134: 65341, + 33135: 65371, + 33136: 65373, + 33137: 12296, + 33138: 12297, + 33139: 12298, + 33140: 12299, + 33141: 12300, + 33142: 12301, + 33143: 12302, + 33144: 12303, + 33145: 12304, + 33146: 12305, + 33147: 65291, + 33148: 65293, + 33149: 177, + 33150: 215, + 33152: 247, + 33153: 65309, + 33154: 8800, + 33155: 65308, + 33156: 65310, + 33157: 8806, + 33158: 8807, + 33159: 8734, + 33160: 8756, + 33161: 9794, + 33162: 9792, + 33163: 176, + 33164: 8242, + 33165: 8243, + 33166: 8451, + 33167: 65509, + 33168: 65284, + 33169: 65504, + 33170: 65505, + 33171: 65285, + 33172: 65283, + 33173: 65286, + 33174: 65290, + 33175: 65312, + 33176: 167, + 33177: 9734, + 33178: 9733, + 33179: 9675, + 33180: 9679, + 33181: 9678, + 33182: 9671, + 33183: 9670, + 33184: 9633, + 33185: 9632, + 33186: 9651, + 33187: 9650, + 33188: 9661, + 33189: 9660, + 33190: 8251, + 33191: 12306, + 33192: 8594, + 33193: 8592, + 33194: 8593, + 33195: 8595, + 33196: 12307, + 33208: 8712, + 33209: 8715, + 33210: 8838, + 33211: 8839, + 33212: 8834, + 33213: 8835, + 33214: 8746, + 33215: 8745, + 33224: 8743, + 33225: 8744, + 33226: 65506, + 33227: 8658, + 33228: 8660, + 33229: 8704, + 33230: 8707, + 33242: 8736, + 33243: 8869, + 33244: 8978, + 33245: 8706, + 33246: 8711, + 33247: 8801, + 33248: 8786, + 33249: 8810, + 33250: 8811, + 33251: 8730, + 33252: 8765, + 33253: 8733, + 33254: 8757, + 33255: 8747, + 33256: 8748, + 33264: 8491, + 33265: 8240, + 33266: 9839, + 33267: 9837, + 33268: 9834, + 33269: 8224, + 33270: 8225, + 33271: 182, + 33276: 9711, + 33359: 65296, + 33360: 65297, + 33361: 65298, + 33362: 65299, + 33363: 65300, + 33364: 65301, + 33365: 65302, + 33366: 65303, + 33367: 65304, + 33368: 65305, + 33376: 65313, + 33377: 65314, + 33378: 65315, + 33379: 65316, + 33380: 65317, + 33381: 65318, + 33382: 65319, + 33383: 65320, + 33384: 65321, + 33385: 65322, + 33386: 65323, + 33387: 65324, + 33388: 65325, + 33389: 65326, + 33390: 65327, + 33391: 65328, + 33392: 65329, + 33393: 65330, + 33394: 65331, + 33395: 65332, + 33396: 65333, + 33397: 65334, + 33398: 65335, + 33399: 65336, + 33400: 65337, + 33401: 65338, + 33409: 65345, + 33410: 65346, + 33411: 65347, + 33412: 65348, + 33413: 65349, + 33414: 65350, + 33415: 65351, + 33416: 65352, + 33417: 65353, + 33418: 65354, + 33419: 65355, + 33420: 65356, + 33421: 65357, + 33422: 65358, + 33423: 65359, + 33424: 65360, + 33425: 65361, + 33426: 65362, + 33427: 65363, + 33428: 65364, + 33429: 65365, + 33430: 65366, + 33431: 65367, + 33432: 65368, + 33433: 65369, + 33434: 65370, + 33439: 12353, + 33440: 12354, + 33441: 12355, + 33442: 12356, + 33443: 12357, + 33444: 12358, + 33445: 12359, + 33446: 12360, + 33447: 12361, + 33448: 12362, + 33449: 12363, + 33450: 12364, + 33451: 12365, + 33452: 12366, + 33453: 12367, + 33454: 12368, + 33455: 12369, + 33456: 12370, + 33457: 12371, + 33458: 12372, + 33459: 12373, + 33460: 12374, + 33461: 12375, + 33462: 12376, + 33463: 12377, + 33464: 12378, + 33465: 12379, + 33466: 12380, + 33467: 12381, + 33468: 12382, + 33469: 12383, + 33470: 12384, + 33471: 12385, + 33472: 12386, + 33473: 12387, + 33474: 12388, + 33475: 12389, + 33476: 12390, + 33477: 12391, + 33478: 12392, + 33479: 12393, + 33480: 12394, + 33481: 12395, + 33482: 12396, + 33483: 12397, + 33484: 12398, + 33485: 12399, + 33486: 12400, + 33487: 12401, + 33488: 12402, + 33489: 12403, + 33490: 12404, + 33491: 12405, + 33492: 12406, + 33493: 12407, + 33494: 12408, + 33495: 12409, + 33496: 12410, + 33497: 12411, + 33498: 12412, + 33499: 12413, + 33500: 12414, + 33501: 12415, + 33502: 12416, + 33503: 12417, + 33504: 12418, + 33505: 12419, + 33506: 12420, + 33507: 12421, + 33508: 12422, + 33509: 12423, + 33510: 12424, + 33511: 12425, + 33512: 12426, + 33513: 12427, + 33514: 12428, + 33515: 12429, + 33516: 12430, + 33517: 12431, + 33518: 12432, + 33519: 12433, + 33520: 12434, + 33521: 12435, + 33600: 12449, + 33601: 12450, + 33602: 12451, + 33603: 12452, + 33604: 12453, + 33605: 12454, + 33606: 12455, + 33607: 12456, + 33608: 12457, + 33609: 12458, + 33610: 12459, + 33611: 12460, + 33612: 12461, + 33613: 12462, + 33614: 12463, + 33615: 12464, + 33616: 12465, + 33617: 12466, + 33618: 12467, + 33619: 12468, + 33620: 12469, + 33621: 12470, + 33622: 12471, + 33623: 12472, + 33624: 12473, + 33625: 12474, + 33626: 12475, + 33627: 12476, + 33628: 12477, + 33629: 12478, + 33630: 12479, + 33631: 12480, + 33632: 12481, + 33633: 12482, + 33634: 12483, + 33635: 12484, + 33636: 12485, + 33637: 12486, + 33638: 12487, + 33639: 12488, + 33640: 12489, + 33641: 12490, + 33642: 12491, + 33643: 12492, + 33644: 12493, + 33645: 12494, + 33646: 12495, + 33647: 12496, + 33648: 12497, + 33649: 12498, + 33650: 12499, + 33651: 12500, + 33652: 12501, + 33653: 12502, + 33654: 12503, + 33655: 12504, + 33656: 12505, + 33657: 12506, + 33658: 12507, + 33659: 12508, + 33660: 12509, + 33661: 12510, + 33662: 12511, + 33664: 12512, + 33665: 12513, + 33666: 12514, + 33667: 12515, + 33668: 12516, + 33669: 12517, + 33670: 12518, + 33671: 12519, + 33672: 12520, + 33673: 12521, + 33674: 12522, + 33675: 12523, + 33676: 12524, + 33677: 12525, + 33678: 12526, + 33679: 12527, + 33680: 12528, + 33681: 12529, + 33682: 12530, + 33683: 12531, + 33684: 12532, + 33685: 12533, + 33686: 12534, + 33695: 913, + 33696: 914, + 33697: 915, + 33698: 916, + 33699: 917, + 33700: 918, + 33701: 919, + 33702: 920, + 33703: 921, + 33704: 922, + 33705: 923, + 33706: 924, + 33707: 925, + 33708: 926, + 33709: 927, + 33710: 928, + 33711: 929, + 33712: 931, + 33713: 932, + 33714: 933, + 33715: 934, + 33716: 935, + 33717: 936, + 33718: 937, + 33727: 945, + 33728: 946, + 33729: 947, + 33730: 948, + 33731: 949, + 33732: 950, + 33733: 951, + 33734: 952, + 33735: 953, + 33736: 954, + 33737: 955, + 33738: 956, + 33739: 957, + 33740: 958, + 33741: 959, + 33742: 960, + 33743: 961, + 33744: 963, + 33745: 964, + 33746: 965, + 33747: 966, + 33748: 967, + 33749: 968, + 33750: 969, + 33856: 1040, + 33857: 1041, + 33858: 1042, + 33859: 1043, + 33860: 1044, + 33861: 1045, + 33862: 1025, + 33863: 1046, + 33864: 1047, + 33865: 1048, + 33866: 1049, + 33867: 1050, + 33868: 1051, + 33869: 1052, + 33870: 1053, + 33871: 1054, + 33872: 1055, + 33873: 1056, + 33874: 1057, + 33875: 1058, + 33876: 1059, + 33877: 1060, + 33878: 1061, + 33879: 1062, + 33880: 1063, + 33881: 1064, + 33882: 1065, + 33883: 1066, + 33884: 1067, + 33885: 1068, + 33886: 1069, + 33887: 1070, + 33888: 1071, + 33904: 1072, + 33905: 1073, + 33906: 1074, + 33907: 1075, + 33908: 1076, + 33909: 1077, + 33910: 1105, + 33911: 1078, + 33912: 1079, + 33913: 1080, + 33914: 1081, + 33915: 1082, + 33916: 1083, + 33917: 1084, + 33918: 1085, + 33920: 1086, + 33921: 1087, + 33922: 1088, + 33923: 1089, + 33924: 1090, + 33925: 1091, + 33926: 1092, + 33927: 1093, + 33928: 1094, + 33929: 1095, + 33930: 1096, + 33931: 1097, + 33932: 1098, + 33933: 1099, + 33934: 1100, + 33935: 1101, + 33936: 1102, + 33937: 1103, + 33951: 9472, + 33952: 9474, + 33953: 9484, + 33954: 9488, + 33955: 9496, + 33956: 9492, + 33957: 9500, + 33958: 9516, + 33959: 9508, + 33960: 9524, + 33961: 9532, + 33962: 9473, + 33963: 9475, + 33964: 9487, + 33965: 9491, + 33966: 9499, + 33967: 9495, + 33968: 9507, + 33969: 9523, + 33970: 9515, + 33971: 9531, + 33972: 9547, + 33973: 9504, + 33974: 9519, + 33975: 9512, + 33976: 9527, + 33977: 9535, + 33978: 9501, + 33979: 9520, + 33980: 9509, + 33981: 9528, + 33982: 9538, + 34624: 9312, + 34625: 9313, + 34626: 9314, + 34627: 9315, + 34628: 9316, + 34629: 9317, + 34630: 9318, + 34631: 9319, + 34632: 9320, + 34633: 9321, + 34634: 9322, + 34635: 9323, + 34636: 9324, + 34637: 9325, + 34638: 9326, + 34639: 9327, + 34640: 9328, + 34641: 9329, + 34642: 9330, + 34643: 9331, + 34644: 8544, + 34645: 8545, + 34646: 8546, + 34647: 8547, + 34648: 8548, + 34649: 8549, + 34650: 8550, + 34651: 8551, + 34652: 8552, + 34653: 8553, + 34655: 13129, + 34656: 13076, + 34657: 13090, + 34658: 13133, + 34659: 13080, + 34660: 13095, + 34661: 13059, + 34662: 13110, + 34663: 13137, + 34664: 13143, + 34665: 13069, + 34666: 13094, + 34667: 13091, + 34668: 13099, + 34669: 13130, + 34670: 13115, + 34671: 13212, + 34672: 13213, + 34673: 13214, + 34674: 13198, + 34675: 13199, + 34676: 13252, + 34677: 13217, + 34686: 13179, + 34688: 12317, + 34689: 12319, + 34690: 8470, + 34691: 13261, + 34692: 8481, + 34693: 12964, + 34694: 12965, + 34695: 12966, + 34696: 12967, + 34697: 12968, + 34698: 12849, + 34699: 12850, + 34700: 12857, + 34701: 13182, + 34702: 13181, + 34703: 13180, + 34704: 8786, + 34705: 8801, + 34706: 8747, + 34707: 8750, + 34708: 8721, + 34709: 8730, + 34710: 8869, + 34711: 8736, + 34712: 8735, + 34713: 8895, + 34714: 8757, + 34715: 8745, + 34716: 8746, + 34975: 20124, + 34976: 21782, + 34977: 23043, + 34978: 38463, + 34979: 21696, + 34980: 24859, + 34981: 25384, + 34982: 23030, + 34983: 36898, + 34984: 33909, + 34985: 33564, + 34986: 31312, + 34987: 24746, + 34988: 25569, + 34989: 28197, + 34990: 26093, + 34991: 33894, + 34992: 33446, + 34993: 39925, + 34994: 26771, + 34995: 22311, + 34996: 26017, + 34997: 25201, + 34998: 23451, + 34999: 22992, + 35e3: 34427, + 35001: 39156, + 35002: 32098, + 35003: 32190, + 35004: 39822, + 35005: 25110, + 35006: 31903, + 35007: 34999, + 35008: 23433, + 35009: 24245, + 35010: 25353, + 35011: 26263, + 35012: 26696, + 35013: 38343, + 35014: 38797, + 35015: 26447, + 35016: 20197, + 35017: 20234, + 35018: 20301, + 35019: 20381, + 35020: 20553, + 35021: 22258, + 35022: 22839, + 35023: 22996, + 35024: 23041, + 35025: 23561, + 35026: 24799, + 35027: 24847, + 35028: 24944, + 35029: 26131, + 35030: 26885, + 35031: 28858, + 35032: 30031, + 35033: 30064, + 35034: 31227, + 35035: 32173, + 35036: 32239, + 35037: 32963, + 35038: 33806, + 35039: 34915, + 35040: 35586, + 35041: 36949, + 35042: 36986, + 35043: 21307, + 35044: 20117, + 35045: 20133, + 35046: 22495, + 35047: 32946, + 35048: 37057, + 35049: 30959, + 35050: 19968, + 35051: 22769, + 35052: 28322, + 35053: 36920, + 35054: 31282, + 35055: 33576, + 35056: 33419, + 35057: 39983, + 35058: 20801, + 35059: 21360, + 35060: 21693, + 35061: 21729, + 35062: 22240, + 35063: 23035, + 35064: 24341, + 35065: 39154, + 35066: 28139, + 35067: 32996, + 35068: 34093, + 35136: 38498, + 35137: 38512, + 35138: 38560, + 35139: 38907, + 35140: 21515, + 35141: 21491, + 35142: 23431, + 35143: 28879, + 35144: 32701, + 35145: 36802, + 35146: 38632, + 35147: 21359, + 35148: 40284, + 35149: 31418, + 35150: 19985, + 35151: 30867, + 35152: 33276, + 35153: 28198, + 35154: 22040, + 35155: 21764, + 35156: 27421, + 35157: 34074, + 35158: 39995, + 35159: 23013, + 35160: 21417, + 35161: 28006, + 35162: 29916, + 35163: 38287, + 35164: 22082, + 35165: 20113, + 35166: 36939, + 35167: 38642, + 35168: 33615, + 35169: 39180, + 35170: 21473, + 35171: 21942, + 35172: 23344, + 35173: 24433, + 35174: 26144, + 35175: 26355, + 35176: 26628, + 35177: 27704, + 35178: 27891, + 35179: 27945, + 35180: 29787, + 35181: 30408, + 35182: 31310, + 35183: 38964, + 35184: 33521, + 35185: 34907, + 35186: 35424, + 35187: 37613, + 35188: 28082, + 35189: 30123, + 35190: 30410, + 35191: 39365, + 35192: 24742, + 35193: 35585, + 35194: 36234, + 35195: 38322, + 35196: 27022, + 35197: 21421, + 35198: 20870, + 35200: 22290, + 35201: 22576, + 35202: 22852, + 35203: 23476, + 35204: 24310, + 35205: 24616, + 35206: 25513, + 35207: 25588, + 35208: 27839, + 35209: 28436, + 35210: 28814, + 35211: 28948, + 35212: 29017, + 35213: 29141, + 35214: 29503, + 35215: 32257, + 35216: 33398, + 35217: 33489, + 35218: 34199, + 35219: 36960, + 35220: 37467, + 35221: 40219, + 35222: 22633, + 35223: 26044, + 35224: 27738, + 35225: 29989, + 35226: 20985, + 35227: 22830, + 35228: 22885, + 35229: 24448, + 35230: 24540, + 35231: 25276, + 35232: 26106, + 35233: 27178, + 35234: 27431, + 35235: 27572, + 35236: 29579, + 35237: 32705, + 35238: 35158, + 35239: 40236, + 35240: 40206, + 35241: 40644, + 35242: 23713, + 35243: 27798, + 35244: 33659, + 35245: 20740, + 35246: 23627, + 35247: 25014, + 35248: 33222, + 35249: 26742, + 35250: 29281, + 35251: 20057, + 35252: 20474, + 35253: 21368, + 35254: 24681, + 35255: 28201, + 35256: 31311, + 35257: 38899, + 35258: 19979, + 35259: 21270, + 35260: 20206, + 35261: 20309, + 35262: 20285, + 35263: 20385, + 35264: 20339, + 35265: 21152, + 35266: 21487, + 35267: 22025, + 35268: 22799, + 35269: 23233, + 35270: 23478, + 35271: 23521, + 35272: 31185, + 35273: 26247, + 35274: 26524, + 35275: 26550, + 35276: 27468, + 35277: 27827, + 35278: 28779, + 35279: 29634, + 35280: 31117, + 35281: 31166, + 35282: 31292, + 35283: 31623, + 35284: 33457, + 35285: 33499, + 35286: 33540, + 35287: 33655, + 35288: 33775, + 35289: 33747, + 35290: 34662, + 35291: 35506, + 35292: 22057, + 35293: 36008, + 35294: 36838, + 35295: 36942, + 35296: 38686, + 35297: 34442, + 35298: 20420, + 35299: 23784, + 35300: 25105, + 35301: 29273, + 35302: 30011, + 35303: 33253, + 35304: 33469, + 35305: 34558, + 35306: 36032, + 35307: 38597, + 35308: 39187, + 35309: 39381, + 35310: 20171, + 35311: 20250, + 35312: 35299, + 35313: 22238, + 35314: 22602, + 35315: 22730, + 35316: 24315, + 35317: 24555, + 35318: 24618, + 35319: 24724, + 35320: 24674, + 35321: 25040, + 35322: 25106, + 35323: 25296, + 35324: 25913, + 35392: 39745, + 35393: 26214, + 35394: 26800, + 35395: 28023, + 35396: 28784, + 35397: 30028, + 35398: 30342, + 35399: 32117, + 35400: 33445, + 35401: 34809, + 35402: 38283, + 35403: 38542, + 35404: 35997, + 35405: 20977, + 35406: 21182, + 35407: 22806, + 35408: 21683, + 35409: 23475, + 35410: 23830, + 35411: 24936, + 35412: 27010, + 35413: 28079, + 35414: 30861, + 35415: 33995, + 35416: 34903, + 35417: 35442, + 35418: 37799, + 35419: 39608, + 35420: 28012, + 35421: 39336, + 35422: 34521, + 35423: 22435, + 35424: 26623, + 35425: 34510, + 35426: 37390, + 35427: 21123, + 35428: 22151, + 35429: 21508, + 35430: 24275, + 35431: 25313, + 35432: 25785, + 35433: 26684, + 35434: 26680, + 35435: 27579, + 35436: 29554, + 35437: 30906, + 35438: 31339, + 35439: 35226, + 35440: 35282, + 35441: 36203, + 35442: 36611, + 35443: 37101, + 35444: 38307, + 35445: 38548, + 35446: 38761, + 35447: 23398, + 35448: 23731, + 35449: 27005, + 35450: 38989, + 35451: 38990, + 35452: 25499, + 35453: 31520, + 35454: 27179, + 35456: 27263, + 35457: 26806, + 35458: 39949, + 35459: 28511, + 35460: 21106, + 35461: 21917, + 35462: 24688, + 35463: 25324, + 35464: 27963, + 35465: 28167, + 35466: 28369, + 35467: 33883, + 35468: 35088, + 35469: 36676, + 35470: 19988, + 35471: 39993, + 35472: 21494, + 35473: 26907, + 35474: 27194, + 35475: 38788, + 35476: 26666, + 35477: 20828, + 35478: 31427, + 35479: 33970, + 35480: 37340, + 35481: 37772, + 35482: 22107, + 35483: 40232, + 35484: 26658, + 35485: 33541, + 35486: 33841, + 35487: 31909, + 35488: 21e3, + 35489: 33477, + 35490: 29926, + 35491: 20094, + 35492: 20355, + 35493: 20896, + 35494: 23506, + 35495: 21002, + 35496: 21208, + 35497: 21223, + 35498: 24059, + 35499: 21914, + 35500: 22570, + 35501: 23014, + 35502: 23436, + 35503: 23448, + 35504: 23515, + 35505: 24178, + 35506: 24185, + 35507: 24739, + 35508: 24863, + 35509: 24931, + 35510: 25022, + 35511: 25563, + 35512: 25954, + 35513: 26577, + 35514: 26707, + 35515: 26874, + 35516: 27454, + 35517: 27475, + 35518: 27735, + 35519: 28450, + 35520: 28567, + 35521: 28485, + 35522: 29872, + 35523: 29976, + 35524: 30435, + 35525: 30475, + 35526: 31487, + 35527: 31649, + 35528: 31777, + 35529: 32233, + 35530: 32566, + 35531: 32752, + 35532: 32925, + 35533: 33382, + 35534: 33694, + 35535: 35251, + 35536: 35532, + 35537: 36011, + 35538: 36996, + 35539: 37969, + 35540: 38291, + 35541: 38289, + 35542: 38306, + 35543: 38501, + 35544: 38867, + 35545: 39208, + 35546: 33304, + 35547: 20024, + 35548: 21547, + 35549: 23736, + 35550: 24012, + 35551: 29609, + 35552: 30284, + 35553: 30524, + 35554: 23721, + 35555: 32747, + 35556: 36107, + 35557: 38593, + 35558: 38929, + 35559: 38996, + 35560: 39e3, + 35561: 20225, + 35562: 20238, + 35563: 21361, + 35564: 21916, + 35565: 22120, + 35566: 22522, + 35567: 22855, + 35568: 23305, + 35569: 23492, + 35570: 23696, + 35571: 24076, + 35572: 24190, + 35573: 24524, + 35574: 25582, + 35575: 26426, + 35576: 26071, + 35577: 26082, + 35578: 26399, + 35579: 26827, + 35580: 26820, + 35648: 27231, + 35649: 24112, + 35650: 27589, + 35651: 27671, + 35652: 27773, + 35653: 30079, + 35654: 31048, + 35655: 23395, + 35656: 31232, + 35657: 32e3, + 35658: 24509, + 35659: 35215, + 35660: 35352, + 35661: 36020, + 35662: 36215, + 35663: 36556, + 35664: 36637, + 35665: 39138, + 35666: 39438, + 35667: 39740, + 35668: 20096, + 35669: 20605, + 35670: 20736, + 35671: 22931, + 35672: 23452, + 35673: 25135, + 35674: 25216, + 35675: 25836, + 35676: 27450, + 35677: 29344, + 35678: 30097, + 35679: 31047, + 35680: 32681, + 35681: 34811, + 35682: 35516, + 35683: 35696, + 35684: 25516, + 35685: 33738, + 35686: 38816, + 35687: 21513, + 35688: 21507, + 35689: 21931, + 35690: 26708, + 35691: 27224, + 35692: 35440, + 35693: 30759, + 35694: 26485, + 35695: 40653, + 35696: 21364, + 35697: 23458, + 35698: 33050, + 35699: 34384, + 35700: 36870, + 35701: 19992, + 35702: 20037, + 35703: 20167, + 35704: 20241, + 35705: 21450, + 35706: 21560, + 35707: 23470, + 35708: 24339, + 35709: 24613, + 35710: 25937, + 35712: 26429, + 35713: 27714, + 35714: 27762, + 35715: 27875, + 35716: 28792, + 35717: 29699, + 35718: 31350, + 35719: 31406, + 35720: 31496, + 35721: 32026, + 35722: 31998, + 35723: 32102, + 35724: 26087, + 35725: 29275, + 35726: 21435, + 35727: 23621, + 35728: 24040, + 35729: 25298, + 35730: 25312, + 35731: 25369, + 35732: 28192, + 35733: 34394, + 35734: 35377, + 35735: 36317, + 35736: 37624, + 35737: 28417, + 35738: 31142, + 35739: 39770, + 35740: 20136, + 35741: 20139, + 35742: 20140, + 35743: 20379, + 35744: 20384, + 35745: 20689, + 35746: 20807, + 35747: 31478, + 35748: 20849, + 35749: 20982, + 35750: 21332, + 35751: 21281, + 35752: 21375, + 35753: 21483, + 35754: 21932, + 35755: 22659, + 35756: 23777, + 35757: 24375, + 35758: 24394, + 35759: 24623, + 35760: 24656, + 35761: 24685, + 35762: 25375, + 35763: 25945, + 35764: 27211, + 35765: 27841, + 35766: 29378, + 35767: 29421, + 35768: 30703, + 35769: 33016, + 35770: 33029, + 35771: 33288, + 35772: 34126, + 35773: 37111, + 35774: 37857, + 35775: 38911, + 35776: 39255, + 35777: 39514, + 35778: 20208, + 35779: 20957, + 35780: 23597, + 35781: 26241, + 35782: 26989, + 35783: 23616, + 35784: 26354, + 35785: 26997, + 35786: 29577, + 35787: 26704, + 35788: 31873, + 35789: 20677, + 35790: 21220, + 35791: 22343, + 35792: 24062, + 35793: 37670, + 35794: 26020, + 35795: 27427, + 35796: 27453, + 35797: 29748, + 35798: 31105, + 35799: 31165, + 35800: 31563, + 35801: 32202, + 35802: 33465, + 35803: 33740, + 35804: 34943, + 35805: 35167, + 35806: 35641, + 35807: 36817, + 35808: 37329, + 35809: 21535, + 35810: 37504, + 35811: 20061, + 35812: 20534, + 35813: 21477, + 35814: 21306, + 35815: 29399, + 35816: 29590, + 35817: 30697, + 35818: 33510, + 35819: 36527, + 35820: 39366, + 35821: 39368, + 35822: 39378, + 35823: 20855, + 35824: 24858, + 35825: 34398, + 35826: 21936, + 35827: 31354, + 35828: 20598, + 35829: 23507, + 35830: 36935, + 35831: 38533, + 35832: 20018, + 35833: 27355, + 35834: 37351, + 35835: 23633, + 35836: 23624, + 35904: 25496, + 35905: 31391, + 35906: 27795, + 35907: 38772, + 35908: 36705, + 35909: 31402, + 35910: 29066, + 35911: 38536, + 35912: 31874, + 35913: 26647, + 35914: 32368, + 35915: 26705, + 35916: 37740, + 35917: 21234, + 35918: 21531, + 35919: 34219, + 35920: 35347, + 35921: 32676, + 35922: 36557, + 35923: 37089, + 35924: 21350, + 35925: 34952, + 35926: 31041, + 35927: 20418, + 35928: 20670, + 35929: 21009, + 35930: 20804, + 35931: 21843, + 35932: 22317, + 35933: 29674, + 35934: 22411, + 35935: 22865, + 35936: 24418, + 35937: 24452, + 35938: 24693, + 35939: 24950, + 35940: 24935, + 35941: 25001, + 35942: 25522, + 35943: 25658, + 35944: 25964, + 35945: 26223, + 35946: 26690, + 35947: 28179, + 35948: 30054, + 35949: 31293, + 35950: 31995, + 35951: 32076, + 35952: 32153, + 35953: 32331, + 35954: 32619, + 35955: 33550, + 35956: 33610, + 35957: 34509, + 35958: 35336, + 35959: 35427, + 35960: 35686, + 35961: 36605, + 35962: 38938, + 35963: 40335, + 35964: 33464, + 35965: 36814, + 35966: 39912, + 35968: 21127, + 35969: 25119, + 35970: 25731, + 35971: 28608, + 35972: 38553, + 35973: 26689, + 35974: 20625, + 35975: 27424, + 35976: 27770, + 35977: 28500, + 35978: 31348, + 35979: 32080, + 35980: 34880, + 35981: 35363, + 35982: 26376, + 35983: 20214, + 35984: 20537, + 35985: 20518, + 35986: 20581, + 35987: 20860, + 35988: 21048, + 35989: 21091, + 35990: 21927, + 35991: 22287, + 35992: 22533, + 35993: 23244, + 35994: 24314, + 35995: 25010, + 35996: 25080, + 35997: 25331, + 35998: 25458, + 35999: 26908, + 36e3: 27177, + 36001: 29309, + 36002: 29356, + 36003: 29486, + 36004: 30740, + 36005: 30831, + 36006: 32121, + 36007: 30476, + 36008: 32937, + 36009: 35211, + 36010: 35609, + 36011: 36066, + 36012: 36562, + 36013: 36963, + 36014: 37749, + 36015: 38522, + 36016: 38997, + 36017: 39443, + 36018: 40568, + 36019: 20803, + 36020: 21407, + 36021: 21427, + 36022: 24187, + 36023: 24358, + 36024: 28187, + 36025: 28304, + 36026: 29572, + 36027: 29694, + 36028: 32067, + 36029: 33335, + 36030: 35328, + 36031: 35578, + 36032: 38480, + 36033: 20046, + 36034: 20491, + 36035: 21476, + 36036: 21628, + 36037: 22266, + 36038: 22993, + 36039: 23396, + 36040: 24049, + 36041: 24235, + 36042: 24359, + 36043: 25144, + 36044: 25925, + 36045: 26543, + 36046: 28246, + 36047: 29392, + 36048: 31946, + 36049: 34996, + 36050: 32929, + 36051: 32993, + 36052: 33776, + 36053: 34382, + 36054: 35463, + 36055: 36328, + 36056: 37431, + 36057: 38599, + 36058: 39015, + 36059: 40723, + 36060: 20116, + 36061: 20114, + 36062: 20237, + 36063: 21320, + 36064: 21577, + 36065: 21566, + 36066: 23087, + 36067: 24460, + 36068: 24481, + 36069: 24735, + 36070: 26791, + 36071: 27278, + 36072: 29786, + 36073: 30849, + 36074: 35486, + 36075: 35492, + 36076: 35703, + 36077: 37264, + 36078: 20062, + 36079: 39881, + 36080: 20132, + 36081: 20348, + 36082: 20399, + 36083: 20505, + 36084: 20502, + 36085: 20809, + 36086: 20844, + 36087: 21151, + 36088: 21177, + 36089: 21246, + 36090: 21402, + 36091: 21475, + 36092: 21521, + 36160: 21518, + 36161: 21897, + 36162: 22353, + 36163: 22434, + 36164: 22909, + 36165: 23380, + 36166: 23389, + 36167: 23439, + 36168: 24037, + 36169: 24039, + 36170: 24055, + 36171: 24184, + 36172: 24195, + 36173: 24218, + 36174: 24247, + 36175: 24344, + 36176: 24658, + 36177: 24908, + 36178: 25239, + 36179: 25304, + 36180: 25511, + 36181: 25915, + 36182: 26114, + 36183: 26179, + 36184: 26356, + 36185: 26477, + 36186: 26657, + 36187: 26775, + 36188: 27083, + 36189: 27743, + 36190: 27946, + 36191: 28009, + 36192: 28207, + 36193: 28317, + 36194: 30002, + 36195: 30343, + 36196: 30828, + 36197: 31295, + 36198: 31968, + 36199: 32005, + 36200: 32024, + 36201: 32094, + 36202: 32177, + 36203: 32789, + 36204: 32771, + 36205: 32943, + 36206: 32945, + 36207: 33108, + 36208: 33167, + 36209: 33322, + 36210: 33618, + 36211: 34892, + 36212: 34913, + 36213: 35611, + 36214: 36002, + 36215: 36092, + 36216: 37066, + 36217: 37237, + 36218: 37489, + 36219: 30783, + 36220: 37628, + 36221: 38308, + 36222: 38477, + 36224: 38917, + 36225: 39321, + 36226: 39640, + 36227: 40251, + 36228: 21083, + 36229: 21163, + 36230: 21495, + 36231: 21512, + 36232: 22741, + 36233: 25335, + 36234: 28640, + 36235: 35946, + 36236: 36703, + 36237: 40633, + 36238: 20811, + 36239: 21051, + 36240: 21578, + 36241: 22269, + 36242: 31296, + 36243: 37239, + 36244: 40288, + 36245: 40658, + 36246: 29508, + 36247: 28425, + 36248: 33136, + 36249: 29969, + 36250: 24573, + 36251: 24794, + 36252: 39592, + 36253: 29403, + 36254: 36796, + 36255: 27492, + 36256: 38915, + 36257: 20170, + 36258: 22256, + 36259: 22372, + 36260: 22718, + 36261: 23130, + 36262: 24680, + 36263: 25031, + 36264: 26127, + 36265: 26118, + 36266: 26681, + 36267: 26801, + 36268: 28151, + 36269: 30165, + 36270: 32058, + 36271: 33390, + 36272: 39746, + 36273: 20123, + 36274: 20304, + 36275: 21449, + 36276: 21766, + 36277: 23919, + 36278: 24038, + 36279: 24046, + 36280: 26619, + 36281: 27801, + 36282: 29811, + 36283: 30722, + 36284: 35408, + 36285: 37782, + 36286: 35039, + 36287: 22352, + 36288: 24231, + 36289: 25387, + 36290: 20661, + 36291: 20652, + 36292: 20877, + 36293: 26368, + 36294: 21705, + 36295: 22622, + 36296: 22971, + 36297: 23472, + 36298: 24425, + 36299: 25165, + 36300: 25505, + 36301: 26685, + 36302: 27507, + 36303: 28168, + 36304: 28797, + 36305: 37319, + 36306: 29312, + 36307: 30741, + 36308: 30758, + 36309: 31085, + 36310: 25998, + 36311: 32048, + 36312: 33756, + 36313: 35009, + 36314: 36617, + 36315: 38555, + 36316: 21092, + 36317: 22312, + 36318: 26448, + 36319: 32618, + 36320: 36001, + 36321: 20916, + 36322: 22338, + 36323: 38442, + 36324: 22586, + 36325: 27018, + 36326: 32948, + 36327: 21682, + 36328: 23822, + 36329: 22524, + 36330: 30869, + 36331: 40442, + 36332: 20316, + 36333: 21066, + 36334: 21643, + 36335: 25662, + 36336: 26152, + 36337: 26388, + 36338: 26613, + 36339: 31364, + 36340: 31574, + 36341: 32034, + 36342: 37679, + 36343: 26716, + 36344: 39853, + 36345: 31545, + 36346: 21273, + 36347: 20874, + 36348: 21047, + 36416: 23519, + 36417: 25334, + 36418: 25774, + 36419: 25830, + 36420: 26413, + 36421: 27578, + 36422: 34217, + 36423: 38609, + 36424: 30352, + 36425: 39894, + 36426: 25420, + 36427: 37638, + 36428: 39851, + 36429: 30399, + 36430: 26194, + 36431: 19977, + 36432: 20632, + 36433: 21442, + 36434: 23665, + 36435: 24808, + 36436: 25746, + 36437: 25955, + 36438: 26719, + 36439: 29158, + 36440: 29642, + 36441: 29987, + 36442: 31639, + 36443: 32386, + 36444: 34453, + 36445: 35715, + 36446: 36059, + 36447: 37240, + 36448: 39184, + 36449: 26028, + 36450: 26283, + 36451: 27531, + 36452: 20181, + 36453: 20180, + 36454: 20282, + 36455: 20351, + 36456: 21050, + 36457: 21496, + 36458: 21490, + 36459: 21987, + 36460: 22235, + 36461: 22763, + 36462: 22987, + 36463: 22985, + 36464: 23039, + 36465: 23376, + 36466: 23629, + 36467: 24066, + 36468: 24107, + 36469: 24535, + 36470: 24605, + 36471: 25351, + 36472: 25903, + 36473: 23388, + 36474: 26031, + 36475: 26045, + 36476: 26088, + 36477: 26525, + 36478: 27490, + 36480: 27515, + 36481: 27663, + 36482: 29509, + 36483: 31049, + 36484: 31169, + 36485: 31992, + 36486: 32025, + 36487: 32043, + 36488: 32930, + 36489: 33026, + 36490: 33267, + 36491: 35222, + 36492: 35422, + 36493: 35433, + 36494: 35430, + 36495: 35468, + 36496: 35566, + 36497: 36039, + 36498: 36060, + 36499: 38604, + 36500: 39164, + 36501: 27503, + 36502: 20107, + 36503: 20284, + 36504: 20365, + 36505: 20816, + 36506: 23383, + 36507: 23546, + 36508: 24904, + 36509: 25345, + 36510: 26178, + 36511: 27425, + 36512: 28363, + 36513: 27835, + 36514: 29246, + 36515: 29885, + 36516: 30164, + 36517: 30913, + 36518: 31034, + 36519: 32780, + 36520: 32819, + 36521: 33258, + 36522: 33940, + 36523: 36766, + 36524: 27728, + 36525: 40575, + 36526: 24335, + 36527: 35672, + 36528: 40235, + 36529: 31482, + 36530: 36600, + 36531: 23437, + 36532: 38635, + 36533: 19971, + 36534: 21489, + 36535: 22519, + 36536: 22833, + 36537: 23241, + 36538: 23460, + 36539: 24713, + 36540: 28287, + 36541: 28422, + 36542: 30142, + 36543: 36074, + 36544: 23455, + 36545: 34048, + 36546: 31712, + 36547: 20594, + 36548: 26612, + 36549: 33437, + 36550: 23649, + 36551: 34122, + 36552: 32286, + 36553: 33294, + 36554: 20889, + 36555: 23556, + 36556: 25448, + 36557: 36198, + 36558: 26012, + 36559: 29038, + 36560: 31038, + 36561: 32023, + 36562: 32773, + 36563: 35613, + 36564: 36554, + 36565: 36974, + 36566: 34503, + 36567: 37034, + 36568: 20511, + 36569: 21242, + 36570: 23610, + 36571: 26451, + 36572: 28796, + 36573: 29237, + 36574: 37196, + 36575: 37320, + 36576: 37675, + 36577: 33509, + 36578: 23490, + 36579: 24369, + 36580: 24825, + 36581: 20027, + 36582: 21462, + 36583: 23432, + 36584: 25163, + 36585: 26417, + 36586: 27530, + 36587: 29417, + 36588: 29664, + 36589: 31278, + 36590: 33131, + 36591: 36259, + 36592: 37202, + 36593: 39318, + 36594: 20754, + 36595: 21463, + 36596: 21610, + 36597: 23551, + 36598: 25480, + 36599: 27193, + 36600: 32172, + 36601: 38656, + 36602: 22234, + 36603: 21454, + 36604: 21608, + 36672: 23447, + 36673: 23601, + 36674: 24030, + 36675: 20462, + 36676: 24833, + 36677: 25342, + 36678: 27954, + 36679: 31168, + 36680: 31179, + 36681: 32066, + 36682: 32333, + 36683: 32722, + 36684: 33261, + 36685: 33311, + 36686: 33936, + 36687: 34886, + 36688: 35186, + 36689: 35728, + 36690: 36468, + 36691: 36655, + 36692: 36913, + 36693: 37195, + 36694: 37228, + 36695: 38598, + 36696: 37276, + 36697: 20160, + 36698: 20303, + 36699: 20805, + 36700: 21313, + 36701: 24467, + 36702: 25102, + 36703: 26580, + 36704: 27713, + 36705: 28171, + 36706: 29539, + 36707: 32294, + 36708: 37325, + 36709: 37507, + 36710: 21460, + 36711: 22809, + 36712: 23487, + 36713: 28113, + 36714: 31069, + 36715: 32302, + 36716: 31899, + 36717: 22654, + 36718: 29087, + 36719: 20986, + 36720: 34899, + 36721: 36848, + 36722: 20426, + 36723: 23803, + 36724: 26149, + 36725: 30636, + 36726: 31459, + 36727: 33308, + 36728: 39423, + 36729: 20934, + 36730: 24490, + 36731: 26092, + 36732: 26991, + 36733: 27529, + 36734: 28147, + 36736: 28310, + 36737: 28516, + 36738: 30462, + 36739: 32020, + 36740: 24033, + 36741: 36981, + 36742: 37255, + 36743: 38918, + 36744: 20966, + 36745: 21021, + 36746: 25152, + 36747: 26257, + 36748: 26329, + 36749: 28186, + 36750: 24246, + 36751: 32210, + 36752: 32626, + 36753: 26360, + 36754: 34223, + 36755: 34295, + 36756: 35576, + 36757: 21161, + 36758: 21465, + 36759: 22899, + 36760: 24207, + 36761: 24464, + 36762: 24661, + 36763: 37604, + 36764: 38500, + 36765: 20663, + 36766: 20767, + 36767: 21213, + 36768: 21280, + 36769: 21319, + 36770: 21484, + 36771: 21736, + 36772: 21830, + 36773: 21809, + 36774: 22039, + 36775: 22888, + 36776: 22974, + 36777: 23100, + 36778: 23477, + 36779: 23558, + 36780: 23567, + 36781: 23569, + 36782: 23578, + 36783: 24196, + 36784: 24202, + 36785: 24288, + 36786: 24432, + 36787: 25215, + 36788: 25220, + 36789: 25307, + 36790: 25484, + 36791: 25463, + 36792: 26119, + 36793: 26124, + 36794: 26157, + 36795: 26230, + 36796: 26494, + 36797: 26786, + 36798: 27167, + 36799: 27189, + 36800: 27836, + 36801: 28040, + 36802: 28169, + 36803: 28248, + 36804: 28988, + 36805: 28966, + 36806: 29031, + 36807: 30151, + 36808: 30465, + 36809: 30813, + 36810: 30977, + 36811: 31077, + 36812: 31216, + 36813: 31456, + 36814: 31505, + 36815: 31911, + 36816: 32057, + 36817: 32918, + 36818: 33750, + 36819: 33931, + 36820: 34121, + 36821: 34909, + 36822: 35059, + 36823: 35359, + 36824: 35388, + 36825: 35412, + 36826: 35443, + 36827: 35937, + 36828: 36062, + 36829: 37284, + 36830: 37478, + 36831: 37758, + 36832: 37912, + 36833: 38556, + 36834: 38808, + 36835: 19978, + 36836: 19976, + 36837: 19998, + 36838: 20055, + 36839: 20887, + 36840: 21104, + 36841: 22478, + 36842: 22580, + 36843: 22732, + 36844: 23330, + 36845: 24120, + 36846: 24773, + 36847: 25854, + 36848: 26465, + 36849: 26454, + 36850: 27972, + 36851: 29366, + 36852: 30067, + 36853: 31331, + 36854: 33976, + 36855: 35698, + 36856: 37304, + 36857: 37664, + 36858: 22065, + 36859: 22516, + 36860: 39166, + 36928: 25325, + 36929: 26893, + 36930: 27542, + 36931: 29165, + 36932: 32340, + 36933: 32887, + 36934: 33394, + 36935: 35302, + 36936: 39135, + 36937: 34645, + 36938: 36785, + 36939: 23611, + 36940: 20280, + 36941: 20449, + 36942: 20405, + 36943: 21767, + 36944: 23072, + 36945: 23517, + 36946: 23529, + 36947: 24515, + 36948: 24910, + 36949: 25391, + 36950: 26032, + 36951: 26187, + 36952: 26862, + 36953: 27035, + 36954: 28024, + 36955: 28145, + 36956: 30003, + 36957: 30137, + 36958: 30495, + 36959: 31070, + 36960: 31206, + 36961: 32051, + 36962: 33251, + 36963: 33455, + 36964: 34218, + 36965: 35242, + 36966: 35386, + 36967: 36523, + 36968: 36763, + 36969: 36914, + 36970: 37341, + 36971: 38663, + 36972: 20154, + 36973: 20161, + 36974: 20995, + 36975: 22645, + 36976: 22764, + 36977: 23563, + 36978: 29978, + 36979: 23613, + 36980: 33102, + 36981: 35338, + 36982: 36805, + 36983: 38499, + 36984: 38765, + 36985: 31525, + 36986: 35535, + 36987: 38920, + 36988: 37218, + 36989: 22259, + 36990: 21416, + 36992: 36887, + 36993: 21561, + 36994: 22402, + 36995: 24101, + 36996: 25512, + 36997: 27700, + 36998: 28810, + 36999: 30561, + 37e3: 31883, + 37001: 32736, + 37002: 34928, + 37003: 36930, + 37004: 37204, + 37005: 37648, + 37006: 37656, + 37007: 38543, + 37008: 29790, + 37009: 39620, + 37010: 23815, + 37011: 23913, + 37012: 25968, + 37013: 26530, + 37014: 36264, + 37015: 38619, + 37016: 25454, + 37017: 26441, + 37018: 26905, + 37019: 33733, + 37020: 38935, + 37021: 38592, + 37022: 35070, + 37023: 28548, + 37024: 25722, + 37025: 23544, + 37026: 19990, + 37027: 28716, + 37028: 30045, + 37029: 26159, + 37030: 20932, + 37031: 21046, + 37032: 21218, + 37033: 22995, + 37034: 24449, + 37035: 24615, + 37036: 25104, + 37037: 25919, + 37038: 25972, + 37039: 26143, + 37040: 26228, + 37041: 26866, + 37042: 26646, + 37043: 27491, + 37044: 28165, + 37045: 29298, + 37046: 29983, + 37047: 30427, + 37048: 31934, + 37049: 32854, + 37050: 22768, + 37051: 35069, + 37052: 35199, + 37053: 35488, + 37054: 35475, + 37055: 35531, + 37056: 36893, + 37057: 37266, + 37058: 38738, + 37059: 38745, + 37060: 25993, + 37061: 31246, + 37062: 33030, + 37063: 38587, + 37064: 24109, + 37065: 24796, + 37066: 25114, + 37067: 26021, + 37068: 26132, + 37069: 26512, + 37070: 30707, + 37071: 31309, + 37072: 31821, + 37073: 32318, + 37074: 33034, + 37075: 36012, + 37076: 36196, + 37077: 36321, + 37078: 36447, + 37079: 30889, + 37080: 20999, + 37081: 25305, + 37082: 25509, + 37083: 25666, + 37084: 25240, + 37085: 35373, + 37086: 31363, + 37087: 31680, + 37088: 35500, + 37089: 38634, + 37090: 32118, + 37091: 33292, + 37092: 34633, + 37093: 20185, + 37094: 20808, + 37095: 21315, + 37096: 21344, + 37097: 23459, + 37098: 23554, + 37099: 23574, + 37100: 24029, + 37101: 25126, + 37102: 25159, + 37103: 25776, + 37104: 26643, + 37105: 26676, + 37106: 27849, + 37107: 27973, + 37108: 27927, + 37109: 26579, + 37110: 28508, + 37111: 29006, + 37112: 29053, + 37113: 26059, + 37114: 31359, + 37115: 31661, + 37116: 32218, + 37184: 32330, + 37185: 32680, + 37186: 33146, + 37187: 33307, + 37188: 33337, + 37189: 34214, + 37190: 35438, + 37191: 36046, + 37192: 36341, + 37193: 36984, + 37194: 36983, + 37195: 37549, + 37196: 37521, + 37197: 38275, + 37198: 39854, + 37199: 21069, + 37200: 21892, + 37201: 28472, + 37202: 28982, + 37203: 20840, + 37204: 31109, + 37205: 32341, + 37206: 33203, + 37207: 31950, + 37208: 22092, + 37209: 22609, + 37210: 23720, + 37211: 25514, + 37212: 26366, + 37213: 26365, + 37214: 26970, + 37215: 29401, + 37216: 30095, + 37217: 30094, + 37218: 30990, + 37219: 31062, + 37220: 31199, + 37221: 31895, + 37222: 32032, + 37223: 32068, + 37224: 34311, + 37225: 35380, + 37226: 38459, + 37227: 36961, + 37228: 40736, + 37229: 20711, + 37230: 21109, + 37231: 21452, + 37232: 21474, + 37233: 20489, + 37234: 21930, + 37235: 22766, + 37236: 22863, + 37237: 29245, + 37238: 23435, + 37239: 23652, + 37240: 21277, + 37241: 24803, + 37242: 24819, + 37243: 25436, + 37244: 25475, + 37245: 25407, + 37246: 25531, + 37248: 25805, + 37249: 26089, + 37250: 26361, + 37251: 24035, + 37252: 27085, + 37253: 27133, + 37254: 28437, + 37255: 29157, + 37256: 20105, + 37257: 30185, + 37258: 30456, + 37259: 31379, + 37260: 31967, + 37261: 32207, + 37262: 32156, + 37263: 32865, + 37264: 33609, + 37265: 33624, + 37266: 33900, + 37267: 33980, + 37268: 34299, + 37269: 35013, + 37270: 36208, + 37271: 36865, + 37272: 36973, + 37273: 37783, + 37274: 38684, + 37275: 39442, + 37276: 20687, + 37277: 22679, + 37278: 24974, + 37279: 33235, + 37280: 34101, + 37281: 36104, + 37282: 36896, + 37283: 20419, + 37284: 20596, + 37285: 21063, + 37286: 21363, + 37287: 24687, + 37288: 25417, + 37289: 26463, + 37290: 28204, + 37291: 36275, + 37292: 36895, + 37293: 20439, + 37294: 23646, + 37295: 36042, + 37296: 26063, + 37297: 32154, + 37298: 21330, + 37299: 34966, + 37300: 20854, + 37301: 25539, + 37302: 23384, + 37303: 23403, + 37304: 23562, + 37305: 25613, + 37306: 26449, + 37307: 36956, + 37308: 20182, + 37309: 22810, + 37310: 22826, + 37311: 27760, + 37312: 35409, + 37313: 21822, + 37314: 22549, + 37315: 22949, + 37316: 24816, + 37317: 25171, + 37318: 26561, + 37319: 33333, + 37320: 26965, + 37321: 38464, + 37322: 39364, + 37323: 39464, + 37324: 20307, + 37325: 22534, + 37326: 23550, + 37327: 32784, + 37328: 23729, + 37329: 24111, + 37330: 24453, + 37331: 24608, + 37332: 24907, + 37333: 25140, + 37334: 26367, + 37335: 27888, + 37336: 28382, + 37337: 32974, + 37338: 33151, + 37339: 33492, + 37340: 34955, + 37341: 36024, + 37342: 36864, + 37343: 36910, + 37344: 38538, + 37345: 40667, + 37346: 39899, + 37347: 20195, + 37348: 21488, + 37349: 22823, + 37350: 31532, + 37351: 37261, + 37352: 38988, + 37353: 40441, + 37354: 28381, + 37355: 28711, + 37356: 21331, + 37357: 21828, + 37358: 23429, + 37359: 25176, + 37360: 25246, + 37361: 25299, + 37362: 27810, + 37363: 28655, + 37364: 29730, + 37365: 35351, + 37366: 37944, + 37367: 28609, + 37368: 35582, + 37369: 33592, + 37370: 20967, + 37371: 34552, + 37372: 21482, + 37440: 21481, + 37441: 20294, + 37442: 36948, + 37443: 36784, + 37444: 22890, + 37445: 33073, + 37446: 24061, + 37447: 31466, + 37448: 36799, + 37449: 26842, + 37450: 35895, + 37451: 29432, + 37452: 40008, + 37453: 27197, + 37454: 35504, + 37455: 20025, + 37456: 21336, + 37457: 22022, + 37458: 22374, + 37459: 25285, + 37460: 25506, + 37461: 26086, + 37462: 27470, + 37463: 28129, + 37464: 28251, + 37465: 28845, + 37466: 30701, + 37467: 31471, + 37468: 31658, + 37469: 32187, + 37470: 32829, + 37471: 32966, + 37472: 34507, + 37473: 35477, + 37474: 37723, + 37475: 22243, + 37476: 22727, + 37477: 24382, + 37478: 26029, + 37479: 26262, + 37480: 27264, + 37481: 27573, + 37482: 30007, + 37483: 35527, + 37484: 20516, + 37485: 30693, + 37486: 22320, + 37487: 24347, + 37488: 24677, + 37489: 26234, + 37490: 27744, + 37491: 30196, + 37492: 31258, + 37493: 32622, + 37494: 33268, + 37495: 34584, + 37496: 36933, + 37497: 39347, + 37498: 31689, + 37499: 30044, + 37500: 31481, + 37501: 31569, + 37502: 33988, + 37504: 36880, + 37505: 31209, + 37506: 31378, + 37507: 33590, + 37508: 23265, + 37509: 30528, + 37510: 20013, + 37511: 20210, + 37512: 23449, + 37513: 24544, + 37514: 25277, + 37515: 26172, + 37516: 26609, + 37517: 27880, + 37518: 34411, + 37519: 34935, + 37520: 35387, + 37521: 37198, + 37522: 37619, + 37523: 39376, + 37524: 27159, + 37525: 28710, + 37526: 29482, + 37527: 33511, + 37528: 33879, + 37529: 36015, + 37530: 19969, + 37531: 20806, + 37532: 20939, + 37533: 21899, + 37534: 23541, + 37535: 24086, + 37536: 24115, + 37537: 24193, + 37538: 24340, + 37539: 24373, + 37540: 24427, + 37541: 24500, + 37542: 25074, + 37543: 25361, + 37544: 26274, + 37545: 26397, + 37546: 28526, + 37547: 29266, + 37548: 30010, + 37549: 30522, + 37550: 32884, + 37551: 33081, + 37552: 33144, + 37553: 34678, + 37554: 35519, + 37555: 35548, + 37556: 36229, + 37557: 36339, + 37558: 37530, + 37559: 38263, + 37560: 38914, + 37561: 40165, + 37562: 21189, + 37563: 25431, + 37564: 30452, + 37565: 26389, + 37566: 27784, + 37567: 29645, + 37568: 36035, + 37569: 37806, + 37570: 38515, + 37571: 27941, + 37572: 22684, + 37573: 26894, + 37574: 27084, + 37575: 36861, + 37576: 37786, + 37577: 30171, + 37578: 36890, + 37579: 22618, + 37580: 26626, + 37581: 25524, + 37582: 27131, + 37583: 20291, + 37584: 28460, + 37585: 26584, + 37586: 36795, + 37587: 34086, + 37588: 32180, + 37589: 37716, + 37590: 26943, + 37591: 28528, + 37592: 22378, + 37593: 22775, + 37594: 23340, + 37595: 32044, + 37596: 29226, + 37597: 21514, + 37598: 37347, + 37599: 40372, + 37600: 20141, + 37601: 20302, + 37602: 20572, + 37603: 20597, + 37604: 21059, + 37605: 35998, + 37606: 21576, + 37607: 22564, + 37608: 23450, + 37609: 24093, + 37610: 24213, + 37611: 24237, + 37612: 24311, + 37613: 24351, + 37614: 24716, + 37615: 25269, + 37616: 25402, + 37617: 25552, + 37618: 26799, + 37619: 27712, + 37620: 30855, + 37621: 31118, + 37622: 31243, + 37623: 32224, + 37624: 33351, + 37625: 35330, + 37626: 35558, + 37627: 36420, + 37628: 36883, + 37696: 37048, + 37697: 37165, + 37698: 37336, + 37699: 40718, + 37700: 27877, + 37701: 25688, + 37702: 25826, + 37703: 25973, + 37704: 28404, + 37705: 30340, + 37706: 31515, + 37707: 36969, + 37708: 37841, + 37709: 28346, + 37710: 21746, + 37711: 24505, + 37712: 25764, + 37713: 36685, + 37714: 36845, + 37715: 37444, + 37716: 20856, + 37717: 22635, + 37718: 22825, + 37719: 23637, + 37720: 24215, + 37721: 28155, + 37722: 32399, + 37723: 29980, + 37724: 36028, + 37725: 36578, + 37726: 39003, + 37727: 28857, + 37728: 20253, + 37729: 27583, + 37730: 28593, + 37731: 3e4, + 37732: 38651, + 37733: 20814, + 37734: 21520, + 37735: 22581, + 37736: 22615, + 37737: 22956, + 37738: 23648, + 37739: 24466, + 37740: 26007, + 37741: 26460, + 37742: 28193, + 37743: 30331, + 37744: 33759, + 37745: 36077, + 37746: 36884, + 37747: 37117, + 37748: 37709, + 37749: 30757, + 37750: 30778, + 37751: 21162, + 37752: 24230, + 37753: 22303, + 37754: 22900, + 37755: 24594, + 37756: 20498, + 37757: 20826, + 37758: 20908, + 37760: 20941, + 37761: 20992, + 37762: 21776, + 37763: 22612, + 37764: 22616, + 37765: 22871, + 37766: 23445, + 37767: 23798, + 37768: 23947, + 37769: 24764, + 37770: 25237, + 37771: 25645, + 37772: 26481, + 37773: 26691, + 37774: 26812, + 37775: 26847, + 37776: 30423, + 37777: 28120, + 37778: 28271, + 37779: 28059, + 37780: 28783, + 37781: 29128, + 37782: 24403, + 37783: 30168, + 37784: 31095, + 37785: 31561, + 37786: 31572, + 37787: 31570, + 37788: 31958, + 37789: 32113, + 37790: 21040, + 37791: 33891, + 37792: 34153, + 37793: 34276, + 37794: 35342, + 37795: 35588, + 37796: 35910, + 37797: 36367, + 37798: 36867, + 37799: 36879, + 37800: 37913, + 37801: 38518, + 37802: 38957, + 37803: 39472, + 37804: 38360, + 37805: 20685, + 37806: 21205, + 37807: 21516, + 37808: 22530, + 37809: 23566, + 37810: 24999, + 37811: 25758, + 37812: 27934, + 37813: 30643, + 37814: 31461, + 37815: 33012, + 37816: 33796, + 37817: 36947, + 37818: 37509, + 37819: 23776, + 37820: 40199, + 37821: 21311, + 37822: 24471, + 37823: 24499, + 37824: 28060, + 37825: 29305, + 37826: 30563, + 37827: 31167, + 37828: 31716, + 37829: 27602, + 37830: 29420, + 37831: 35501, + 37832: 26627, + 37833: 27233, + 37834: 20984, + 37835: 31361, + 37836: 26932, + 37837: 23626, + 37838: 40182, + 37839: 33515, + 37840: 23493, + 37841: 37193, + 37842: 28702, + 37843: 22136, + 37844: 23663, + 37845: 24775, + 37846: 25958, + 37847: 27788, + 37848: 35930, + 37849: 36929, + 37850: 38931, + 37851: 21585, + 37852: 26311, + 37853: 37389, + 37854: 22856, + 37855: 37027, + 37856: 20869, + 37857: 20045, + 37858: 20970, + 37859: 34201, + 37860: 35598, + 37861: 28760, + 37862: 25466, + 37863: 37707, + 37864: 26978, + 37865: 39348, + 37866: 32260, + 37867: 30071, + 37868: 21335, + 37869: 26976, + 37870: 36575, + 37871: 38627, + 37872: 27741, + 37873: 20108, + 37874: 23612, + 37875: 24336, + 37876: 36841, + 37877: 21250, + 37878: 36049, + 37879: 32905, + 37880: 34425, + 37881: 24319, + 37882: 26085, + 37883: 20083, + 37884: 20837, + 37952: 22914, + 37953: 23615, + 37954: 38894, + 37955: 20219, + 37956: 22922, + 37957: 24525, + 37958: 35469, + 37959: 28641, + 37960: 31152, + 37961: 31074, + 37962: 23527, + 37963: 33905, + 37964: 29483, + 37965: 29105, + 37966: 24180, + 37967: 24565, + 37968: 25467, + 37969: 25754, + 37970: 29123, + 37971: 31896, + 37972: 20035, + 37973: 24316, + 37974: 20043, + 37975: 22492, + 37976: 22178, + 37977: 24745, + 37978: 28611, + 37979: 32013, + 37980: 33021, + 37981: 33075, + 37982: 33215, + 37983: 36786, + 37984: 35223, + 37985: 34468, + 37986: 24052, + 37987: 25226, + 37988: 25773, + 37989: 35207, + 37990: 26487, + 37991: 27874, + 37992: 27966, + 37993: 29750, + 37994: 30772, + 37995: 23110, + 37996: 32629, + 37997: 33453, + 37998: 39340, + 37999: 20467, + 38e3: 24259, + 38001: 25309, + 38002: 25490, + 38003: 25943, + 38004: 26479, + 38005: 30403, + 38006: 29260, + 38007: 32972, + 38008: 32954, + 38009: 36649, + 38010: 37197, + 38011: 20493, + 38012: 22521, + 38013: 23186, + 38014: 26757, + 38016: 26995, + 38017: 29028, + 38018: 29437, + 38019: 36023, + 38020: 22770, + 38021: 36064, + 38022: 38506, + 38023: 36889, + 38024: 34687, + 38025: 31204, + 38026: 30695, + 38027: 33833, + 38028: 20271, + 38029: 21093, + 38030: 21338, + 38031: 25293, + 38032: 26575, + 38033: 27850, + 38034: 30333, + 38035: 31636, + 38036: 31893, + 38037: 33334, + 38038: 34180, + 38039: 36843, + 38040: 26333, + 38041: 28448, + 38042: 29190, + 38043: 32283, + 38044: 33707, + 38045: 39361, + 38046: 40614, + 38047: 20989, + 38048: 31665, + 38049: 30834, + 38050: 31672, + 38051: 32903, + 38052: 31560, + 38053: 27368, + 38054: 24161, + 38055: 32908, + 38056: 30033, + 38057: 30048, + 38058: 20843, + 38059: 37474, + 38060: 28300, + 38061: 30330, + 38062: 37271, + 38063: 39658, + 38064: 20240, + 38065: 32624, + 38066: 25244, + 38067: 31567, + 38068: 38309, + 38069: 40169, + 38070: 22138, + 38071: 22617, + 38072: 34532, + 38073: 38588, + 38074: 20276, + 38075: 21028, + 38076: 21322, + 38077: 21453, + 38078: 21467, + 38079: 24070, + 38080: 25644, + 38081: 26001, + 38082: 26495, + 38083: 27710, + 38084: 27726, + 38085: 29256, + 38086: 29359, + 38087: 29677, + 38088: 30036, + 38089: 32321, + 38090: 33324, + 38091: 34281, + 38092: 36009, + 38093: 31684, + 38094: 37318, + 38095: 29033, + 38096: 38930, + 38097: 39151, + 38098: 25405, + 38099: 26217, + 38100: 30058, + 38101: 30436, + 38102: 30928, + 38103: 34115, + 38104: 34542, + 38105: 21290, + 38106: 21329, + 38107: 21542, + 38108: 22915, + 38109: 24199, + 38110: 24444, + 38111: 24754, + 38112: 25161, + 38113: 25209, + 38114: 25259, + 38115: 26e3, + 38116: 27604, + 38117: 27852, + 38118: 30130, + 38119: 30382, + 38120: 30865, + 38121: 31192, + 38122: 32203, + 38123: 32631, + 38124: 32933, + 38125: 34987, + 38126: 35513, + 38127: 36027, + 38128: 36991, + 38129: 38750, + 38130: 39131, + 38131: 27147, + 38132: 31800, + 38133: 20633, + 38134: 23614, + 38135: 24494, + 38136: 26503, + 38137: 27608, + 38138: 29749, + 38139: 30473, + 38140: 32654, + 38208: 40763, + 38209: 26570, + 38210: 31255, + 38211: 21305, + 38212: 30091, + 38213: 39661, + 38214: 24422, + 38215: 33181, + 38216: 33777, + 38217: 32920, + 38218: 24380, + 38219: 24517, + 38220: 30050, + 38221: 31558, + 38222: 36924, + 38223: 26727, + 38224: 23019, + 38225: 23195, + 38226: 32016, + 38227: 30334, + 38228: 35628, + 38229: 20469, + 38230: 24426, + 38231: 27161, + 38232: 27703, + 38233: 28418, + 38234: 29922, + 38235: 31080, + 38236: 34920, + 38237: 35413, + 38238: 35961, + 38239: 24287, + 38240: 25551, + 38241: 30149, + 38242: 31186, + 38243: 33495, + 38244: 37672, + 38245: 37618, + 38246: 33948, + 38247: 34541, + 38248: 39981, + 38249: 21697, + 38250: 24428, + 38251: 25996, + 38252: 27996, + 38253: 28693, + 38254: 36007, + 38255: 36051, + 38256: 38971, + 38257: 25935, + 38258: 29942, + 38259: 19981, + 38260: 20184, + 38261: 22496, + 38262: 22827, + 38263: 23142, + 38264: 23500, + 38265: 20904, + 38266: 24067, + 38267: 24220, + 38268: 24598, + 38269: 25206, + 38270: 25975, + 38272: 26023, + 38273: 26222, + 38274: 28014, + 38275: 29238, + 38276: 31526, + 38277: 33104, + 38278: 33178, + 38279: 33433, + 38280: 35676, + 38281: 36e3, + 38282: 36070, + 38283: 36212, + 38284: 38428, + 38285: 38468, + 38286: 20398, + 38287: 25771, + 38288: 27494, + 38289: 33310, + 38290: 33889, + 38291: 34154, + 38292: 37096, + 38293: 23553, + 38294: 26963, + 38295: 39080, + 38296: 33914, + 38297: 34135, + 38298: 20239, + 38299: 21103, + 38300: 24489, + 38301: 24133, + 38302: 26381, + 38303: 31119, + 38304: 33145, + 38305: 35079, + 38306: 35206, + 38307: 28149, + 38308: 24343, + 38309: 25173, + 38310: 27832, + 38311: 20175, + 38312: 29289, + 38313: 39826, + 38314: 20998, + 38315: 21563, + 38316: 22132, + 38317: 22707, + 38318: 24996, + 38319: 25198, + 38320: 28954, + 38321: 22894, + 38322: 31881, + 38323: 31966, + 38324: 32027, + 38325: 38640, + 38326: 25991, + 38327: 32862, + 38328: 19993, + 38329: 20341, + 38330: 20853, + 38331: 22592, + 38332: 24163, + 38333: 24179, + 38334: 24330, + 38335: 26564, + 38336: 20006, + 38337: 34109, + 38338: 38281, + 38339: 38491, + 38340: 31859, + 38341: 38913, + 38342: 20731, + 38343: 22721, + 38344: 30294, + 38345: 30887, + 38346: 21029, + 38347: 30629, + 38348: 34065, + 38349: 31622, + 38350: 20559, + 38351: 22793, + 38352: 29255, + 38353: 31687, + 38354: 32232, + 38355: 36794, + 38356: 36820, + 38357: 36941, + 38358: 20415, + 38359: 21193, + 38360: 23081, + 38361: 24321, + 38362: 38829, + 38363: 20445, + 38364: 33303, + 38365: 37610, + 38366: 22275, + 38367: 25429, + 38368: 27497, + 38369: 29995, + 38370: 35036, + 38371: 36628, + 38372: 31298, + 38373: 21215, + 38374: 22675, + 38375: 24917, + 38376: 25098, + 38377: 26286, + 38378: 27597, + 38379: 31807, + 38380: 33769, + 38381: 20515, + 38382: 20472, + 38383: 21253, + 38384: 21574, + 38385: 22577, + 38386: 22857, + 38387: 23453, + 38388: 23792, + 38389: 23791, + 38390: 23849, + 38391: 24214, + 38392: 25265, + 38393: 25447, + 38394: 25918, + 38395: 26041, + 38396: 26379, + 38464: 27861, + 38465: 27873, + 38466: 28921, + 38467: 30770, + 38468: 32299, + 38469: 32990, + 38470: 33459, + 38471: 33804, + 38472: 34028, + 38473: 34562, + 38474: 35090, + 38475: 35370, + 38476: 35914, + 38477: 37030, + 38478: 37586, + 38479: 39165, + 38480: 40179, + 38481: 40300, + 38482: 20047, + 38483: 20129, + 38484: 20621, + 38485: 21078, + 38486: 22346, + 38487: 22952, + 38488: 24125, + 38489: 24536, + 38490: 24537, + 38491: 25151, + 38492: 26292, + 38493: 26395, + 38494: 26576, + 38495: 26834, + 38496: 20882, + 38497: 32033, + 38498: 32938, + 38499: 33192, + 38500: 35584, + 38501: 35980, + 38502: 36031, + 38503: 37502, + 38504: 38450, + 38505: 21536, + 38506: 38956, + 38507: 21271, + 38508: 20693, + 38509: 21340, + 38510: 22696, + 38511: 25778, + 38512: 26420, + 38513: 29287, + 38514: 30566, + 38515: 31302, + 38516: 37350, + 38517: 21187, + 38518: 27809, + 38519: 27526, + 38520: 22528, + 38521: 24140, + 38522: 22868, + 38523: 26412, + 38524: 32763, + 38525: 20961, + 38526: 30406, + 38528: 25705, + 38529: 30952, + 38530: 39764, + 38531: 40635, + 38532: 22475, + 38533: 22969, + 38534: 26151, + 38535: 26522, + 38536: 27598, + 38537: 21737, + 38538: 27097, + 38539: 24149, + 38540: 33180, + 38541: 26517, + 38542: 39850, + 38543: 26622, + 38544: 40018, + 38545: 26717, + 38546: 20134, + 38547: 20451, + 38548: 21448, + 38549: 25273, + 38550: 26411, + 38551: 27819, + 38552: 36804, + 38553: 20397, + 38554: 32365, + 38555: 40639, + 38556: 19975, + 38557: 24930, + 38558: 28288, + 38559: 28459, + 38560: 34067, + 38561: 21619, + 38562: 26410, + 38563: 39749, + 38564: 24051, + 38565: 31637, + 38566: 23724, + 38567: 23494, + 38568: 34588, + 38569: 28234, + 38570: 34001, + 38571: 31252, + 38572: 33032, + 38573: 22937, + 38574: 31885, + 38575: 27665, + 38576: 30496, + 38577: 21209, + 38578: 22818, + 38579: 28961, + 38580: 29279, + 38581: 30683, + 38582: 38695, + 38583: 40289, + 38584: 26891, + 38585: 23167, + 38586: 23064, + 38587: 20901, + 38588: 21517, + 38589: 21629, + 38590: 26126, + 38591: 30431, + 38592: 36855, + 38593: 37528, + 38594: 40180, + 38595: 23018, + 38596: 29277, + 38597: 28357, + 38598: 20813, + 38599: 26825, + 38600: 32191, + 38601: 32236, + 38602: 38754, + 38603: 40634, + 38604: 25720, + 38605: 27169, + 38606: 33538, + 38607: 22916, + 38608: 23391, + 38609: 27611, + 38610: 29467, + 38611: 30450, + 38612: 32178, + 38613: 32791, + 38614: 33945, + 38615: 20786, + 38616: 26408, + 38617: 40665, + 38618: 30446, + 38619: 26466, + 38620: 21247, + 38621: 39173, + 38622: 23588, + 38623: 25147, + 38624: 31870, + 38625: 36016, + 38626: 21839, + 38627: 24758, + 38628: 32011, + 38629: 38272, + 38630: 21249, + 38631: 20063, + 38632: 20918, + 38633: 22812, + 38634: 29242, + 38635: 32822, + 38636: 37326, + 38637: 24357, + 38638: 30690, + 38639: 21380, + 38640: 24441, + 38641: 32004, + 38642: 34220, + 38643: 35379, + 38644: 36493, + 38645: 38742, + 38646: 26611, + 38647: 34222, + 38648: 37971, + 38649: 24841, + 38650: 24840, + 38651: 27833, + 38652: 30290, + 38720: 35565, + 38721: 36664, + 38722: 21807, + 38723: 20305, + 38724: 20778, + 38725: 21191, + 38726: 21451, + 38727: 23461, + 38728: 24189, + 38729: 24736, + 38730: 24962, + 38731: 25558, + 38732: 26377, + 38733: 26586, + 38734: 28263, + 38735: 28044, + 38736: 29494, + 38737: 29495, + 38738: 30001, + 38739: 31056, + 38740: 35029, + 38741: 35480, + 38742: 36938, + 38743: 37009, + 38744: 37109, + 38745: 38596, + 38746: 34701, + 38747: 22805, + 38748: 20104, + 38749: 20313, + 38750: 19982, + 38751: 35465, + 38752: 36671, + 38753: 38928, + 38754: 20653, + 38755: 24188, + 38756: 22934, + 38757: 23481, + 38758: 24248, + 38759: 25562, + 38760: 25594, + 38761: 25793, + 38762: 26332, + 38763: 26954, + 38764: 27096, + 38765: 27915, + 38766: 28342, + 38767: 29076, + 38768: 29992, + 38769: 31407, + 38770: 32650, + 38771: 32768, + 38772: 33865, + 38773: 33993, + 38774: 35201, + 38775: 35617, + 38776: 36362, + 38777: 36965, + 38778: 38525, + 38779: 39178, + 38780: 24958, + 38781: 25233, + 38782: 27442, + 38784: 27779, + 38785: 28020, + 38786: 32716, + 38787: 32764, + 38788: 28096, + 38789: 32645, + 38790: 34746, + 38791: 35064, + 38792: 26469, + 38793: 33713, + 38794: 38972, + 38795: 38647, + 38796: 27931, + 38797: 32097, + 38798: 33853, + 38799: 37226, + 38800: 20081, + 38801: 21365, + 38802: 23888, + 38803: 27396, + 38804: 28651, + 38805: 34253, + 38806: 34349, + 38807: 35239, + 38808: 21033, + 38809: 21519, + 38810: 23653, + 38811: 26446, + 38812: 26792, + 38813: 29702, + 38814: 29827, + 38815: 30178, + 38816: 35023, + 38817: 35041, + 38818: 37324, + 38819: 38626, + 38820: 38520, + 38821: 24459, + 38822: 29575, + 38823: 31435, + 38824: 33870, + 38825: 25504, + 38826: 30053, + 38827: 21129, + 38828: 27969, + 38829: 28316, + 38830: 29705, + 38831: 30041, + 38832: 30827, + 38833: 31890, + 38834: 38534, + 38835: 31452, + 38836: 40845, + 38837: 20406, + 38838: 24942, + 38839: 26053, + 38840: 34396, + 38841: 20102, + 38842: 20142, + 38843: 20698, + 38844: 20001, + 38845: 20940, + 38846: 23534, + 38847: 26009, + 38848: 26753, + 38849: 28092, + 38850: 29471, + 38851: 30274, + 38852: 30637, + 38853: 31260, + 38854: 31975, + 38855: 33391, + 38856: 35538, + 38857: 36988, + 38858: 37327, + 38859: 38517, + 38860: 38936, + 38861: 21147, + 38862: 32209, + 38863: 20523, + 38864: 21400, + 38865: 26519, + 38866: 28107, + 38867: 29136, + 38868: 29747, + 38869: 33256, + 38870: 36650, + 38871: 38563, + 38872: 40023, + 38873: 40607, + 38874: 29792, + 38875: 22593, + 38876: 28057, + 38877: 32047, + 38878: 39006, + 38879: 20196, + 38880: 20278, + 38881: 20363, + 38882: 20919, + 38883: 21169, + 38884: 23994, + 38885: 24604, + 38886: 29618, + 38887: 31036, + 38888: 33491, + 38889: 37428, + 38890: 38583, + 38891: 38646, + 38892: 38666, + 38893: 40599, + 38894: 40802, + 38895: 26278, + 38896: 27508, + 38897: 21015, + 38898: 21155, + 38899: 28872, + 38900: 35010, + 38901: 24265, + 38902: 24651, + 38903: 24976, + 38904: 28451, + 38905: 29001, + 38906: 31806, + 38907: 32244, + 38908: 32879, + 38976: 34030, + 38977: 36899, + 38978: 37676, + 38979: 21570, + 38980: 39791, + 38981: 27347, + 38982: 28809, + 38983: 36034, + 38984: 36335, + 38985: 38706, + 38986: 21172, + 38987: 23105, + 38988: 24266, + 38989: 24324, + 38990: 26391, + 38991: 27004, + 38992: 27028, + 38993: 28010, + 38994: 28431, + 38995: 29282, + 38996: 29436, + 38997: 31725, + 38998: 32769, + 38999: 32894, + 39e3: 34635, + 39001: 37070, + 39002: 20845, + 39003: 40595, + 39004: 31108, + 39005: 32907, + 39006: 37682, + 39007: 35542, + 39008: 20525, + 39009: 21644, + 39010: 35441, + 39011: 27498, + 39012: 36036, + 39013: 33031, + 39014: 24785, + 39015: 26528, + 39016: 40434, + 39017: 20121, + 39018: 20120, + 39019: 39952, + 39020: 35435, + 39021: 34241, + 39022: 34152, + 39023: 26880, + 39024: 28286, + 39025: 30871, + 39026: 33109, + 39071: 24332, + 39072: 19984, + 39073: 19989, + 39074: 20010, + 39075: 20017, + 39076: 20022, + 39077: 20028, + 39078: 20031, + 39079: 20034, + 39080: 20054, + 39081: 20056, + 39082: 20098, + 39083: 20101, + 39084: 35947, + 39085: 20106, + 39086: 33298, + 39087: 24333, + 39088: 20110, + 39089: 20126, + 39090: 20127, + 39091: 20128, + 39092: 20130, + 39093: 20144, + 39094: 20147, + 39095: 20150, + 39096: 20174, + 39097: 20173, + 39098: 20164, + 39099: 20166, + 39100: 20162, + 39101: 20183, + 39102: 20190, + 39103: 20205, + 39104: 20191, + 39105: 20215, + 39106: 20233, + 39107: 20314, + 39108: 20272, + 39109: 20315, + 39110: 20317, + 39111: 20311, + 39112: 20295, + 39113: 20342, + 39114: 20360, + 39115: 20367, + 39116: 20376, + 39117: 20347, + 39118: 20329, + 39119: 20336, + 39120: 20369, + 39121: 20335, + 39122: 20358, + 39123: 20374, + 39124: 20760, + 39125: 20436, + 39126: 20447, + 39127: 20430, + 39128: 20440, + 39129: 20443, + 39130: 20433, + 39131: 20442, + 39132: 20432, + 39133: 20452, + 39134: 20453, + 39135: 20506, + 39136: 20520, + 39137: 20500, + 39138: 20522, + 39139: 20517, + 39140: 20485, + 39141: 20252, + 39142: 20470, + 39143: 20513, + 39144: 20521, + 39145: 20524, + 39146: 20478, + 39147: 20463, + 39148: 20497, + 39149: 20486, + 39150: 20547, + 39151: 20551, + 39152: 26371, + 39153: 20565, + 39154: 20560, + 39155: 20552, + 39156: 20570, + 39157: 20566, + 39158: 20588, + 39159: 20600, + 39160: 20608, + 39161: 20634, + 39162: 20613, + 39163: 20660, + 39164: 20658, + 39232: 20681, + 39233: 20682, + 39234: 20659, + 39235: 20674, + 39236: 20694, + 39237: 20702, + 39238: 20709, + 39239: 20717, + 39240: 20707, + 39241: 20718, + 39242: 20729, + 39243: 20725, + 39244: 20745, + 39245: 20737, + 39246: 20738, + 39247: 20758, + 39248: 20757, + 39249: 20756, + 39250: 20762, + 39251: 20769, + 39252: 20794, + 39253: 20791, + 39254: 20796, + 39255: 20795, + 39256: 20799, + 39257: 20800, + 39258: 20818, + 39259: 20812, + 39260: 20820, + 39261: 20834, + 39262: 31480, + 39263: 20841, + 39264: 20842, + 39265: 20846, + 39266: 20864, + 39267: 20866, + 39268: 22232, + 39269: 20876, + 39270: 20873, + 39271: 20879, + 39272: 20881, + 39273: 20883, + 39274: 20885, + 39275: 20886, + 39276: 20900, + 39277: 20902, + 39278: 20898, + 39279: 20905, + 39280: 20906, + 39281: 20907, + 39282: 20915, + 39283: 20913, + 39284: 20914, + 39285: 20912, + 39286: 20917, + 39287: 20925, + 39288: 20933, + 39289: 20937, + 39290: 20955, + 39291: 20960, + 39292: 34389, + 39293: 20969, + 39294: 20973, + 39296: 20976, + 39297: 20981, + 39298: 20990, + 39299: 20996, + 39300: 21003, + 39301: 21012, + 39302: 21006, + 39303: 21031, + 39304: 21034, + 39305: 21038, + 39306: 21043, + 39307: 21049, + 39308: 21071, + 39309: 21060, + 39310: 21067, + 39311: 21068, + 39312: 21086, + 39313: 21076, + 39314: 21098, + 39315: 21108, + 39316: 21097, + 39317: 21107, + 39318: 21119, + 39319: 21117, + 39320: 21133, + 39321: 21140, + 39322: 21138, + 39323: 21105, + 39324: 21128, + 39325: 21137, + 39326: 36776, + 39327: 36775, + 39328: 21164, + 39329: 21165, + 39330: 21180, + 39331: 21173, + 39332: 21185, + 39333: 21197, + 39334: 21207, + 39335: 21214, + 39336: 21219, + 39337: 21222, + 39338: 39149, + 39339: 21216, + 39340: 21235, + 39341: 21237, + 39342: 21240, + 39343: 21241, + 39344: 21254, + 39345: 21256, + 39346: 30008, + 39347: 21261, + 39348: 21264, + 39349: 21263, + 39350: 21269, + 39351: 21274, + 39352: 21283, + 39353: 21295, + 39354: 21297, + 39355: 21299, + 39356: 21304, + 39357: 21312, + 39358: 21318, + 39359: 21317, + 39360: 19991, + 39361: 21321, + 39362: 21325, + 39363: 20950, + 39364: 21342, + 39365: 21353, + 39366: 21358, + 39367: 22808, + 39368: 21371, + 39369: 21367, + 39370: 21378, + 39371: 21398, + 39372: 21408, + 39373: 21414, + 39374: 21413, + 39375: 21422, + 39376: 21424, + 39377: 21430, + 39378: 21443, + 39379: 31762, + 39380: 38617, + 39381: 21471, + 39382: 26364, + 39383: 29166, + 39384: 21486, + 39385: 21480, + 39386: 21485, + 39387: 21498, + 39388: 21505, + 39389: 21565, + 39390: 21568, + 39391: 21548, + 39392: 21549, + 39393: 21564, + 39394: 21550, + 39395: 21558, + 39396: 21545, + 39397: 21533, + 39398: 21582, + 39399: 21647, + 39400: 21621, + 39401: 21646, + 39402: 21599, + 39403: 21617, + 39404: 21623, + 39405: 21616, + 39406: 21650, + 39407: 21627, + 39408: 21632, + 39409: 21622, + 39410: 21636, + 39411: 21648, + 39412: 21638, + 39413: 21703, + 39414: 21666, + 39415: 21688, + 39416: 21669, + 39417: 21676, + 39418: 21700, + 39419: 21704, + 39420: 21672, + 39488: 21675, + 39489: 21698, + 39490: 21668, + 39491: 21694, + 39492: 21692, + 39493: 21720, + 39494: 21733, + 39495: 21734, + 39496: 21775, + 39497: 21780, + 39498: 21757, + 39499: 21742, + 39500: 21741, + 39501: 21754, + 39502: 21730, + 39503: 21817, + 39504: 21824, + 39505: 21859, + 39506: 21836, + 39507: 21806, + 39508: 21852, + 39509: 21829, + 39510: 21846, + 39511: 21847, + 39512: 21816, + 39513: 21811, + 39514: 21853, + 39515: 21913, + 39516: 21888, + 39517: 21679, + 39518: 21898, + 39519: 21919, + 39520: 21883, + 39521: 21886, + 39522: 21912, + 39523: 21918, + 39524: 21934, + 39525: 21884, + 39526: 21891, + 39527: 21929, + 39528: 21895, + 39529: 21928, + 39530: 21978, + 39531: 21957, + 39532: 21983, + 39533: 21956, + 39534: 21980, + 39535: 21988, + 39536: 21972, + 39537: 22036, + 39538: 22007, + 39539: 22038, + 39540: 22014, + 39541: 22013, + 39542: 22043, + 39543: 22009, + 39544: 22094, + 39545: 22096, + 39546: 29151, + 39547: 22068, + 39548: 22070, + 39549: 22066, + 39550: 22072, + 39552: 22123, + 39553: 22116, + 39554: 22063, + 39555: 22124, + 39556: 22122, + 39557: 22150, + 39558: 22144, + 39559: 22154, + 39560: 22176, + 39561: 22164, + 39562: 22159, + 39563: 22181, + 39564: 22190, + 39565: 22198, + 39566: 22196, + 39567: 22210, + 39568: 22204, + 39569: 22209, + 39570: 22211, + 39571: 22208, + 39572: 22216, + 39573: 22222, + 39574: 22225, + 39575: 22227, + 39576: 22231, + 39577: 22254, + 39578: 22265, + 39579: 22272, + 39580: 22271, + 39581: 22276, + 39582: 22281, + 39583: 22280, + 39584: 22283, + 39585: 22285, + 39586: 22291, + 39587: 22296, + 39588: 22294, + 39589: 21959, + 39590: 22300, + 39591: 22310, + 39592: 22327, + 39593: 22328, + 39594: 22350, + 39595: 22331, + 39596: 22336, + 39597: 22351, + 39598: 22377, + 39599: 22464, + 39600: 22408, + 39601: 22369, + 39602: 22399, + 39603: 22409, + 39604: 22419, + 39605: 22432, + 39606: 22451, + 39607: 22436, + 39608: 22442, + 39609: 22448, + 39610: 22467, + 39611: 22470, + 39612: 22484, + 39613: 22482, + 39614: 22483, + 39615: 22538, + 39616: 22486, + 39617: 22499, + 39618: 22539, + 39619: 22553, + 39620: 22557, + 39621: 22642, + 39622: 22561, + 39623: 22626, + 39624: 22603, + 39625: 22640, + 39626: 27584, + 39627: 22610, + 39628: 22589, + 39629: 22649, + 39630: 22661, + 39631: 22713, + 39632: 22687, + 39633: 22699, + 39634: 22714, + 39635: 22750, + 39636: 22715, + 39637: 22712, + 39638: 22702, + 39639: 22725, + 39640: 22739, + 39641: 22737, + 39642: 22743, + 39643: 22745, + 39644: 22744, + 39645: 22757, + 39646: 22748, + 39647: 22756, + 39648: 22751, + 39649: 22767, + 39650: 22778, + 39651: 22777, + 39652: 22779, + 39653: 22780, + 39654: 22781, + 39655: 22786, + 39656: 22794, + 39657: 22800, + 39658: 22811, + 39659: 26790, + 39660: 22821, + 39661: 22828, + 39662: 22829, + 39663: 22834, + 39664: 22840, + 39665: 22846, + 39666: 31442, + 39667: 22869, + 39668: 22864, + 39669: 22862, + 39670: 22874, + 39671: 22872, + 39672: 22882, + 39673: 22880, + 39674: 22887, + 39675: 22892, + 39676: 22889, + 39744: 22904, + 39745: 22913, + 39746: 22941, + 39747: 20318, + 39748: 20395, + 39749: 22947, + 39750: 22962, + 39751: 22982, + 39752: 23016, + 39753: 23004, + 39754: 22925, + 39755: 23001, + 39756: 23002, + 39757: 23077, + 39758: 23071, + 39759: 23057, + 39760: 23068, + 39761: 23049, + 39762: 23066, + 39763: 23104, + 39764: 23148, + 39765: 23113, + 39766: 23093, + 39767: 23094, + 39768: 23138, + 39769: 23146, + 39770: 23194, + 39771: 23228, + 39772: 23230, + 39773: 23243, + 39774: 23234, + 39775: 23229, + 39776: 23267, + 39777: 23255, + 39778: 23270, + 39779: 23273, + 39780: 23254, + 39781: 23290, + 39782: 23291, + 39783: 23308, + 39784: 23307, + 39785: 23318, + 39786: 23346, + 39787: 23248, + 39788: 23338, + 39789: 23350, + 39790: 23358, + 39791: 23363, + 39792: 23365, + 39793: 23360, + 39794: 23377, + 39795: 23381, + 39796: 23386, + 39797: 23387, + 39798: 23397, + 39799: 23401, + 39800: 23408, + 39801: 23411, + 39802: 23413, + 39803: 23416, + 39804: 25992, + 39805: 23418, + 39806: 23424, + 39808: 23427, + 39809: 23462, + 39810: 23480, + 39811: 23491, + 39812: 23495, + 39813: 23497, + 39814: 23508, + 39815: 23504, + 39816: 23524, + 39817: 23526, + 39818: 23522, + 39819: 23518, + 39820: 23525, + 39821: 23531, + 39822: 23536, + 39823: 23542, + 39824: 23539, + 39825: 23557, + 39826: 23559, + 39827: 23560, + 39828: 23565, + 39829: 23571, + 39830: 23584, + 39831: 23586, + 39832: 23592, + 39833: 23608, + 39834: 23609, + 39835: 23617, + 39836: 23622, + 39837: 23630, + 39838: 23635, + 39839: 23632, + 39840: 23631, + 39841: 23409, + 39842: 23660, + 39843: 23662, + 39844: 20066, + 39845: 23670, + 39846: 23673, + 39847: 23692, + 39848: 23697, + 39849: 23700, + 39850: 22939, + 39851: 23723, + 39852: 23739, + 39853: 23734, + 39854: 23740, + 39855: 23735, + 39856: 23749, + 39857: 23742, + 39858: 23751, + 39859: 23769, + 39860: 23785, + 39861: 23805, + 39862: 23802, + 39863: 23789, + 39864: 23948, + 39865: 23786, + 39866: 23819, + 39867: 23829, + 39868: 23831, + 39869: 23900, + 39870: 23839, + 39871: 23835, + 39872: 23825, + 39873: 23828, + 39874: 23842, + 39875: 23834, + 39876: 23833, + 39877: 23832, + 39878: 23884, + 39879: 23890, + 39880: 23886, + 39881: 23883, + 39882: 23916, + 39883: 23923, + 39884: 23926, + 39885: 23943, + 39886: 23940, + 39887: 23938, + 39888: 23970, + 39889: 23965, + 39890: 23980, + 39891: 23982, + 39892: 23997, + 39893: 23952, + 39894: 23991, + 39895: 23996, + 39896: 24009, + 39897: 24013, + 39898: 24019, + 39899: 24018, + 39900: 24022, + 39901: 24027, + 39902: 24043, + 39903: 24050, + 39904: 24053, + 39905: 24075, + 39906: 24090, + 39907: 24089, + 39908: 24081, + 39909: 24091, + 39910: 24118, + 39911: 24119, + 39912: 24132, + 39913: 24131, + 39914: 24128, + 39915: 24142, + 39916: 24151, + 39917: 24148, + 39918: 24159, + 39919: 24162, + 39920: 24164, + 39921: 24135, + 39922: 24181, + 39923: 24182, + 39924: 24186, + 39925: 40636, + 39926: 24191, + 39927: 24224, + 39928: 24257, + 39929: 24258, + 39930: 24264, + 39931: 24272, + 39932: 24271, + 4e4: 24278, + 40001: 24291, + 40002: 24285, + 40003: 24282, + 40004: 24283, + 40005: 24290, + 40006: 24289, + 40007: 24296, + 40008: 24297, + 40009: 24300, + 40010: 24305, + 40011: 24307, + 40012: 24304, + 40013: 24308, + 40014: 24312, + 40015: 24318, + 40016: 24323, + 40017: 24329, + 40018: 24413, + 40019: 24412, + 40020: 24331, + 40021: 24337, + 40022: 24342, + 40023: 24361, + 40024: 24365, + 40025: 24376, + 40026: 24385, + 40027: 24392, + 40028: 24396, + 40029: 24398, + 40030: 24367, + 40031: 24401, + 40032: 24406, + 40033: 24407, + 40034: 24409, + 40035: 24417, + 40036: 24429, + 40037: 24435, + 40038: 24439, + 40039: 24451, + 40040: 24450, + 40041: 24447, + 40042: 24458, + 40043: 24456, + 40044: 24465, + 40045: 24455, + 40046: 24478, + 40047: 24473, + 40048: 24472, + 40049: 24480, + 40050: 24488, + 40051: 24493, + 40052: 24508, + 40053: 24534, + 40054: 24571, + 40055: 24548, + 40056: 24568, + 40057: 24561, + 40058: 24541, + 40059: 24755, + 40060: 24575, + 40061: 24609, + 40062: 24672, + 40064: 24601, + 40065: 24592, + 40066: 24617, + 40067: 24590, + 40068: 24625, + 40069: 24603, + 40070: 24597, + 40071: 24619, + 40072: 24614, + 40073: 24591, + 40074: 24634, + 40075: 24666, + 40076: 24641, + 40077: 24682, + 40078: 24695, + 40079: 24671, + 40080: 24650, + 40081: 24646, + 40082: 24653, + 40083: 24675, + 40084: 24643, + 40085: 24676, + 40086: 24642, + 40087: 24684, + 40088: 24683, + 40089: 24665, + 40090: 24705, + 40091: 24717, + 40092: 24807, + 40093: 24707, + 40094: 24730, + 40095: 24708, + 40096: 24731, + 40097: 24726, + 40098: 24727, + 40099: 24722, + 40100: 24743, + 40101: 24715, + 40102: 24801, + 40103: 24760, + 40104: 24800, + 40105: 24787, + 40106: 24756, + 40107: 24560, + 40108: 24765, + 40109: 24774, + 40110: 24757, + 40111: 24792, + 40112: 24909, + 40113: 24853, + 40114: 24838, + 40115: 24822, + 40116: 24823, + 40117: 24832, + 40118: 24820, + 40119: 24826, + 40120: 24835, + 40121: 24865, + 40122: 24827, + 40123: 24817, + 40124: 24845, + 40125: 24846, + 40126: 24903, + 40127: 24894, + 40128: 24872, + 40129: 24871, + 40130: 24906, + 40131: 24895, + 40132: 24892, + 40133: 24876, + 40134: 24884, + 40135: 24893, + 40136: 24898, + 40137: 24900, + 40138: 24947, + 40139: 24951, + 40140: 24920, + 40141: 24921, + 40142: 24922, + 40143: 24939, + 40144: 24948, + 40145: 24943, + 40146: 24933, + 40147: 24945, + 40148: 24927, + 40149: 24925, + 40150: 24915, + 40151: 24949, + 40152: 24985, + 40153: 24982, + 40154: 24967, + 40155: 25004, + 40156: 24980, + 40157: 24986, + 40158: 24970, + 40159: 24977, + 40160: 25003, + 40161: 25006, + 40162: 25036, + 40163: 25034, + 40164: 25033, + 40165: 25079, + 40166: 25032, + 40167: 25027, + 40168: 25030, + 40169: 25018, + 40170: 25035, + 40171: 32633, + 40172: 25037, + 40173: 25062, + 40174: 25059, + 40175: 25078, + 40176: 25082, + 40177: 25076, + 40178: 25087, + 40179: 25085, + 40180: 25084, + 40181: 25086, + 40182: 25088, + 40183: 25096, + 40184: 25097, + 40185: 25101, + 40186: 25100, + 40187: 25108, + 40188: 25115, + 40256: 25118, + 40257: 25121, + 40258: 25130, + 40259: 25134, + 40260: 25136, + 40261: 25138, + 40262: 25139, + 40263: 25153, + 40264: 25166, + 40265: 25182, + 40266: 25187, + 40267: 25179, + 40268: 25184, + 40269: 25192, + 40270: 25212, + 40271: 25218, + 40272: 25225, + 40273: 25214, + 40274: 25234, + 40275: 25235, + 40276: 25238, + 40277: 25300, + 40278: 25219, + 40279: 25236, + 40280: 25303, + 40281: 25297, + 40282: 25275, + 40283: 25295, + 40284: 25343, + 40285: 25286, + 40286: 25812, + 40287: 25288, + 40288: 25308, + 40289: 25292, + 40290: 25290, + 40291: 25282, + 40292: 25287, + 40293: 25243, + 40294: 25289, + 40295: 25356, + 40296: 25326, + 40297: 25329, + 40298: 25383, + 40299: 25346, + 40300: 25352, + 40301: 25327, + 40302: 25333, + 40303: 25424, + 40304: 25406, + 40305: 25421, + 40306: 25628, + 40307: 25423, + 40308: 25494, + 40309: 25486, + 40310: 25472, + 40311: 25515, + 40312: 25462, + 40313: 25507, + 40314: 25487, + 40315: 25481, + 40316: 25503, + 40317: 25525, + 40318: 25451, + 40320: 25449, + 40321: 25534, + 40322: 25577, + 40323: 25536, + 40324: 25542, + 40325: 25571, + 40326: 25545, + 40327: 25554, + 40328: 25590, + 40329: 25540, + 40330: 25622, + 40331: 25652, + 40332: 25606, + 40333: 25619, + 40334: 25638, + 40335: 25654, + 40336: 25885, + 40337: 25623, + 40338: 25640, + 40339: 25615, + 40340: 25703, + 40341: 25711, + 40342: 25718, + 40343: 25678, + 40344: 25898, + 40345: 25749, + 40346: 25747, + 40347: 25765, + 40348: 25769, + 40349: 25736, + 40350: 25788, + 40351: 25818, + 40352: 25810, + 40353: 25797, + 40354: 25799, + 40355: 25787, + 40356: 25816, + 40357: 25794, + 40358: 25841, + 40359: 25831, + 40360: 33289, + 40361: 25824, + 40362: 25825, + 40363: 25260, + 40364: 25827, + 40365: 25839, + 40366: 25900, + 40367: 25846, + 40368: 25844, + 40369: 25842, + 40370: 25850, + 40371: 25856, + 40372: 25853, + 40373: 25880, + 40374: 25884, + 40375: 25861, + 40376: 25892, + 40377: 25891, + 40378: 25899, + 40379: 25908, + 40380: 25909, + 40381: 25911, + 40382: 25910, + 40383: 25912, + 40384: 30027, + 40385: 25928, + 40386: 25942, + 40387: 25941, + 40388: 25933, + 40389: 25944, + 40390: 25950, + 40391: 25949, + 40392: 25970, + 40393: 25976, + 40394: 25986, + 40395: 25987, + 40396: 35722, + 40397: 26011, + 40398: 26015, + 40399: 26027, + 40400: 26039, + 40401: 26051, + 40402: 26054, + 40403: 26049, + 40404: 26052, + 40405: 26060, + 40406: 26066, + 40407: 26075, + 40408: 26073, + 40409: 26080, + 40410: 26081, + 40411: 26097, + 40412: 26482, + 40413: 26122, + 40414: 26115, + 40415: 26107, + 40416: 26483, + 40417: 26165, + 40418: 26166, + 40419: 26164, + 40420: 26140, + 40421: 26191, + 40422: 26180, + 40423: 26185, + 40424: 26177, + 40425: 26206, + 40426: 26205, + 40427: 26212, + 40428: 26215, + 40429: 26216, + 40430: 26207, + 40431: 26210, + 40432: 26224, + 40433: 26243, + 40434: 26248, + 40435: 26254, + 40436: 26249, + 40437: 26244, + 40438: 26264, + 40439: 26269, + 40440: 26305, + 40441: 26297, + 40442: 26313, + 40443: 26302, + 40444: 26300, + 40512: 26308, + 40513: 26296, + 40514: 26326, + 40515: 26330, + 40516: 26336, + 40517: 26175, + 40518: 26342, + 40519: 26345, + 40520: 26352, + 40521: 26357, + 40522: 26359, + 40523: 26383, + 40524: 26390, + 40525: 26398, + 40526: 26406, + 40527: 26407, + 40528: 38712, + 40529: 26414, + 40530: 26431, + 40531: 26422, + 40532: 26433, + 40533: 26424, + 40534: 26423, + 40535: 26438, + 40536: 26462, + 40537: 26464, + 40538: 26457, + 40539: 26467, + 40540: 26468, + 40541: 26505, + 40542: 26480, + 40543: 26537, + 40544: 26492, + 40545: 26474, + 40546: 26508, + 40547: 26507, + 40548: 26534, + 40549: 26529, + 40550: 26501, + 40551: 26551, + 40552: 26607, + 40553: 26548, + 40554: 26604, + 40555: 26547, + 40556: 26601, + 40557: 26552, + 40558: 26596, + 40559: 26590, + 40560: 26589, + 40561: 26594, + 40562: 26606, + 40563: 26553, + 40564: 26574, + 40565: 26566, + 40566: 26599, + 40567: 27292, + 40568: 26654, + 40569: 26694, + 40570: 26665, + 40571: 26688, + 40572: 26701, + 40573: 26674, + 40574: 26702, + 40576: 26803, + 40577: 26667, + 40578: 26713, + 40579: 26723, + 40580: 26743, + 40581: 26751, + 40582: 26783, + 40583: 26767, + 40584: 26797, + 40585: 26772, + 40586: 26781, + 40587: 26779, + 40588: 26755, + 40589: 27310, + 40590: 26809, + 40591: 26740, + 40592: 26805, + 40593: 26784, + 40594: 26810, + 40595: 26895, + 40596: 26765, + 40597: 26750, + 40598: 26881, + 40599: 26826, + 40600: 26888, + 40601: 26840, + 40602: 26914, + 40603: 26918, + 40604: 26849, + 40605: 26892, + 40606: 26829, + 40607: 26836, + 40608: 26855, + 40609: 26837, + 40610: 26934, + 40611: 26898, + 40612: 26884, + 40613: 26839, + 40614: 26851, + 40615: 26917, + 40616: 26873, + 40617: 26848, + 40618: 26863, + 40619: 26920, + 40620: 26922, + 40621: 26906, + 40622: 26915, + 40623: 26913, + 40624: 26822, + 40625: 27001, + 40626: 26999, + 40627: 26972, + 40628: 27e3, + 40629: 26987, + 40630: 26964, + 40631: 27006, + 40632: 26990, + 40633: 26937, + 40634: 26996, + 40635: 26941, + 40636: 26969, + 40637: 26928, + 40638: 26977, + 40639: 26974, + 40640: 26973, + 40641: 27009, + 40642: 26986, + 40643: 27058, + 40644: 27054, + 40645: 27088, + 40646: 27071, + 40647: 27073, + 40648: 27091, + 40649: 27070, + 40650: 27086, + 40651: 23528, + 40652: 27082, + 40653: 27101, + 40654: 27067, + 40655: 27075, + 40656: 27047, + 40657: 27182, + 40658: 27025, + 40659: 27040, + 40660: 27036, + 40661: 27029, + 40662: 27060, + 40663: 27102, + 40664: 27112, + 40665: 27138, + 40666: 27163, + 40667: 27135, + 40668: 27402, + 40669: 27129, + 40670: 27122, + 40671: 27111, + 40672: 27141, + 40673: 27057, + 40674: 27166, + 40675: 27117, + 40676: 27156, + 40677: 27115, + 40678: 27146, + 40679: 27154, + 40680: 27329, + 40681: 27171, + 40682: 27155, + 40683: 27204, + 40684: 27148, + 40685: 27250, + 40686: 27190, + 40687: 27256, + 40688: 27207, + 40689: 27234, + 40690: 27225, + 40691: 27238, + 40692: 27208, + 40693: 27192, + 40694: 27170, + 40695: 27280, + 40696: 27277, + 40697: 27296, + 40698: 27268, + 40699: 27298, + 40700: 27299, + 40768: 27287, + 40769: 34327, + 40770: 27323, + 40771: 27331, + 40772: 27330, + 40773: 27320, + 40774: 27315, + 40775: 27308, + 40776: 27358, + 40777: 27345, + 40778: 27359, + 40779: 27306, + 40780: 27354, + 40781: 27370, + 40782: 27387, + 40783: 27397, + 40784: 34326, + 40785: 27386, + 40786: 27410, + 40787: 27414, + 40788: 39729, + 40789: 27423, + 40790: 27448, + 40791: 27447, + 40792: 30428, + 40793: 27449, + 40794: 39150, + 40795: 27463, + 40796: 27459, + 40797: 27465, + 40798: 27472, + 40799: 27481, + 40800: 27476, + 40801: 27483, + 40802: 27487, + 40803: 27489, + 40804: 27512, + 40805: 27513, + 40806: 27519, + 40807: 27520, + 40808: 27524, + 40809: 27523, + 40810: 27533, + 40811: 27544, + 40812: 27541, + 40813: 27550, + 40814: 27556, + 40815: 27562, + 40816: 27563, + 40817: 27567, + 40818: 27570, + 40819: 27569, + 40820: 27571, + 40821: 27575, + 40822: 27580, + 40823: 27590, + 40824: 27595, + 40825: 27603, + 40826: 27615, + 40827: 27628, + 40828: 27627, + 40829: 27635, + 40830: 27631, + 40832: 40638, + 40833: 27656, + 40834: 27667, + 40835: 27668, + 40836: 27675, + 40837: 27684, + 40838: 27683, + 40839: 27742, + 40840: 27733, + 40841: 27746, + 40842: 27754, + 40843: 27778, + 40844: 27789, + 40845: 27802, + 40846: 27777, + 40847: 27803, + 40848: 27774, + 40849: 27752, + 40850: 27763, + 40851: 27794, + 40852: 27792, + 40853: 27844, + 40854: 27889, + 40855: 27859, + 40856: 27837, + 40857: 27863, + 40858: 27845, + 40859: 27869, + 40860: 27822, + 40861: 27825, + 40862: 27838, + 40863: 27834, + 40864: 27867, + 40865: 27887, + 40866: 27865, + 40867: 27882, + 40868: 27935, + 40869: 34893, + 40870: 27958, + 40871: 27947, + 40872: 27965, + 40873: 27960, + 40874: 27929, + 40875: 27957, + 40876: 27955, + 40877: 27922, + 40878: 27916, + 40879: 28003, + 40880: 28051, + 40881: 28004, + 40882: 27994, + 40883: 28025, + 40884: 27993, + 40885: 28046, + 40886: 28053, + 40887: 28644, + 40888: 28037, + 40889: 28153, + 40890: 28181, + 40891: 28170, + 40892: 28085, + 40893: 28103, + 40894: 28134, + 40895: 28088, + 40896: 28102, + 40897: 28140, + 40898: 28126, + 40899: 28108, + 40900: 28136, + 40901: 28114, + 40902: 28101, + 40903: 28154, + 40904: 28121, + 40905: 28132, + 40906: 28117, + 40907: 28138, + 40908: 28142, + 40909: 28205, + 40910: 28270, + 40911: 28206, + 40912: 28185, + 40913: 28274, + 40914: 28255, + 40915: 28222, + 40916: 28195, + 40917: 28267, + 40918: 28203, + 40919: 28278, + 40920: 28237, + 40921: 28191, + 40922: 28227, + 40923: 28218, + 40924: 28238, + 40925: 28196, + 40926: 28415, + 40927: 28189, + 40928: 28216, + 40929: 28290, + 40930: 28330, + 40931: 28312, + 40932: 28361, + 40933: 28343, + 40934: 28371, + 40935: 28349, + 40936: 28335, + 40937: 28356, + 40938: 28338, + 40939: 28372, + 40940: 28373, + 40941: 28303, + 40942: 28325, + 40943: 28354, + 40944: 28319, + 40945: 28481, + 40946: 28433, + 40947: 28748, + 40948: 28396, + 40949: 28408, + 40950: 28414, + 40951: 28479, + 40952: 28402, + 40953: 28465, + 40954: 28399, + 40955: 28466, + 40956: 28364, + 57408: 28478, + 57409: 28435, + 57410: 28407, + 57411: 28550, + 57412: 28538, + 57413: 28536, + 57414: 28545, + 57415: 28544, + 57416: 28527, + 57417: 28507, + 57418: 28659, + 57419: 28525, + 57420: 28546, + 57421: 28540, + 57422: 28504, + 57423: 28558, + 57424: 28561, + 57425: 28610, + 57426: 28518, + 57427: 28595, + 57428: 28579, + 57429: 28577, + 57430: 28580, + 57431: 28601, + 57432: 28614, + 57433: 28586, + 57434: 28639, + 57435: 28629, + 57436: 28652, + 57437: 28628, + 57438: 28632, + 57439: 28657, + 57440: 28654, + 57441: 28635, + 57442: 28681, + 57443: 28683, + 57444: 28666, + 57445: 28689, + 57446: 28673, + 57447: 28687, + 57448: 28670, + 57449: 28699, + 57450: 28698, + 57451: 28532, + 57452: 28701, + 57453: 28696, + 57454: 28703, + 57455: 28720, + 57456: 28734, + 57457: 28722, + 57458: 28753, + 57459: 28771, + 57460: 28825, + 57461: 28818, + 57462: 28847, + 57463: 28913, + 57464: 28844, + 57465: 28856, + 57466: 28851, + 57467: 28846, + 57468: 28895, + 57469: 28875, + 57470: 28893, + 57472: 28889, + 57473: 28937, + 57474: 28925, + 57475: 28956, + 57476: 28953, + 57477: 29029, + 57478: 29013, + 57479: 29064, + 57480: 29030, + 57481: 29026, + 57482: 29004, + 57483: 29014, + 57484: 29036, + 57485: 29071, + 57486: 29179, + 57487: 29060, + 57488: 29077, + 57489: 29096, + 57490: 29100, + 57491: 29143, + 57492: 29113, + 57493: 29118, + 57494: 29138, + 57495: 29129, + 57496: 29140, + 57497: 29134, + 57498: 29152, + 57499: 29164, + 57500: 29159, + 57501: 29173, + 57502: 29180, + 57503: 29177, + 57504: 29183, + 57505: 29197, + 57506: 29200, + 57507: 29211, + 57508: 29224, + 57509: 29229, + 57510: 29228, + 57511: 29232, + 57512: 29234, + 57513: 29243, + 57514: 29244, + 57515: 29247, + 57516: 29248, + 57517: 29254, + 57518: 29259, + 57519: 29272, + 57520: 29300, + 57521: 29310, + 57522: 29314, + 57523: 29313, + 57524: 29319, + 57525: 29330, + 57526: 29334, + 57527: 29346, + 57528: 29351, + 57529: 29369, + 57530: 29362, + 57531: 29379, + 57532: 29382, + 57533: 29380, + 57534: 29390, + 57535: 29394, + 57536: 29410, + 57537: 29408, + 57538: 29409, + 57539: 29433, + 57540: 29431, + 57541: 20495, + 57542: 29463, + 57543: 29450, + 57544: 29468, + 57545: 29462, + 57546: 29469, + 57547: 29492, + 57548: 29487, + 57549: 29481, + 57550: 29477, + 57551: 29502, + 57552: 29518, + 57553: 29519, + 57554: 40664, + 57555: 29527, + 57556: 29546, + 57557: 29544, + 57558: 29552, + 57559: 29560, + 57560: 29557, + 57561: 29563, + 57562: 29562, + 57563: 29640, + 57564: 29619, + 57565: 29646, + 57566: 29627, + 57567: 29632, + 57568: 29669, + 57569: 29678, + 57570: 29662, + 57571: 29858, + 57572: 29701, + 57573: 29807, + 57574: 29733, + 57575: 29688, + 57576: 29746, + 57577: 29754, + 57578: 29781, + 57579: 29759, + 57580: 29791, + 57581: 29785, + 57582: 29761, + 57583: 29788, + 57584: 29801, + 57585: 29808, + 57586: 29795, + 57587: 29802, + 57588: 29814, + 57589: 29822, + 57590: 29835, + 57591: 29854, + 57592: 29863, + 57593: 29898, + 57594: 29903, + 57595: 29908, + 57596: 29681, + 57664: 29920, + 57665: 29923, + 57666: 29927, + 57667: 29929, + 57668: 29934, + 57669: 29938, + 57670: 29936, + 57671: 29937, + 57672: 29944, + 57673: 29943, + 57674: 29956, + 57675: 29955, + 57676: 29957, + 57677: 29964, + 57678: 29966, + 57679: 29965, + 57680: 29973, + 57681: 29971, + 57682: 29982, + 57683: 29990, + 57684: 29996, + 57685: 30012, + 57686: 30020, + 57687: 30029, + 57688: 30026, + 57689: 30025, + 57690: 30043, + 57691: 30022, + 57692: 30042, + 57693: 30057, + 57694: 30052, + 57695: 30055, + 57696: 30059, + 57697: 30061, + 57698: 30072, + 57699: 30070, + 57700: 30086, + 57701: 30087, + 57702: 30068, + 57703: 30090, + 57704: 30089, + 57705: 30082, + 57706: 30100, + 57707: 30106, + 57708: 30109, + 57709: 30117, + 57710: 30115, + 57711: 30146, + 57712: 30131, + 57713: 30147, + 57714: 30133, + 57715: 30141, + 57716: 30136, + 57717: 30140, + 57718: 30129, + 57719: 30157, + 57720: 30154, + 57721: 30162, + 57722: 30169, + 57723: 30179, + 57724: 30174, + 57725: 30206, + 57726: 30207, + 57728: 30204, + 57729: 30209, + 57730: 30192, + 57731: 30202, + 57732: 30194, + 57733: 30195, + 57734: 30219, + 57735: 30221, + 57736: 30217, + 57737: 30239, + 57738: 30247, + 57739: 30240, + 57740: 30241, + 57741: 30242, + 57742: 30244, + 57743: 30260, + 57744: 30256, + 57745: 30267, + 57746: 30279, + 57747: 30280, + 57748: 30278, + 57749: 30300, + 57750: 30296, + 57751: 30305, + 57752: 30306, + 57753: 30312, + 57754: 30313, + 57755: 30314, + 57756: 30311, + 57757: 30316, + 57758: 30320, + 57759: 30322, + 57760: 30326, + 57761: 30328, + 57762: 30332, + 57763: 30336, + 57764: 30339, + 57765: 30344, + 57766: 30347, + 57767: 30350, + 57768: 30358, + 57769: 30355, + 57770: 30361, + 57771: 30362, + 57772: 30384, + 57773: 30388, + 57774: 30392, + 57775: 30393, + 57776: 30394, + 57777: 30402, + 57778: 30413, + 57779: 30422, + 57780: 30418, + 57781: 30430, + 57782: 30433, + 57783: 30437, + 57784: 30439, + 57785: 30442, + 57786: 34351, + 57787: 30459, + 57788: 30472, + 57789: 30471, + 57790: 30468, + 57791: 30505, + 57792: 30500, + 57793: 30494, + 57794: 30501, + 57795: 30502, + 57796: 30491, + 57797: 30519, + 57798: 30520, + 57799: 30535, + 57800: 30554, + 57801: 30568, + 57802: 30571, + 57803: 30555, + 57804: 30565, + 57805: 30591, + 57806: 30590, + 57807: 30585, + 57808: 30606, + 57809: 30603, + 57810: 30609, + 57811: 30624, + 57812: 30622, + 57813: 30640, + 57814: 30646, + 57815: 30649, + 57816: 30655, + 57817: 30652, + 57818: 30653, + 57819: 30651, + 57820: 30663, + 57821: 30669, + 57822: 30679, + 57823: 30682, + 57824: 30684, + 57825: 30691, + 57826: 30702, + 57827: 30716, + 57828: 30732, + 57829: 30738, + 57830: 31014, + 57831: 30752, + 57832: 31018, + 57833: 30789, + 57834: 30862, + 57835: 30836, + 57836: 30854, + 57837: 30844, + 57838: 30874, + 57839: 30860, + 57840: 30883, + 57841: 30901, + 57842: 30890, + 57843: 30895, + 57844: 30929, + 57845: 30918, + 57846: 30923, + 57847: 30932, + 57848: 30910, + 57849: 30908, + 57850: 30917, + 57851: 30922, + 57852: 30956, + 57920: 30951, + 57921: 30938, + 57922: 30973, + 57923: 30964, + 57924: 30983, + 57925: 30994, + 57926: 30993, + 57927: 31001, + 57928: 31020, + 57929: 31019, + 57930: 31040, + 57931: 31072, + 57932: 31063, + 57933: 31071, + 57934: 31066, + 57935: 31061, + 57936: 31059, + 57937: 31098, + 57938: 31103, + 57939: 31114, + 57940: 31133, + 57941: 31143, + 57942: 40779, + 57943: 31146, + 57944: 31150, + 57945: 31155, + 57946: 31161, + 57947: 31162, + 57948: 31177, + 57949: 31189, + 57950: 31207, + 57951: 31212, + 57952: 31201, + 57953: 31203, + 57954: 31240, + 57955: 31245, + 57956: 31256, + 57957: 31257, + 57958: 31264, + 57959: 31263, + 57960: 31104, + 57961: 31281, + 57962: 31291, + 57963: 31294, + 57964: 31287, + 57965: 31299, + 57966: 31319, + 57967: 31305, + 57968: 31329, + 57969: 31330, + 57970: 31337, + 57971: 40861, + 57972: 31344, + 57973: 31353, + 57974: 31357, + 57975: 31368, + 57976: 31383, + 57977: 31381, + 57978: 31384, + 57979: 31382, + 57980: 31401, + 57981: 31432, + 57982: 31408, + 57984: 31414, + 57985: 31429, + 57986: 31428, + 57987: 31423, + 57988: 36995, + 57989: 31431, + 57990: 31434, + 57991: 31437, + 57992: 31439, + 57993: 31445, + 57994: 31443, + 57995: 31449, + 57996: 31450, + 57997: 31453, + 57998: 31457, + 57999: 31458, + 58e3: 31462, + 58001: 31469, + 58002: 31472, + 58003: 31490, + 58004: 31503, + 58005: 31498, + 58006: 31494, + 58007: 31539, + 58008: 31512, + 58009: 31513, + 58010: 31518, + 58011: 31541, + 58012: 31528, + 58013: 31542, + 58014: 31568, + 58015: 31610, + 58016: 31492, + 58017: 31565, + 58018: 31499, + 58019: 31564, + 58020: 31557, + 58021: 31605, + 58022: 31589, + 58023: 31604, + 58024: 31591, + 58025: 31600, + 58026: 31601, + 58027: 31596, + 58028: 31598, + 58029: 31645, + 58030: 31640, + 58031: 31647, + 58032: 31629, + 58033: 31644, + 58034: 31642, + 58035: 31627, + 58036: 31634, + 58037: 31631, + 58038: 31581, + 58039: 31641, + 58040: 31691, + 58041: 31681, + 58042: 31692, + 58043: 31695, + 58044: 31668, + 58045: 31686, + 58046: 31709, + 58047: 31721, + 58048: 31761, + 58049: 31764, + 58050: 31718, + 58051: 31717, + 58052: 31840, + 58053: 31744, + 58054: 31751, + 58055: 31763, + 58056: 31731, + 58057: 31735, + 58058: 31767, + 58059: 31757, + 58060: 31734, + 58061: 31779, + 58062: 31783, + 58063: 31786, + 58064: 31775, + 58065: 31799, + 58066: 31787, + 58067: 31805, + 58068: 31820, + 58069: 31811, + 58070: 31828, + 58071: 31823, + 58072: 31808, + 58073: 31824, + 58074: 31832, + 58075: 31839, + 58076: 31844, + 58077: 31830, + 58078: 31845, + 58079: 31852, + 58080: 31861, + 58081: 31875, + 58082: 31888, + 58083: 31908, + 58084: 31917, + 58085: 31906, + 58086: 31915, + 58087: 31905, + 58088: 31912, + 58089: 31923, + 58090: 31922, + 58091: 31921, + 58092: 31918, + 58093: 31929, + 58094: 31933, + 58095: 31936, + 58096: 31941, + 58097: 31938, + 58098: 31960, + 58099: 31954, + 58100: 31964, + 58101: 31970, + 58102: 39739, + 58103: 31983, + 58104: 31986, + 58105: 31988, + 58106: 31990, + 58107: 31994, + 58108: 32006, + 58176: 32002, + 58177: 32028, + 58178: 32021, + 58179: 32010, + 58180: 32069, + 58181: 32075, + 58182: 32046, + 58183: 32050, + 58184: 32063, + 58185: 32053, + 58186: 32070, + 58187: 32115, + 58188: 32086, + 58189: 32078, + 58190: 32114, + 58191: 32104, + 58192: 32110, + 58193: 32079, + 58194: 32099, + 58195: 32147, + 58196: 32137, + 58197: 32091, + 58198: 32143, + 58199: 32125, + 58200: 32155, + 58201: 32186, + 58202: 32174, + 58203: 32163, + 58204: 32181, + 58205: 32199, + 58206: 32189, + 58207: 32171, + 58208: 32317, + 58209: 32162, + 58210: 32175, + 58211: 32220, + 58212: 32184, + 58213: 32159, + 58214: 32176, + 58215: 32216, + 58216: 32221, + 58217: 32228, + 58218: 32222, + 58219: 32251, + 58220: 32242, + 58221: 32225, + 58222: 32261, + 58223: 32266, + 58224: 32291, + 58225: 32289, + 58226: 32274, + 58227: 32305, + 58228: 32287, + 58229: 32265, + 58230: 32267, + 58231: 32290, + 58232: 32326, + 58233: 32358, + 58234: 32315, + 58235: 32309, + 58236: 32313, + 58237: 32323, + 58238: 32311, + 58240: 32306, + 58241: 32314, + 58242: 32359, + 58243: 32349, + 58244: 32342, + 58245: 32350, + 58246: 32345, + 58247: 32346, + 58248: 32377, + 58249: 32362, + 58250: 32361, + 58251: 32380, + 58252: 32379, + 58253: 32387, + 58254: 32213, + 58255: 32381, + 58256: 36782, + 58257: 32383, + 58258: 32392, + 58259: 32393, + 58260: 32396, + 58261: 32402, + 58262: 32400, + 58263: 32403, + 58264: 32404, + 58265: 32406, + 58266: 32398, + 58267: 32411, + 58268: 32412, + 58269: 32568, + 58270: 32570, + 58271: 32581, + 58272: 32588, + 58273: 32589, + 58274: 32590, + 58275: 32592, + 58276: 32593, + 58277: 32597, + 58278: 32596, + 58279: 32600, + 58280: 32607, + 58281: 32608, + 58282: 32616, + 58283: 32617, + 58284: 32615, + 58285: 32632, + 58286: 32642, + 58287: 32646, + 58288: 32643, + 58289: 32648, + 58290: 32647, + 58291: 32652, + 58292: 32660, + 58293: 32670, + 58294: 32669, + 58295: 32666, + 58296: 32675, + 58297: 32687, + 58298: 32690, + 58299: 32697, + 58300: 32686, + 58301: 32694, + 58302: 32696, + 58303: 35697, + 58304: 32709, + 58305: 32710, + 58306: 32714, + 58307: 32725, + 58308: 32724, + 58309: 32737, + 58310: 32742, + 58311: 32745, + 58312: 32755, + 58313: 32761, + 58314: 39132, + 58315: 32774, + 58316: 32772, + 58317: 32779, + 58318: 32786, + 58319: 32792, + 58320: 32793, + 58321: 32796, + 58322: 32801, + 58323: 32808, + 58324: 32831, + 58325: 32827, + 58326: 32842, + 58327: 32838, + 58328: 32850, + 58329: 32856, + 58330: 32858, + 58331: 32863, + 58332: 32866, + 58333: 32872, + 58334: 32883, + 58335: 32882, + 58336: 32880, + 58337: 32886, + 58338: 32889, + 58339: 32893, + 58340: 32895, + 58341: 32900, + 58342: 32902, + 58343: 32901, + 58344: 32923, + 58345: 32915, + 58346: 32922, + 58347: 32941, + 58348: 20880, + 58349: 32940, + 58350: 32987, + 58351: 32997, + 58352: 32985, + 58353: 32989, + 58354: 32964, + 58355: 32986, + 58356: 32982, + 58357: 33033, + 58358: 33007, + 58359: 33009, + 58360: 33051, + 58361: 33065, + 58362: 33059, + 58363: 33071, + 58364: 33099, + 58432: 38539, + 58433: 33094, + 58434: 33086, + 58435: 33107, + 58436: 33105, + 58437: 33020, + 58438: 33137, + 58439: 33134, + 58440: 33125, + 58441: 33126, + 58442: 33140, + 58443: 33155, + 58444: 33160, + 58445: 33162, + 58446: 33152, + 58447: 33154, + 58448: 33184, + 58449: 33173, + 58450: 33188, + 58451: 33187, + 58452: 33119, + 58453: 33171, + 58454: 33193, + 58455: 33200, + 58456: 33205, + 58457: 33214, + 58458: 33208, + 58459: 33213, + 58460: 33216, + 58461: 33218, + 58462: 33210, + 58463: 33225, + 58464: 33229, + 58465: 33233, + 58466: 33241, + 58467: 33240, + 58468: 33224, + 58469: 33242, + 58470: 33247, + 58471: 33248, + 58472: 33255, + 58473: 33274, + 58474: 33275, + 58475: 33278, + 58476: 33281, + 58477: 33282, + 58478: 33285, + 58479: 33287, + 58480: 33290, + 58481: 33293, + 58482: 33296, + 58483: 33302, + 58484: 33321, + 58485: 33323, + 58486: 33336, + 58487: 33331, + 58488: 33344, + 58489: 33369, + 58490: 33368, + 58491: 33373, + 58492: 33370, + 58493: 33375, + 58494: 33380, + 58496: 33378, + 58497: 33384, + 58498: 33386, + 58499: 33387, + 58500: 33326, + 58501: 33393, + 58502: 33399, + 58503: 33400, + 58504: 33406, + 58505: 33421, + 58506: 33426, + 58507: 33451, + 58508: 33439, + 58509: 33467, + 58510: 33452, + 58511: 33505, + 58512: 33507, + 58513: 33503, + 58514: 33490, + 58515: 33524, + 58516: 33523, + 58517: 33530, + 58518: 33683, + 58519: 33539, + 58520: 33531, + 58521: 33529, + 58522: 33502, + 58523: 33542, + 58524: 33500, + 58525: 33545, + 58526: 33497, + 58527: 33589, + 58528: 33588, + 58529: 33558, + 58530: 33586, + 58531: 33585, + 58532: 33600, + 58533: 33593, + 58534: 33616, + 58535: 33605, + 58536: 33583, + 58537: 33579, + 58538: 33559, + 58539: 33560, + 58540: 33669, + 58541: 33690, + 58542: 33706, + 58543: 33695, + 58544: 33698, + 58545: 33686, + 58546: 33571, + 58547: 33678, + 58548: 33671, + 58549: 33674, + 58550: 33660, + 58551: 33717, + 58552: 33651, + 58553: 33653, + 58554: 33696, + 58555: 33673, + 58556: 33704, + 58557: 33780, + 58558: 33811, + 58559: 33771, + 58560: 33742, + 58561: 33789, + 58562: 33795, + 58563: 33752, + 58564: 33803, + 58565: 33729, + 58566: 33783, + 58567: 33799, + 58568: 33760, + 58569: 33778, + 58570: 33805, + 58571: 33826, + 58572: 33824, + 58573: 33725, + 58574: 33848, + 58575: 34054, + 58576: 33787, + 58577: 33901, + 58578: 33834, + 58579: 33852, + 58580: 34138, + 58581: 33924, + 58582: 33911, + 58583: 33899, + 58584: 33965, + 58585: 33902, + 58586: 33922, + 58587: 33897, + 58588: 33862, + 58589: 33836, + 58590: 33903, + 58591: 33913, + 58592: 33845, + 58593: 33994, + 58594: 33890, + 58595: 33977, + 58596: 33983, + 58597: 33951, + 58598: 34009, + 58599: 33997, + 58600: 33979, + 58601: 34010, + 58602: 34e3, + 58603: 33985, + 58604: 33990, + 58605: 34006, + 58606: 33953, + 58607: 34081, + 58608: 34047, + 58609: 34036, + 58610: 34071, + 58611: 34072, + 58612: 34092, + 58613: 34079, + 58614: 34069, + 58615: 34068, + 58616: 34044, + 58617: 34112, + 58618: 34147, + 58619: 34136, + 58620: 34120, + 58688: 34113, + 58689: 34306, + 58690: 34123, + 58691: 34133, + 58692: 34176, + 58693: 34212, + 58694: 34184, + 58695: 34193, + 58696: 34186, + 58697: 34216, + 58698: 34157, + 58699: 34196, + 58700: 34203, + 58701: 34282, + 58702: 34183, + 58703: 34204, + 58704: 34167, + 58705: 34174, + 58706: 34192, + 58707: 34249, + 58708: 34234, + 58709: 34255, + 58710: 34233, + 58711: 34256, + 58712: 34261, + 58713: 34269, + 58714: 34277, + 58715: 34268, + 58716: 34297, + 58717: 34314, + 58718: 34323, + 58719: 34315, + 58720: 34302, + 58721: 34298, + 58722: 34310, + 58723: 34338, + 58724: 34330, + 58725: 34352, + 58726: 34367, + 58727: 34381, + 58728: 20053, + 58729: 34388, + 58730: 34399, + 58731: 34407, + 58732: 34417, + 58733: 34451, + 58734: 34467, + 58735: 34473, + 58736: 34474, + 58737: 34443, + 58738: 34444, + 58739: 34486, + 58740: 34479, + 58741: 34500, + 58742: 34502, + 58743: 34480, + 58744: 34505, + 58745: 34851, + 58746: 34475, + 58747: 34516, + 58748: 34526, + 58749: 34537, + 58750: 34540, + 58752: 34527, + 58753: 34523, + 58754: 34543, + 58755: 34578, + 58756: 34566, + 58757: 34568, + 58758: 34560, + 58759: 34563, + 58760: 34555, + 58761: 34577, + 58762: 34569, + 58763: 34573, + 58764: 34553, + 58765: 34570, + 58766: 34612, + 58767: 34623, + 58768: 34615, + 58769: 34619, + 58770: 34597, + 58771: 34601, + 58772: 34586, + 58773: 34656, + 58774: 34655, + 58775: 34680, + 58776: 34636, + 58777: 34638, + 58778: 34676, + 58779: 34647, + 58780: 34664, + 58781: 34670, + 58782: 34649, + 58783: 34643, + 58784: 34659, + 58785: 34666, + 58786: 34821, + 58787: 34722, + 58788: 34719, + 58789: 34690, + 58790: 34735, + 58791: 34763, + 58792: 34749, + 58793: 34752, + 58794: 34768, + 58795: 38614, + 58796: 34731, + 58797: 34756, + 58798: 34739, + 58799: 34759, + 58800: 34758, + 58801: 34747, + 58802: 34799, + 58803: 34802, + 58804: 34784, + 58805: 34831, + 58806: 34829, + 58807: 34814, + 58808: 34806, + 58809: 34807, + 58810: 34830, + 58811: 34770, + 58812: 34833, + 58813: 34838, + 58814: 34837, + 58815: 34850, + 58816: 34849, + 58817: 34865, + 58818: 34870, + 58819: 34873, + 58820: 34855, + 58821: 34875, + 58822: 34884, + 58823: 34882, + 58824: 34898, + 58825: 34905, + 58826: 34910, + 58827: 34914, + 58828: 34923, + 58829: 34945, + 58830: 34942, + 58831: 34974, + 58832: 34933, + 58833: 34941, + 58834: 34997, + 58835: 34930, + 58836: 34946, + 58837: 34967, + 58838: 34962, + 58839: 34990, + 58840: 34969, + 58841: 34978, + 58842: 34957, + 58843: 34980, + 58844: 34992, + 58845: 35007, + 58846: 34993, + 58847: 35011, + 58848: 35012, + 58849: 35028, + 58850: 35032, + 58851: 35033, + 58852: 35037, + 58853: 35065, + 58854: 35074, + 58855: 35068, + 58856: 35060, + 58857: 35048, + 58858: 35058, + 58859: 35076, + 58860: 35084, + 58861: 35082, + 58862: 35091, + 58863: 35139, + 58864: 35102, + 58865: 35109, + 58866: 35114, + 58867: 35115, + 58868: 35137, + 58869: 35140, + 58870: 35131, + 58871: 35126, + 58872: 35128, + 58873: 35148, + 58874: 35101, + 58875: 35168, + 58876: 35166, + 58944: 35174, + 58945: 35172, + 58946: 35181, + 58947: 35178, + 58948: 35183, + 58949: 35188, + 58950: 35191, + 58951: 35198, + 58952: 35203, + 58953: 35208, + 58954: 35210, + 58955: 35219, + 58956: 35224, + 58957: 35233, + 58958: 35241, + 58959: 35238, + 58960: 35244, + 58961: 35247, + 58962: 35250, + 58963: 35258, + 58964: 35261, + 58965: 35263, + 58966: 35264, + 58967: 35290, + 58968: 35292, + 58969: 35293, + 58970: 35303, + 58971: 35316, + 58972: 35320, + 58973: 35331, + 58974: 35350, + 58975: 35344, + 58976: 35340, + 58977: 35355, + 58978: 35357, + 58979: 35365, + 58980: 35382, + 58981: 35393, + 58982: 35419, + 58983: 35410, + 58984: 35398, + 58985: 35400, + 58986: 35452, + 58987: 35437, + 58988: 35436, + 58989: 35426, + 58990: 35461, + 58991: 35458, + 58992: 35460, + 58993: 35496, + 58994: 35489, + 58995: 35473, + 58996: 35493, + 58997: 35494, + 58998: 35482, + 58999: 35491, + 59e3: 35524, + 59001: 35533, + 59002: 35522, + 59003: 35546, + 59004: 35563, + 59005: 35571, + 59006: 35559, + 59008: 35556, + 59009: 35569, + 59010: 35604, + 59011: 35552, + 59012: 35554, + 59013: 35575, + 59014: 35550, + 59015: 35547, + 59016: 35596, + 59017: 35591, + 59018: 35610, + 59019: 35553, + 59020: 35606, + 59021: 35600, + 59022: 35607, + 59023: 35616, + 59024: 35635, + 59025: 38827, + 59026: 35622, + 59027: 35627, + 59028: 35646, + 59029: 35624, + 59030: 35649, + 59031: 35660, + 59032: 35663, + 59033: 35662, + 59034: 35657, + 59035: 35670, + 59036: 35675, + 59037: 35674, + 59038: 35691, + 59039: 35679, + 59040: 35692, + 59041: 35695, + 59042: 35700, + 59043: 35709, + 59044: 35712, + 59045: 35724, + 59046: 35726, + 59047: 35730, + 59048: 35731, + 59049: 35734, + 59050: 35737, + 59051: 35738, + 59052: 35898, + 59053: 35905, + 59054: 35903, + 59055: 35912, + 59056: 35916, + 59057: 35918, + 59058: 35920, + 59059: 35925, + 59060: 35938, + 59061: 35948, + 59062: 35960, + 59063: 35962, + 59064: 35970, + 59065: 35977, + 59066: 35973, + 59067: 35978, + 59068: 35981, + 59069: 35982, + 59070: 35988, + 59071: 35964, + 59072: 35992, + 59073: 25117, + 59074: 36013, + 59075: 36010, + 59076: 36029, + 59077: 36018, + 59078: 36019, + 59079: 36014, + 59080: 36022, + 59081: 36040, + 59082: 36033, + 59083: 36068, + 59084: 36067, + 59085: 36058, + 59086: 36093, + 59087: 36090, + 59088: 36091, + 59089: 36100, + 59090: 36101, + 59091: 36106, + 59092: 36103, + 59093: 36111, + 59094: 36109, + 59095: 36112, + 59096: 40782, + 59097: 36115, + 59098: 36045, + 59099: 36116, + 59100: 36118, + 59101: 36199, + 59102: 36205, + 59103: 36209, + 59104: 36211, + 59105: 36225, + 59106: 36249, + 59107: 36290, + 59108: 36286, + 59109: 36282, + 59110: 36303, + 59111: 36314, + 59112: 36310, + 59113: 36300, + 59114: 36315, + 59115: 36299, + 59116: 36330, + 59117: 36331, + 59118: 36319, + 59119: 36323, + 59120: 36348, + 59121: 36360, + 59122: 36361, + 59123: 36351, + 59124: 36381, + 59125: 36382, + 59126: 36368, + 59127: 36383, + 59128: 36418, + 59129: 36405, + 59130: 36400, + 59131: 36404, + 59132: 36426, + 59200: 36423, + 59201: 36425, + 59202: 36428, + 59203: 36432, + 59204: 36424, + 59205: 36441, + 59206: 36452, + 59207: 36448, + 59208: 36394, + 59209: 36451, + 59210: 36437, + 59211: 36470, + 59212: 36466, + 59213: 36476, + 59214: 36481, + 59215: 36487, + 59216: 36485, + 59217: 36484, + 59218: 36491, + 59219: 36490, + 59220: 36499, + 59221: 36497, + 59222: 36500, + 59223: 36505, + 59224: 36522, + 59225: 36513, + 59226: 36524, + 59227: 36528, + 59228: 36550, + 59229: 36529, + 59230: 36542, + 59231: 36549, + 59232: 36552, + 59233: 36555, + 59234: 36571, + 59235: 36579, + 59236: 36604, + 59237: 36603, + 59238: 36587, + 59239: 36606, + 59240: 36618, + 59241: 36613, + 59242: 36629, + 59243: 36626, + 59244: 36633, + 59245: 36627, + 59246: 36636, + 59247: 36639, + 59248: 36635, + 59249: 36620, + 59250: 36646, + 59251: 36659, + 59252: 36667, + 59253: 36665, + 59254: 36677, + 59255: 36674, + 59256: 36670, + 59257: 36684, + 59258: 36681, + 59259: 36678, + 59260: 36686, + 59261: 36695, + 59262: 36700, + 59264: 36706, + 59265: 36707, + 59266: 36708, + 59267: 36764, + 59268: 36767, + 59269: 36771, + 59270: 36781, + 59271: 36783, + 59272: 36791, + 59273: 36826, + 59274: 36837, + 59275: 36834, + 59276: 36842, + 59277: 36847, + 59278: 36999, + 59279: 36852, + 59280: 36869, + 59281: 36857, + 59282: 36858, + 59283: 36881, + 59284: 36885, + 59285: 36897, + 59286: 36877, + 59287: 36894, + 59288: 36886, + 59289: 36875, + 59290: 36903, + 59291: 36918, + 59292: 36917, + 59293: 36921, + 59294: 36856, + 59295: 36943, + 59296: 36944, + 59297: 36945, + 59298: 36946, + 59299: 36878, + 59300: 36937, + 59301: 36926, + 59302: 36950, + 59303: 36952, + 59304: 36958, + 59305: 36968, + 59306: 36975, + 59307: 36982, + 59308: 38568, + 59309: 36978, + 59310: 36994, + 59311: 36989, + 59312: 36993, + 59313: 36992, + 59314: 37002, + 59315: 37001, + 59316: 37007, + 59317: 37032, + 59318: 37039, + 59319: 37041, + 59320: 37045, + 59321: 37090, + 59322: 37092, + 59323: 25160, + 59324: 37083, + 59325: 37122, + 59326: 37138, + 59327: 37145, + 59328: 37170, + 59329: 37168, + 59330: 37194, + 59331: 37206, + 59332: 37208, + 59333: 37219, + 59334: 37221, + 59335: 37225, + 59336: 37235, + 59337: 37234, + 59338: 37259, + 59339: 37257, + 59340: 37250, + 59341: 37282, + 59342: 37291, + 59343: 37295, + 59344: 37290, + 59345: 37301, + 59346: 37300, + 59347: 37306, + 59348: 37312, + 59349: 37313, + 59350: 37321, + 59351: 37323, + 59352: 37328, + 59353: 37334, + 59354: 37343, + 59355: 37345, + 59356: 37339, + 59357: 37372, + 59358: 37365, + 59359: 37366, + 59360: 37406, + 59361: 37375, + 59362: 37396, + 59363: 37420, + 59364: 37397, + 59365: 37393, + 59366: 37470, + 59367: 37463, + 59368: 37445, + 59369: 37449, + 59370: 37476, + 59371: 37448, + 59372: 37525, + 59373: 37439, + 59374: 37451, + 59375: 37456, + 59376: 37532, + 59377: 37526, + 59378: 37523, + 59379: 37531, + 59380: 37466, + 59381: 37583, + 59382: 37561, + 59383: 37559, + 59384: 37609, + 59385: 37647, + 59386: 37626, + 59387: 37700, + 59388: 37678, + 59456: 37657, + 59457: 37666, + 59458: 37658, + 59459: 37667, + 59460: 37690, + 59461: 37685, + 59462: 37691, + 59463: 37724, + 59464: 37728, + 59465: 37756, + 59466: 37742, + 59467: 37718, + 59468: 37808, + 59469: 37804, + 59470: 37805, + 59471: 37780, + 59472: 37817, + 59473: 37846, + 59474: 37847, + 59475: 37864, + 59476: 37861, + 59477: 37848, + 59478: 37827, + 59479: 37853, + 59480: 37840, + 59481: 37832, + 59482: 37860, + 59483: 37914, + 59484: 37908, + 59485: 37907, + 59486: 37891, + 59487: 37895, + 59488: 37904, + 59489: 37942, + 59490: 37931, + 59491: 37941, + 59492: 37921, + 59493: 37946, + 59494: 37953, + 59495: 37970, + 59496: 37956, + 59497: 37979, + 59498: 37984, + 59499: 37986, + 59500: 37982, + 59501: 37994, + 59502: 37417, + 59503: 38e3, + 59504: 38005, + 59505: 38007, + 59506: 38013, + 59507: 37978, + 59508: 38012, + 59509: 38014, + 59510: 38017, + 59511: 38015, + 59512: 38274, + 59513: 38279, + 59514: 38282, + 59515: 38292, + 59516: 38294, + 59517: 38296, + 59518: 38297, + 59520: 38304, + 59521: 38312, + 59522: 38311, + 59523: 38317, + 59524: 38332, + 59525: 38331, + 59526: 38329, + 59527: 38334, + 59528: 38346, + 59529: 28662, + 59530: 38339, + 59531: 38349, + 59532: 38348, + 59533: 38357, + 59534: 38356, + 59535: 38358, + 59536: 38364, + 59537: 38369, + 59538: 38373, + 59539: 38370, + 59540: 38433, + 59541: 38440, + 59542: 38446, + 59543: 38447, + 59544: 38466, + 59545: 38476, + 59546: 38479, + 59547: 38475, + 59548: 38519, + 59549: 38492, + 59550: 38494, + 59551: 38493, + 59552: 38495, + 59553: 38502, + 59554: 38514, + 59555: 38508, + 59556: 38541, + 59557: 38552, + 59558: 38549, + 59559: 38551, + 59560: 38570, + 59561: 38567, + 59562: 38577, + 59563: 38578, + 59564: 38576, + 59565: 38580, + 59566: 38582, + 59567: 38584, + 59568: 38585, + 59569: 38606, + 59570: 38603, + 59571: 38601, + 59572: 38605, + 59573: 35149, + 59574: 38620, + 59575: 38669, + 59576: 38613, + 59577: 38649, + 59578: 38660, + 59579: 38662, + 59580: 38664, + 59581: 38675, + 59582: 38670, + 59583: 38673, + 59584: 38671, + 59585: 38678, + 59586: 38681, + 59587: 38692, + 59588: 38698, + 59589: 38704, + 59590: 38713, + 59591: 38717, + 59592: 38718, + 59593: 38724, + 59594: 38726, + 59595: 38728, + 59596: 38722, + 59597: 38729, + 59598: 38748, + 59599: 38752, + 59600: 38756, + 59601: 38758, + 59602: 38760, + 59603: 21202, + 59604: 38763, + 59605: 38769, + 59606: 38777, + 59607: 38789, + 59608: 38780, + 59609: 38785, + 59610: 38778, + 59611: 38790, + 59612: 38795, + 59613: 38799, + 59614: 38800, + 59615: 38812, + 59616: 38824, + 59617: 38822, + 59618: 38819, + 59619: 38835, + 59620: 38836, + 59621: 38851, + 59622: 38854, + 59623: 38856, + 59624: 38859, + 59625: 38876, + 59626: 38893, + 59627: 40783, + 59628: 38898, + 59629: 31455, + 59630: 38902, + 59631: 38901, + 59632: 38927, + 59633: 38924, + 59634: 38968, + 59635: 38948, + 59636: 38945, + 59637: 38967, + 59638: 38973, + 59639: 38982, + 59640: 38991, + 59641: 38987, + 59642: 39019, + 59643: 39023, + 59644: 39024, + 59712: 39025, + 59713: 39028, + 59714: 39027, + 59715: 39082, + 59716: 39087, + 59717: 39089, + 59718: 39094, + 59719: 39108, + 59720: 39107, + 59721: 39110, + 59722: 39145, + 59723: 39147, + 59724: 39171, + 59725: 39177, + 59726: 39186, + 59727: 39188, + 59728: 39192, + 59729: 39201, + 59730: 39197, + 59731: 39198, + 59732: 39204, + 59733: 39200, + 59734: 39212, + 59735: 39214, + 59736: 39229, + 59737: 39230, + 59738: 39234, + 59739: 39241, + 59740: 39237, + 59741: 39248, + 59742: 39243, + 59743: 39249, + 59744: 39250, + 59745: 39244, + 59746: 39253, + 59747: 39319, + 59748: 39320, + 59749: 39333, + 59750: 39341, + 59751: 39342, + 59752: 39356, + 59753: 39391, + 59754: 39387, + 59755: 39389, + 59756: 39384, + 59757: 39377, + 59758: 39405, + 59759: 39406, + 59760: 39409, + 59761: 39410, + 59762: 39419, + 59763: 39416, + 59764: 39425, + 59765: 39439, + 59766: 39429, + 59767: 39394, + 59768: 39449, + 59769: 39467, + 59770: 39479, + 59771: 39493, + 59772: 39490, + 59773: 39488, + 59774: 39491, + 59776: 39486, + 59777: 39509, + 59778: 39501, + 59779: 39515, + 59780: 39511, + 59781: 39519, + 59782: 39522, + 59783: 39525, + 59784: 39524, + 59785: 39529, + 59786: 39531, + 59787: 39530, + 59788: 39597, + 59789: 39600, + 59790: 39612, + 59791: 39616, + 59792: 39631, + 59793: 39633, + 59794: 39635, + 59795: 39636, + 59796: 39646, + 59797: 39647, + 59798: 39650, + 59799: 39651, + 59800: 39654, + 59801: 39663, + 59802: 39659, + 59803: 39662, + 59804: 39668, + 59805: 39665, + 59806: 39671, + 59807: 39675, + 59808: 39686, + 59809: 39704, + 59810: 39706, + 59811: 39711, + 59812: 39714, + 59813: 39715, + 59814: 39717, + 59815: 39719, + 59816: 39720, + 59817: 39721, + 59818: 39722, + 59819: 39726, + 59820: 39727, + 59821: 39730, + 59822: 39748, + 59823: 39747, + 59824: 39759, + 59825: 39757, + 59826: 39758, + 59827: 39761, + 59828: 39768, + 59829: 39796, + 59830: 39827, + 59831: 39811, + 59832: 39825, + 59833: 39830, + 59834: 39831, + 59835: 39839, + 59836: 39840, + 59837: 39848, + 59838: 39860, + 59839: 39872, + 59840: 39882, + 59841: 39865, + 59842: 39878, + 59843: 39887, + 59844: 39889, + 59845: 39890, + 59846: 39907, + 59847: 39906, + 59848: 39908, + 59849: 39892, + 59850: 39905, + 59851: 39994, + 59852: 39922, + 59853: 39921, + 59854: 39920, + 59855: 39957, + 59856: 39956, + 59857: 39945, + 59858: 39955, + 59859: 39948, + 59860: 39942, + 59861: 39944, + 59862: 39954, + 59863: 39946, + 59864: 39940, + 59865: 39982, + 59866: 39963, + 59867: 39973, + 59868: 39972, + 59869: 39969, + 59870: 39984, + 59871: 40007, + 59872: 39986, + 59873: 40006, + 59874: 39998, + 59875: 40026, + 59876: 40032, + 59877: 40039, + 59878: 40054, + 59879: 40056, + 59880: 40167, + 59881: 40172, + 59882: 40176, + 59883: 40201, + 59884: 40200, + 59885: 40171, + 59886: 40195, + 59887: 40198, + 59888: 40234, + 59889: 40230, + 59890: 40367, + 59891: 40227, + 59892: 40223, + 59893: 40260, + 59894: 40213, + 59895: 40210, + 59896: 40257, + 59897: 40255, + 59898: 40254, + 59899: 40262, + 59900: 40264, + 59968: 40285, + 59969: 40286, + 59970: 40292, + 59971: 40273, + 59972: 40272, + 59973: 40281, + 59974: 40306, + 59975: 40329, + 59976: 40327, + 59977: 40363, + 59978: 40303, + 59979: 40314, + 59980: 40346, + 59981: 40356, + 59982: 40361, + 59983: 40370, + 59984: 40388, + 59985: 40385, + 59986: 40379, + 59987: 40376, + 59988: 40378, + 59989: 40390, + 59990: 40399, + 59991: 40386, + 59992: 40409, + 59993: 40403, + 59994: 40440, + 59995: 40422, + 59996: 40429, + 59997: 40431, + 59998: 40445, + 59999: 40474, + 6e4: 40475, + 60001: 40478, + 60002: 40565, + 60003: 40569, + 60004: 40573, + 60005: 40577, + 60006: 40584, + 60007: 40587, + 60008: 40588, + 60009: 40594, + 60010: 40597, + 60011: 40593, + 60012: 40605, + 60013: 40613, + 60014: 40617, + 60015: 40632, + 60016: 40618, + 60017: 40621, + 60018: 38753, + 60019: 40652, + 60020: 40654, + 60021: 40655, + 60022: 40656, + 60023: 40660, + 60024: 40668, + 60025: 40670, + 60026: 40669, + 60027: 40672, + 60028: 40677, + 60029: 40680, + 60030: 40687, + 60032: 40692, + 60033: 40694, + 60034: 40695, + 60035: 40697, + 60036: 40699, + 60037: 40700, + 60038: 40701, + 60039: 40711, + 60040: 40712, + 60041: 30391, + 60042: 40725, + 60043: 40737, + 60044: 40748, + 60045: 40766, + 60046: 40778, + 60047: 40786, + 60048: 40788, + 60049: 40803, + 60050: 40799, + 60051: 40800, + 60052: 40801, + 60053: 40806, + 60054: 40807, + 60055: 40812, + 60056: 40810, + 60057: 40823, + 60058: 40818, + 60059: 40822, + 60060: 40853, + 60061: 40860, + 60062: 40864, + 60063: 22575, + 60064: 27079, + 60065: 36953, + 60066: 29796, + 60067: 20956, + 60068: 29081, + 60736: 32394, + 60737: 35100, + 60738: 37704, + 60739: 37512, + 60740: 34012, + 60741: 20425, + 60742: 28859, + 60743: 26161, + 60744: 26824, + 60745: 37625, + 60746: 26363, + 60747: 24389, + 60748: 20008, + 60749: 20193, + 60750: 20220, + 60751: 20224, + 60752: 20227, + 60753: 20281, + 60754: 20310, + 60755: 20370, + 60756: 20362, + 60757: 20378, + 60758: 20372, + 60759: 20429, + 60760: 20544, + 60761: 20514, + 60762: 20479, + 60763: 20510, + 60764: 20550, + 60765: 20592, + 60766: 20546, + 60767: 20628, + 60768: 20724, + 60769: 20696, + 60770: 20810, + 60771: 20836, + 60772: 20893, + 60773: 20926, + 60774: 20972, + 60775: 21013, + 60776: 21148, + 60777: 21158, + 60778: 21184, + 60779: 21211, + 60780: 21248, + 60781: 21255, + 60782: 21284, + 60783: 21362, + 60784: 21395, + 60785: 21426, + 60786: 21469, + 60787: 64014, + 60788: 21660, + 60789: 21642, + 60790: 21673, + 60791: 21759, + 60792: 21894, + 60793: 22361, + 60794: 22373, + 60795: 22444, + 60796: 22472, + 60797: 22471, + 60798: 64015, + 60800: 64016, + 60801: 22686, + 60802: 22706, + 60803: 22795, + 60804: 22867, + 60805: 22875, + 60806: 22877, + 60807: 22883, + 60808: 22948, + 60809: 22970, + 60810: 23382, + 60811: 23488, + 60812: 29999, + 60813: 23512, + 60814: 23532, + 60815: 23582, + 60816: 23718, + 60817: 23738, + 60818: 23797, + 60819: 23847, + 60820: 23891, + 60821: 64017, + 60822: 23874, + 60823: 23917, + 60824: 23992, + 60825: 23993, + 60826: 24016, + 60827: 24353, + 60828: 24372, + 60829: 24423, + 60830: 24503, + 60831: 24542, + 60832: 24669, + 60833: 24709, + 60834: 24714, + 60835: 24798, + 60836: 24789, + 60837: 24864, + 60838: 24818, + 60839: 24849, + 60840: 24887, + 60841: 24880, + 60842: 24984, + 60843: 25107, + 60844: 25254, + 60845: 25589, + 60846: 25696, + 60847: 25757, + 60848: 25806, + 60849: 25934, + 60850: 26112, + 60851: 26133, + 60852: 26171, + 60853: 26121, + 60854: 26158, + 60855: 26142, + 60856: 26148, + 60857: 26213, + 60858: 26199, + 60859: 26201, + 60860: 64018, + 60861: 26227, + 60862: 26265, + 60863: 26272, + 60864: 26290, + 60865: 26303, + 60866: 26362, + 60867: 26382, + 60868: 63785, + 60869: 26470, + 60870: 26555, + 60871: 26706, + 60872: 26560, + 60873: 26625, + 60874: 26692, + 60875: 26831, + 60876: 64019, + 60877: 26984, + 60878: 64020, + 60879: 27032, + 60880: 27106, + 60881: 27184, + 60882: 27243, + 60883: 27206, + 60884: 27251, + 60885: 27262, + 60886: 27362, + 60887: 27364, + 60888: 27606, + 60889: 27711, + 60890: 27740, + 60891: 27782, + 60892: 27759, + 60893: 27866, + 60894: 27908, + 60895: 28039, + 60896: 28015, + 60897: 28054, + 60898: 28076, + 60899: 28111, + 60900: 28152, + 60901: 28146, + 60902: 28156, + 60903: 28217, + 60904: 28252, + 60905: 28199, + 60906: 28220, + 60907: 28351, + 60908: 28552, + 60909: 28597, + 60910: 28661, + 60911: 28677, + 60912: 28679, + 60913: 28712, + 60914: 28805, + 60915: 28843, + 60916: 28943, + 60917: 28932, + 60918: 29020, + 60919: 28998, + 60920: 28999, + 60921: 64021, + 60922: 29121, + 60923: 29182, + 60924: 29361, + 60992: 29374, + 60993: 29476, + 60994: 64022, + 60995: 29559, + 60996: 29629, + 60997: 29641, + 60998: 29654, + 60999: 29667, + 61e3: 29650, + 61001: 29703, + 61002: 29685, + 61003: 29734, + 61004: 29738, + 61005: 29737, + 61006: 29742, + 61007: 29794, + 61008: 29833, + 61009: 29855, + 61010: 29953, + 61011: 30063, + 61012: 30338, + 61013: 30364, + 61014: 30366, + 61015: 30363, + 61016: 30374, + 61017: 64023, + 61018: 30534, + 61019: 21167, + 61020: 30753, + 61021: 30798, + 61022: 30820, + 61023: 30842, + 61024: 31024, + 61025: 64024, + 61026: 64025, + 61027: 64026, + 61028: 31124, + 61029: 64027, + 61030: 31131, + 61031: 31441, + 61032: 31463, + 61033: 64028, + 61034: 31467, + 61035: 31646, + 61036: 64029, + 61037: 32072, + 61038: 32092, + 61039: 32183, + 61040: 32160, + 61041: 32214, + 61042: 32338, + 61043: 32583, + 61044: 32673, + 61045: 64030, + 61046: 33537, + 61047: 33634, + 61048: 33663, + 61049: 33735, + 61050: 33782, + 61051: 33864, + 61052: 33972, + 61053: 34131, + 61054: 34137, + 61056: 34155, + 61057: 64031, + 61058: 34224, + 61059: 64032, + 61060: 64033, + 61061: 34823, + 61062: 35061, + 61063: 35346, + 61064: 35383, + 61065: 35449, + 61066: 35495, + 61067: 35518, + 61068: 35551, + 61069: 64034, + 61070: 35574, + 61071: 35667, + 61072: 35711, + 61073: 36080, + 61074: 36084, + 61075: 36114, + 61076: 36214, + 61077: 64035, + 61078: 36559, + 61079: 64036, + 61080: 64037, + 61081: 36967, + 61082: 37086, + 61083: 64038, + 61084: 37141, + 61085: 37159, + 61086: 37338, + 61087: 37335, + 61088: 37342, + 61089: 37357, + 61090: 37358, + 61091: 37348, + 61092: 37349, + 61093: 37382, + 61094: 37392, + 61095: 37386, + 61096: 37434, + 61097: 37440, + 61098: 37436, + 61099: 37454, + 61100: 37465, + 61101: 37457, + 61102: 37433, + 61103: 37479, + 61104: 37543, + 61105: 37495, + 61106: 37496, + 61107: 37607, + 61108: 37591, + 61109: 37593, + 61110: 37584, + 61111: 64039, + 61112: 37589, + 61113: 37600, + 61114: 37587, + 61115: 37669, + 61116: 37665, + 61117: 37627, + 61118: 64040, + 61119: 37662, + 61120: 37631, + 61121: 37661, + 61122: 37634, + 61123: 37744, + 61124: 37719, + 61125: 37796, + 61126: 37830, + 61127: 37854, + 61128: 37880, + 61129: 37937, + 61130: 37957, + 61131: 37960, + 61132: 38290, + 61133: 63964, + 61134: 64041, + 61135: 38557, + 61136: 38575, + 61137: 38707, + 61138: 38715, + 61139: 38723, + 61140: 38733, + 61141: 38735, + 61142: 38737, + 61143: 38741, + 61144: 38999, + 61145: 39013, + 61146: 64042, + 61147: 64043, + 61148: 39207, + 61149: 64044, + 61150: 39326, + 61151: 39502, + 61152: 39641, + 61153: 39644, + 61154: 39797, + 61155: 39794, + 61156: 39823, + 61157: 39857, + 61158: 39867, + 61159: 39936, + 61160: 40304, + 61161: 40299, + 61162: 64045, + 61163: 40473, + 61164: 40657, + 61167: 8560, + 61168: 8561, + 61169: 8562, + 61170: 8563, + 61171: 8564, + 61172: 8565, + 61173: 8566, + 61174: 8567, + 61175: 8568, + 61176: 8569, + 61177: 65506, + 61178: 65508, + 61179: 65287, + 61180: 65282, + 61504: 57344, + 61505: 57345, + 61506: 57346, + 61507: 57347, + 61508: 57348, + 61509: 57349, + 61510: 57350, + 61511: 57351, + 61512: 57352, + 61513: 57353, + 61514: 57354, + 61515: 57355, + 61516: 57356, + 61517: 57357, + 61518: 57358, + 61519: 57359, + 61520: 57360, + 61521: 57361, + 61522: 57362, + 61523: 57363, + 61524: 57364, + 61525: 57365, + 61526: 57366, + 61527: 57367, + 61528: 57368, + 61529: 57369, + 61530: 57370, + 61531: 57371, + 61532: 57372, + 61533: 57373, + 61534: 57374, + 61535: 57375, + 61536: 57376, + 61537: 57377, + 61538: 57378, + 61539: 57379, + 61540: 57380, + 61541: 57381, + 61542: 57382, + 61543: 57383, + 61544: 57384, + 61545: 57385, + 61546: 57386, + 61547: 57387, + 61548: 57388, + 61549: 57389, + 61550: 57390, + 61551: 57391, + 61552: 57392, + 61553: 57393, + 61554: 57394, + 61555: 57395, + 61556: 57396, + 61557: 57397, + 61558: 57398, + 61559: 57399, + 61560: 57400, + 61561: 57401, + 61562: 57402, + 61563: 57403, + 61564: 57404, + 61565: 57405, + 61566: 57406, + 61568: 57407, + 61569: 57408, + 61570: 57409, + 61571: 57410, + 61572: 57411, + 61573: 57412, + 61574: 57413, + 61575: 57414, + 61576: 57415, + 61577: 57416, + 61578: 57417, + 61579: 57418, + 61580: 57419, + 61581: 57420, + 61582: 57421, + 61583: 57422, + 61584: 57423, + 61585: 57424, + 61586: 57425, + 61587: 57426, + 61588: 57427, + 61589: 57428, + 61590: 57429, + 61591: 57430, + 61592: 57431, + 61593: 57432, + 61594: 57433, + 61595: 57434, + 61596: 57435, + 61597: 57436, + 61598: 57437, + 61599: 57438, + 61600: 57439, + 61601: 57440, + 61602: 57441, + 61603: 57442, + 61604: 57443, + 61605: 57444, + 61606: 57445, + 61607: 57446, + 61608: 57447, + 61609: 57448, + 61610: 57449, + 61611: 57450, + 61612: 57451, + 61613: 57452, + 61614: 57453, + 61615: 57454, + 61616: 57455, + 61617: 57456, + 61618: 57457, + 61619: 57458, + 61620: 57459, + 61621: 57460, + 61622: 57461, + 61623: 57462, + 61624: 57463, + 61625: 57464, + 61626: 57465, + 61627: 57466, + 61628: 57467, + 61629: 57468, + 61630: 57469, + 61631: 57470, + 61632: 57471, + 61633: 57472, + 61634: 57473, + 61635: 57474, + 61636: 57475, + 61637: 57476, + 61638: 57477, + 61639: 57478, + 61640: 57479, + 61641: 57480, + 61642: 57481, + 61643: 57482, + 61644: 57483, + 61645: 57484, + 61646: 57485, + 61647: 57486, + 61648: 57487, + 61649: 57488, + 61650: 57489, + 61651: 57490, + 61652: 57491, + 61653: 57492, + 61654: 57493, + 61655: 57494, + 61656: 57495, + 61657: 57496, + 61658: 57497, + 61659: 57498, + 61660: 57499, + 61661: 57500, + 61662: 57501, + 61663: 57502, + 61664: 57503, + 61665: 57504, + 61666: 57505, + 61667: 57506, + 61668: 57507, + 61669: 57508, + 61670: 57509, + 61671: 57510, + 61672: 57511, + 61673: 57512, + 61674: 57513, + 61675: 57514, + 61676: 57515, + 61677: 57516, + 61678: 57517, + 61679: 57518, + 61680: 57519, + 61681: 57520, + 61682: 57521, + 61683: 57522, + 61684: 57523, + 61685: 57524, + 61686: 57525, + 61687: 57526, + 61688: 57527, + 61689: 57528, + 61690: 57529, + 61691: 57530, + 61692: 57531, + 61760: 57532, + 61761: 57533, + 61762: 57534, + 61763: 57535, + 61764: 57536, + 61765: 57537, + 61766: 57538, + 61767: 57539, + 61768: 57540, + 61769: 57541, + 61770: 57542, + 61771: 57543, + 61772: 57544, + 61773: 57545, + 61774: 57546, + 61775: 57547, + 61776: 57548, + 61777: 57549, + 61778: 57550, + 61779: 57551, + 61780: 57552, + 61781: 57553, + 61782: 57554, + 61783: 57555, + 61784: 57556, + 61785: 57557, + 61786: 57558, + 61787: 57559, + 61788: 57560, + 61789: 57561, + 61790: 57562, + 61791: 57563, + 61792: 57564, + 61793: 57565, + 61794: 57566, + 61795: 57567, + 61796: 57568, + 61797: 57569, + 61798: 57570, + 61799: 57571, + 61800: 57572, + 61801: 57573, + 61802: 57574, + 61803: 57575, + 61804: 57576, + 61805: 57577, + 61806: 57578, + 61807: 57579, + 61808: 57580, + 61809: 57581, + 61810: 57582, + 61811: 57583, + 61812: 57584, + 61813: 57585, + 61814: 57586, + 61815: 57587, + 61816: 57588, + 61817: 57589, + 61818: 57590, + 61819: 57591, + 61820: 57592, + 61821: 57593, + 61822: 57594, + 61824: 57595, + 61825: 57596, + 61826: 57597, + 61827: 57598, + 61828: 57599, + 61829: 57600, + 61830: 57601, + 61831: 57602, + 61832: 57603, + 61833: 57604, + 61834: 57605, + 61835: 57606, + 61836: 57607, + 61837: 57608, + 61838: 57609, + 61839: 57610, + 61840: 57611, + 61841: 57612, + 61842: 57613, + 61843: 57614, + 61844: 57615, + 61845: 57616, + 61846: 57617, + 61847: 57618, + 61848: 57619, + 61849: 57620, + 61850: 57621, + 61851: 57622, + 61852: 57623, + 61853: 57624, + 61854: 57625, + 61855: 57626, + 61856: 57627, + 61857: 57628, + 61858: 57629, + 61859: 57630, + 61860: 57631, + 61861: 57632, + 61862: 57633, + 61863: 57634, + 61864: 57635, + 61865: 57636, + 61866: 57637, + 61867: 57638, + 61868: 57639, + 61869: 57640, + 61870: 57641, + 61871: 57642, + 61872: 57643, + 61873: 57644, + 61874: 57645, + 61875: 57646, + 61876: 57647, + 61877: 57648, + 61878: 57649, + 61879: 57650, + 61880: 57651, + 61881: 57652, + 61882: 57653, + 61883: 57654, + 61884: 57655, + 61885: 57656, + 61886: 57657, + 61887: 57658, + 61888: 57659, + 61889: 57660, + 61890: 57661, + 61891: 57662, + 61892: 57663, + 61893: 57664, + 61894: 57665, + 61895: 57666, + 61896: 57667, + 61897: 57668, + 61898: 57669, + 61899: 57670, + 61900: 57671, + 61901: 57672, + 61902: 57673, + 61903: 57674, + 61904: 57675, + 61905: 57676, + 61906: 57677, + 61907: 57678, + 61908: 57679, + 61909: 57680, + 61910: 57681, + 61911: 57682, + 61912: 57683, + 61913: 57684, + 61914: 57685, + 61915: 57686, + 61916: 57687, + 61917: 57688, + 61918: 57689, + 61919: 57690, + 61920: 57691, + 61921: 57692, + 61922: 57693, + 61923: 57694, + 61924: 57695, + 61925: 57696, + 61926: 57697, + 61927: 57698, + 61928: 57699, + 61929: 57700, + 61930: 57701, + 61931: 57702, + 61932: 57703, + 61933: 57704, + 61934: 57705, + 61935: 57706, + 61936: 57707, + 61937: 57708, + 61938: 57709, + 61939: 57710, + 61940: 57711, + 61941: 57712, + 61942: 57713, + 61943: 57714, + 61944: 57715, + 61945: 57716, + 61946: 57717, + 61947: 57718, + 61948: 57719, + 62016: 57720, + 62017: 57721, + 62018: 57722, + 62019: 57723, + 62020: 57724, + 62021: 57725, + 62022: 57726, + 62023: 57727, + 62024: 57728, + 62025: 57729, + 62026: 57730, + 62027: 57731, + 62028: 57732, + 62029: 57733, + 62030: 57734, + 62031: 57735, + 62032: 57736, + 62033: 57737, + 62034: 57738, + 62035: 57739, + 62036: 57740, + 62037: 57741, + 62038: 57742, + 62039: 57743, + 62040: 57744, + 62041: 57745, + 62042: 57746, + 62043: 57747, + 62044: 57748, + 62045: 57749, + 62046: 57750, + 62047: 57751, + 62048: 57752, + 62049: 57753, + 62050: 57754, + 62051: 57755, + 62052: 57756, + 62053: 57757, + 62054: 57758, + 62055: 57759, + 62056: 57760, + 62057: 57761, + 62058: 57762, + 62059: 57763, + 62060: 57764, + 62061: 57765, + 62062: 57766, + 62063: 57767, + 62064: 57768, + 62065: 57769, + 62066: 57770, + 62067: 57771, + 62068: 57772, + 62069: 57773, + 62070: 57774, + 62071: 57775, + 62072: 57776, + 62073: 57777, + 62074: 57778, + 62075: 57779, + 62076: 57780, + 62077: 57781, + 62078: 57782, + 62080: 57783, + 62081: 57784, + 62082: 57785, + 62083: 57786, + 62084: 57787, + 62085: 57788, + 62086: 57789, + 62087: 57790, + 62088: 57791, + 62089: 57792, + 62090: 57793, + 62091: 57794, + 62092: 57795, + 62093: 57796, + 62094: 57797, + 62095: 57798, + 62096: 57799, + 62097: 57800, + 62098: 57801, + 62099: 57802, + 62100: 57803, + 62101: 57804, + 62102: 57805, + 62103: 57806, + 62104: 57807, + 62105: 57808, + 62106: 57809, + 62107: 57810, + 62108: 57811, + 62109: 57812, + 62110: 57813, + 62111: 57814, + 62112: 57815, + 62113: 57816, + 62114: 57817, + 62115: 57818, + 62116: 57819, + 62117: 57820, + 62118: 57821, + 62119: 57822, + 62120: 57823, + 62121: 57824, + 62122: 57825, + 62123: 57826, + 62124: 57827, + 62125: 57828, + 62126: 57829, + 62127: 57830, + 62128: 57831, + 62129: 57832, + 62130: 57833, + 62131: 57834, + 62132: 57835, + 62133: 57836, + 62134: 57837, + 62135: 57838, + 62136: 57839, + 62137: 57840, + 62138: 57841, + 62139: 57842, + 62140: 57843, + 62141: 57844, + 62142: 57845, + 62143: 57846, + 62144: 57847, + 62145: 57848, + 62146: 57849, + 62147: 57850, + 62148: 57851, + 62149: 57852, + 62150: 57853, + 62151: 57854, + 62152: 57855, + 62153: 57856, + 62154: 57857, + 62155: 57858, + 62156: 57859, + 62157: 57860, + 62158: 57861, + 62159: 57862, + 62160: 57863, + 62161: 57864, + 62162: 57865, + 62163: 57866, + 62164: 57867, + 62165: 57868, + 62166: 57869, + 62167: 57870, + 62168: 57871, + 62169: 57872, + 62170: 57873, + 62171: 57874, + 62172: 57875, + 62173: 57876, + 62174: 57877, + 62175: 57878, + 62176: 57879, + 62177: 57880, + 62178: 57881, + 62179: 57882, + 62180: 57883, + 62181: 57884, + 62182: 57885, + 62183: 57886, + 62184: 57887, + 62185: 57888, + 62186: 57889, + 62187: 57890, + 62188: 57891, + 62189: 57892, + 62190: 57893, + 62191: 57894, + 62192: 57895, + 62193: 57896, + 62194: 57897, + 62195: 57898, + 62196: 57899, + 62197: 57900, + 62198: 57901, + 62199: 57902, + 62200: 57903, + 62201: 57904, + 62202: 57905, + 62203: 57906, + 62204: 57907, + 62272: 57908, + 62273: 57909, + 62274: 57910, + 62275: 57911, + 62276: 57912, + 62277: 57913, + 62278: 57914, + 62279: 57915, + 62280: 57916, + 62281: 57917, + 62282: 57918, + 62283: 57919, + 62284: 57920, + 62285: 57921, + 62286: 57922, + 62287: 57923, + 62288: 57924, + 62289: 57925, + 62290: 57926, + 62291: 57927, + 62292: 57928, + 62293: 57929, + 62294: 57930, + 62295: 57931, + 62296: 57932, + 62297: 57933, + 62298: 57934, + 62299: 57935, + 62300: 57936, + 62301: 57937, + 62302: 57938, + 62303: 57939, + 62304: 57940, + 62305: 57941, + 62306: 57942, + 62307: 57943, + 62308: 57944, + 62309: 57945, + 62310: 57946, + 62311: 57947, + 62312: 57948, + 62313: 57949, + 62314: 57950, + 62315: 57951, + 62316: 57952, + 62317: 57953, + 62318: 57954, + 62319: 57955, + 62320: 57956, + 62321: 57957, + 62322: 57958, + 62323: 57959, + 62324: 57960, + 62325: 57961, + 62326: 57962, + 62327: 57963, + 62328: 57964, + 62329: 57965, + 62330: 57966, + 62331: 57967, + 62332: 57968, + 62333: 57969, + 62334: 57970, + 62336: 57971, + 62337: 57972, + 62338: 57973, + 62339: 57974, + 62340: 57975, + 62341: 57976, + 62342: 57977, + 62343: 57978, + 62344: 57979, + 62345: 57980, + 62346: 57981, + 62347: 57982, + 62348: 57983, + 62349: 57984, + 62350: 57985, + 62351: 57986, + 62352: 57987, + 62353: 57988, + 62354: 57989, + 62355: 57990, + 62356: 57991, + 62357: 57992, + 62358: 57993, + 62359: 57994, + 62360: 57995, + 62361: 57996, + 62362: 57997, + 62363: 57998, + 62364: 57999, + 62365: 58e3, + 62366: 58001, + 62367: 58002, + 62368: 58003, + 62369: 58004, + 62370: 58005, + 62371: 58006, + 62372: 58007, + 62373: 58008, + 62374: 58009, + 62375: 58010, + 62376: 58011, + 62377: 58012, + 62378: 58013, + 62379: 58014, + 62380: 58015, + 62381: 58016, + 62382: 58017, + 62383: 58018, + 62384: 58019, + 62385: 58020, + 62386: 58021, + 62387: 58022, + 62388: 58023, + 62389: 58024, + 62390: 58025, + 62391: 58026, + 62392: 58027, + 62393: 58028, + 62394: 58029, + 62395: 58030, + 62396: 58031, + 62397: 58032, + 62398: 58033, + 62399: 58034, + 62400: 58035, + 62401: 58036, + 62402: 58037, + 62403: 58038, + 62404: 58039, + 62405: 58040, + 62406: 58041, + 62407: 58042, + 62408: 58043, + 62409: 58044, + 62410: 58045, + 62411: 58046, + 62412: 58047, + 62413: 58048, + 62414: 58049, + 62415: 58050, + 62416: 58051, + 62417: 58052, + 62418: 58053, + 62419: 58054, + 62420: 58055, + 62421: 58056, + 62422: 58057, + 62423: 58058, + 62424: 58059, + 62425: 58060, + 62426: 58061, + 62427: 58062, + 62428: 58063, + 62429: 58064, + 62430: 58065, + 62431: 58066, + 62432: 58067, + 62433: 58068, + 62434: 58069, + 62435: 58070, + 62436: 58071, + 62437: 58072, + 62438: 58073, + 62439: 58074, + 62440: 58075, + 62441: 58076, + 62442: 58077, + 62443: 58078, + 62444: 58079, + 62445: 58080, + 62446: 58081, + 62447: 58082, + 62448: 58083, + 62449: 58084, + 62450: 58085, + 62451: 58086, + 62452: 58087, + 62453: 58088, + 62454: 58089, + 62455: 58090, + 62456: 58091, + 62457: 58092, + 62458: 58093, + 62459: 58094, + 62460: 58095, + 62528: 58096, + 62529: 58097, + 62530: 58098, + 62531: 58099, + 62532: 58100, + 62533: 58101, + 62534: 58102, + 62535: 58103, + 62536: 58104, + 62537: 58105, + 62538: 58106, + 62539: 58107, + 62540: 58108, + 62541: 58109, + 62542: 58110, + 62543: 58111, + 62544: 58112, + 62545: 58113, + 62546: 58114, + 62547: 58115, + 62548: 58116, + 62549: 58117, + 62550: 58118, + 62551: 58119, + 62552: 58120, + 62553: 58121, + 62554: 58122, + 62555: 58123, + 62556: 58124, + 62557: 58125, + 62558: 58126, + 62559: 58127, + 62560: 58128, + 62561: 58129, + 62562: 58130, + 62563: 58131, + 62564: 58132, + 62565: 58133, + 62566: 58134, + 62567: 58135, + 62568: 58136, + 62569: 58137, + 62570: 58138, + 62571: 58139, + 62572: 58140, + 62573: 58141, + 62574: 58142, + 62575: 58143, + 62576: 58144, + 62577: 58145, + 62578: 58146, + 62579: 58147, + 62580: 58148, + 62581: 58149, + 62582: 58150, + 62583: 58151, + 62584: 58152, + 62585: 58153, + 62586: 58154, + 62587: 58155, + 62588: 58156, + 62589: 58157, + 62590: 58158, + 62592: 58159, + 62593: 58160, + 62594: 58161, + 62595: 58162, + 62596: 58163, + 62597: 58164, + 62598: 58165, + 62599: 58166, + 62600: 58167, + 62601: 58168, + 62602: 58169, + 62603: 58170, + 62604: 58171, + 62605: 58172, + 62606: 58173, + 62607: 58174, + 62608: 58175, + 62609: 58176, + 62610: 58177, + 62611: 58178, + 62612: 58179, + 62613: 58180, + 62614: 58181, + 62615: 58182, + 62616: 58183, + 62617: 58184, + 62618: 58185, + 62619: 58186, + 62620: 58187, + 62621: 58188, + 62622: 58189, + 62623: 58190, + 62624: 58191, + 62625: 58192, + 62626: 58193, + 62627: 58194, + 62628: 58195, + 62629: 58196, + 62630: 58197, + 62631: 58198, + 62632: 58199, + 62633: 58200, + 62634: 58201, + 62635: 58202, + 62636: 58203, + 62637: 58204, + 62638: 58205, + 62639: 58206, + 62640: 58207, + 62641: 58208, + 62642: 58209, + 62643: 58210, + 62644: 58211, + 62645: 58212, + 62646: 58213, + 62647: 58214, + 62648: 58215, + 62649: 58216, + 62650: 58217, + 62651: 58218, + 62652: 58219, + 62653: 58220, + 62654: 58221, + 62655: 58222, + 62656: 58223, + 62657: 58224, + 62658: 58225, + 62659: 58226, + 62660: 58227, + 62661: 58228, + 62662: 58229, + 62663: 58230, + 62664: 58231, + 62665: 58232, + 62666: 58233, + 62667: 58234, + 62668: 58235, + 62669: 58236, + 62670: 58237, + 62671: 58238, + 62672: 58239, + 62673: 58240, + 62674: 58241, + 62675: 58242, + 62676: 58243, + 62677: 58244, + 62678: 58245, + 62679: 58246, + 62680: 58247, + 62681: 58248, + 62682: 58249, + 62683: 58250, + 62684: 58251, + 62685: 58252, + 62686: 58253, + 62687: 58254, + 62688: 58255, + 62689: 58256, + 62690: 58257, + 62691: 58258, + 62692: 58259, + 62693: 58260, + 62694: 58261, + 62695: 58262, + 62696: 58263, + 62697: 58264, + 62698: 58265, + 62699: 58266, + 62700: 58267, + 62701: 58268, + 62702: 58269, + 62703: 58270, + 62704: 58271, + 62705: 58272, + 62706: 58273, + 62707: 58274, + 62708: 58275, + 62709: 58276, + 62710: 58277, + 62711: 58278, + 62712: 58279, + 62713: 58280, + 62714: 58281, + 62715: 58282, + 62716: 58283, + 62784: 58284, + 62785: 58285, + 62786: 58286, + 62787: 58287, + 62788: 58288, + 62789: 58289, + 62790: 58290, + 62791: 58291, + 62792: 58292, + 62793: 58293, + 62794: 58294, + 62795: 58295, + 62796: 58296, + 62797: 58297, + 62798: 58298, + 62799: 58299, + 62800: 58300, + 62801: 58301, + 62802: 58302, + 62803: 58303, + 62804: 58304, + 62805: 58305, + 62806: 58306, + 62807: 58307, + 62808: 58308, + 62809: 58309, + 62810: 58310, + 62811: 58311, + 62812: 58312, + 62813: 58313, + 62814: 58314, + 62815: 58315, + 62816: 58316, + 62817: 58317, + 62818: 58318, + 62819: 58319, + 62820: 58320, + 62821: 58321, + 62822: 58322, + 62823: 58323, + 62824: 58324, + 62825: 58325, + 62826: 58326, + 62827: 58327, + 62828: 58328, + 62829: 58329, + 62830: 58330, + 62831: 58331, + 62832: 58332, + 62833: 58333, + 62834: 58334, + 62835: 58335, + 62836: 58336, + 62837: 58337, + 62838: 58338, + 62839: 58339, + 62840: 58340, + 62841: 58341, + 62842: 58342, + 62843: 58343, + 62844: 58344, + 62845: 58345, + 62846: 58346, + 62848: 58347, + 62849: 58348, + 62850: 58349, + 62851: 58350, + 62852: 58351, + 62853: 58352, + 62854: 58353, + 62855: 58354, + 62856: 58355, + 62857: 58356, + 62858: 58357, + 62859: 58358, + 62860: 58359, + 62861: 58360, + 62862: 58361, + 62863: 58362, + 62864: 58363, + 62865: 58364, + 62866: 58365, + 62867: 58366, + 62868: 58367, + 62869: 58368, + 62870: 58369, + 62871: 58370, + 62872: 58371, + 62873: 58372, + 62874: 58373, + 62875: 58374, + 62876: 58375, + 62877: 58376, + 62878: 58377, + 62879: 58378, + 62880: 58379, + 62881: 58380, + 62882: 58381, + 62883: 58382, + 62884: 58383, + 62885: 58384, + 62886: 58385, + 62887: 58386, + 62888: 58387, + 62889: 58388, + 62890: 58389, + 62891: 58390, + 62892: 58391, + 62893: 58392, + 62894: 58393, + 62895: 58394, + 62896: 58395, + 62897: 58396, + 62898: 58397, + 62899: 58398, + 62900: 58399, + 62901: 58400, + 62902: 58401, + 62903: 58402, + 62904: 58403, + 62905: 58404, + 62906: 58405, + 62907: 58406, + 62908: 58407, + 62909: 58408, + 62910: 58409, + 62911: 58410, + 62912: 58411, + 62913: 58412, + 62914: 58413, + 62915: 58414, + 62916: 58415, + 62917: 58416, + 62918: 58417, + 62919: 58418, + 62920: 58419, + 62921: 58420, + 62922: 58421, + 62923: 58422, + 62924: 58423, + 62925: 58424, + 62926: 58425, + 62927: 58426, + 62928: 58427, + 62929: 58428, + 62930: 58429, + 62931: 58430, + 62932: 58431, + 62933: 58432, + 62934: 58433, + 62935: 58434, + 62936: 58435, + 62937: 58436, + 62938: 58437, + 62939: 58438, + 62940: 58439, + 62941: 58440, + 62942: 58441, + 62943: 58442, + 62944: 58443, + 62945: 58444, + 62946: 58445, + 62947: 58446, + 62948: 58447, + 62949: 58448, + 62950: 58449, + 62951: 58450, + 62952: 58451, + 62953: 58452, + 62954: 58453, + 62955: 58454, + 62956: 58455, + 62957: 58456, + 62958: 58457, + 62959: 58458, + 62960: 58459, + 62961: 58460, + 62962: 58461, + 62963: 58462, + 62964: 58463, + 62965: 58464, + 62966: 58465, + 62967: 58466, + 62968: 58467, + 62969: 58468, + 62970: 58469, + 62971: 58470, + 62972: 58471, + 63040: 58472, + 63041: 58473, + 63042: 58474, + 63043: 58475, + 63044: 58476, + 63045: 58477, + 63046: 58478, + 63047: 58479, + 63048: 58480, + 63049: 58481, + 63050: 58482, + 63051: 58483, + 63052: 58484, + 63053: 58485, + 63054: 58486, + 63055: 58487, + 63056: 58488, + 63057: 58489, + 63058: 58490, + 63059: 58491, + 63060: 58492, + 63061: 58493, + 63062: 58494, + 63063: 58495, + 63064: 58496, + 63065: 58497, + 63066: 58498, + 63067: 58499, + 63068: 58500, + 63069: 58501, + 63070: 58502, + 63071: 58503, + 63072: 58504, + 63073: 58505, + 63074: 58506, + 63075: 58507, + 63076: 58508, + 63077: 58509, + 63078: 58510, + 63079: 58511, + 63080: 58512, + 63081: 58513, + 63082: 58514, + 63083: 58515, + 63084: 58516, + 63085: 58517, + 63086: 58518, + 63087: 58519, + 63088: 58520, + 63089: 58521, + 63090: 58522, + 63091: 58523, + 63092: 58524, + 63093: 58525, + 63094: 58526, + 63095: 58527, + 63096: 58528, + 63097: 58529, + 63098: 58530, + 63099: 58531, + 63100: 58532, + 63101: 58533, + 63102: 58534, + 63104: 58535, + 63105: 58536, + 63106: 58537, + 63107: 58538, + 63108: 58539, + 63109: 58540, + 63110: 58541, + 63111: 58542, + 63112: 58543, + 63113: 58544, + 63114: 58545, + 63115: 58546, + 63116: 58547, + 63117: 58548, + 63118: 58549, + 63119: 58550, + 63120: 58551, + 63121: 58552, + 63122: 58553, + 63123: 58554, + 63124: 58555, + 63125: 58556, + 63126: 58557, + 63127: 58558, + 63128: 58559, + 63129: 58560, + 63130: 58561, + 63131: 58562, + 63132: 58563, + 63133: 58564, + 63134: 58565, + 63135: 58566, + 63136: 58567, + 63137: 58568, + 63138: 58569, + 63139: 58570, + 63140: 58571, + 63141: 58572, + 63142: 58573, + 63143: 58574, + 63144: 58575, + 63145: 58576, + 63146: 58577, + 63147: 58578, + 63148: 58579, + 63149: 58580, + 63150: 58581, + 63151: 58582, + 63152: 58583, + 63153: 58584, + 63154: 58585, + 63155: 58586, + 63156: 58587, + 63157: 58588, + 63158: 58589, + 63159: 58590, + 63160: 58591, + 63161: 58592, + 63162: 58593, + 63163: 58594, + 63164: 58595, + 63165: 58596, + 63166: 58597, + 63167: 58598, + 63168: 58599, + 63169: 58600, + 63170: 58601, + 63171: 58602, + 63172: 58603, + 63173: 58604, + 63174: 58605, + 63175: 58606, + 63176: 58607, + 63177: 58608, + 63178: 58609, + 63179: 58610, + 63180: 58611, + 63181: 58612, + 63182: 58613, + 63183: 58614, + 63184: 58615, + 63185: 58616, + 63186: 58617, + 63187: 58618, + 63188: 58619, + 63189: 58620, + 63190: 58621, + 63191: 58622, + 63192: 58623, + 63193: 58624, + 63194: 58625, + 63195: 58626, + 63196: 58627, + 63197: 58628, + 63198: 58629, + 63199: 58630, + 63200: 58631, + 63201: 58632, + 63202: 58633, + 63203: 58634, + 63204: 58635, + 63205: 58636, + 63206: 58637, + 63207: 58638, + 63208: 58639, + 63209: 58640, + 63210: 58641, + 63211: 58642, + 63212: 58643, + 63213: 58644, + 63214: 58645, + 63215: 58646, + 63216: 58647, + 63217: 58648, + 63218: 58649, + 63219: 58650, + 63220: 58651, + 63221: 58652, + 63222: 58653, + 63223: 58654, + 63224: 58655, + 63225: 58656, + 63226: 58657, + 63227: 58658, + 63228: 58659, + 63296: 58660, + 63297: 58661, + 63298: 58662, + 63299: 58663, + 63300: 58664, + 63301: 58665, + 63302: 58666, + 63303: 58667, + 63304: 58668, + 63305: 58669, + 63306: 58670, + 63307: 58671, + 63308: 58672, + 63309: 58673, + 63310: 58674, + 63311: 58675, + 63312: 58676, + 63313: 58677, + 63314: 58678, + 63315: 58679, + 63316: 58680, + 63317: 58681, + 63318: 58682, + 63319: 58683, + 63320: 58684, + 63321: 58685, + 63322: 58686, + 63323: 58687, + 63324: 58688, + 63325: 58689, + 63326: 58690, + 63327: 58691, + 63328: 58692, + 63329: 58693, + 63330: 58694, + 63331: 58695, + 63332: 58696, + 63333: 58697, + 63334: 58698, + 63335: 58699, + 63336: 58700, + 63337: 58701, + 63338: 58702, + 63339: 58703, + 63340: 58704, + 63341: 58705, + 63342: 58706, + 63343: 58707, + 63344: 58708, + 63345: 58709, + 63346: 58710, + 63347: 58711, + 63348: 58712, + 63349: 58713, + 63350: 58714, + 63351: 58715, + 63352: 58716, + 63353: 58717, + 63354: 58718, + 63355: 58719, + 63356: 58720, + 63357: 58721, + 63358: 58722, + 63360: 58723, + 63361: 58724, + 63362: 58725, + 63363: 58726, + 63364: 58727, + 63365: 58728, + 63366: 58729, + 63367: 58730, + 63368: 58731, + 63369: 58732, + 63370: 58733, + 63371: 58734, + 63372: 58735, + 63373: 58736, + 63374: 58737, + 63375: 58738, + 63376: 58739, + 63377: 58740, + 63378: 58741, + 63379: 58742, + 63380: 58743, + 63381: 58744, + 63382: 58745, + 63383: 58746, + 63384: 58747, + 63385: 58748, + 63386: 58749, + 63387: 58750, + 63388: 58751, + 63389: 58752, + 63390: 58753, + 63391: 58754, + 63392: 58755, + 63393: 58756, + 63394: 58757, + 63395: 58758, + 63396: 58759, + 63397: 58760, + 63398: 58761, + 63399: 58762, + 63400: 58763, + 63401: 58764, + 63402: 58765, + 63403: 58766, + 63404: 58767, + 63405: 58768, + 63406: 58769, + 63407: 58770, + 63408: 58771, + 63409: 58772, + 63410: 58773, + 63411: 58774, + 63412: 58775, + 63413: 58776, + 63414: 58777, + 63415: 58778, + 63416: 58779, + 63417: 58780, + 63418: 58781, + 63419: 58782, + 63420: 58783, + 63421: 58784, + 63422: 58785, + 63423: 58786, + 63424: 58787, + 63425: 58788, + 63426: 58789, + 63427: 58790, + 63428: 58791, + 63429: 58792, + 63430: 58793, + 63431: 58794, + 63432: 58795, + 63433: 58796, + 63434: 58797, + 63435: 58798, + 63436: 58799, + 63437: 58800, + 63438: 58801, + 63439: 58802, + 63440: 58803, + 63441: 58804, + 63442: 58805, + 63443: 58806, + 63444: 58807, + 63445: 58808, + 63446: 58809, + 63447: 58810, + 63448: 58811, + 63449: 58812, + 63450: 58813, + 63451: 58814, + 63452: 58815, + 63453: 58816, + 63454: 58817, + 63455: 58818, + 63456: 58819, + 63457: 58820, + 63458: 58821, + 63459: 58822, + 63460: 58823, + 63461: 58824, + 63462: 58825, + 63463: 58826, + 63464: 58827, + 63465: 58828, + 63466: 58829, + 63467: 58830, + 63468: 58831, + 63469: 58832, + 63470: 58833, + 63471: 58834, + 63472: 58835, + 63473: 58836, + 63474: 58837, + 63475: 58838, + 63476: 58839, + 63477: 58840, + 63478: 58841, + 63479: 58842, + 63480: 58843, + 63481: 58844, + 63482: 58845, + 63483: 58846, + 63484: 58847, + 63552: 58848, + 63553: 58849, + 63554: 58850, + 63555: 58851, + 63556: 58852, + 63557: 58853, + 63558: 58854, + 63559: 58855, + 63560: 58856, + 63561: 58857, + 63562: 58858, + 63563: 58859, + 63564: 58860, + 63565: 58861, + 63566: 58862, + 63567: 58863, + 63568: 58864, + 63569: 58865, + 63570: 58866, + 63571: 58867, + 63572: 58868, + 63573: 58869, + 63574: 58870, + 63575: 58871, + 63576: 58872, + 63577: 58873, + 63578: 58874, + 63579: 58875, + 63580: 58876, + 63581: 58877, + 63582: 58878, + 63583: 58879, + 63584: 58880, + 63585: 58881, + 63586: 58882, + 63587: 58883, + 63588: 58884, + 63589: 58885, + 63590: 58886, + 63591: 58887, + 63592: 58888, + 63593: 58889, + 63594: 58890, + 63595: 58891, + 63596: 58892, + 63597: 58893, + 63598: 58894, + 63599: 58895, + 63600: 58896, + 63601: 58897, + 63602: 58898, + 63603: 58899, + 63604: 58900, + 63605: 58901, + 63606: 58902, + 63607: 58903, + 63608: 58904, + 63609: 58905, + 63610: 58906, + 63611: 58907, + 63612: 58908, + 63613: 58909, + 63614: 58910, + 63616: 58911, + 63617: 58912, + 63618: 58913, + 63619: 58914, + 63620: 58915, + 63621: 58916, + 63622: 58917, + 63623: 58918, + 63624: 58919, + 63625: 58920, + 63626: 58921, + 63627: 58922, + 63628: 58923, + 63629: 58924, + 63630: 58925, + 63631: 58926, + 63632: 58927, + 63633: 58928, + 63634: 58929, + 63635: 58930, + 63636: 58931, + 63637: 58932, + 63638: 58933, + 63639: 58934, + 63640: 58935, + 63641: 58936, + 63642: 58937, + 63643: 58938, + 63644: 58939, + 63645: 58940, + 63646: 58941, + 63647: 58942, + 63648: 58943, + 63649: 58944, + 63650: 58945, + 63651: 58946, + 63652: 58947, + 63653: 58948, + 63654: 58949, + 63655: 58950, + 63656: 58951, + 63657: 58952, + 63658: 58953, + 63659: 58954, + 63660: 58955, + 63661: 58956, + 63662: 58957, + 63663: 58958, + 63664: 58959, + 63665: 58960, + 63666: 58961, + 63667: 58962, + 63668: 58963, + 63669: 58964, + 63670: 58965, + 63671: 58966, + 63672: 58967, + 63673: 58968, + 63674: 58969, + 63675: 58970, + 63676: 58971, + 63677: 58972, + 63678: 58973, + 63679: 58974, + 63680: 58975, + 63681: 58976, + 63682: 58977, + 63683: 58978, + 63684: 58979, + 63685: 58980, + 63686: 58981, + 63687: 58982, + 63688: 58983, + 63689: 58984, + 63690: 58985, + 63691: 58986, + 63692: 58987, + 63693: 58988, + 63694: 58989, + 63695: 58990, + 63696: 58991, + 63697: 58992, + 63698: 58993, + 63699: 58994, + 63700: 58995, + 63701: 58996, + 63702: 58997, + 63703: 58998, + 63704: 58999, + 63705: 59e3, + 63706: 59001, + 63707: 59002, + 63708: 59003, + 63709: 59004, + 63710: 59005, + 63711: 59006, + 63712: 59007, + 63713: 59008, + 63714: 59009, + 63715: 59010, + 63716: 59011, + 63717: 59012, + 63718: 59013, + 63719: 59014, + 63720: 59015, + 63721: 59016, + 63722: 59017, + 63723: 59018, + 63724: 59019, + 63725: 59020, + 63726: 59021, + 63727: 59022, + 63728: 59023, + 63729: 59024, + 63730: 59025, + 63731: 59026, + 63732: 59027, + 63733: 59028, + 63734: 59029, + 63735: 59030, + 63736: 59031, + 63737: 59032, + 63738: 59033, + 63739: 59034, + 63740: 59035, + 64064: 8560, + 64065: 8561, + 64066: 8562, + 64067: 8563, + 64068: 8564, + 64069: 8565, + 64070: 8566, + 64071: 8567, + 64072: 8568, + 64073: 8569, + 64074: 8544, + 64075: 8545, + 64076: 8546, + 64077: 8547, + 64078: 8548, + 64079: 8549, + 64080: 8550, + 64081: 8551, + 64082: 8552, + 64083: 8553, + 64084: 65506, + 64085: 65508, + 64086: 65287, + 64087: 65282, + 64088: 12849, + 64089: 8470, + 64090: 8481, + 64091: 8757, + 64092: 32394, + 64093: 35100, + 64094: 37704, + 64095: 37512, + 64096: 34012, + 64097: 20425, + 64098: 28859, + 64099: 26161, + 64100: 26824, + 64101: 37625, + 64102: 26363, + 64103: 24389, + 64104: 20008, + 64105: 20193, + 64106: 20220, + 64107: 20224, + 64108: 20227, + 64109: 20281, + 64110: 20310, + 64111: 20370, + 64112: 20362, + 64113: 20378, + 64114: 20372, + 64115: 20429, + 64116: 20544, + 64117: 20514, + 64118: 20479, + 64119: 20510, + 64120: 20550, + 64121: 20592, + 64122: 20546, + 64123: 20628, + 64124: 20724, + 64125: 20696, + 64126: 20810, + 64128: 20836, + 64129: 20893, + 64130: 20926, + 64131: 20972, + 64132: 21013, + 64133: 21148, + 64134: 21158, + 64135: 21184, + 64136: 21211, + 64137: 21248, + 64138: 21255, + 64139: 21284, + 64140: 21362, + 64141: 21395, + 64142: 21426, + 64143: 21469, + 64144: 64014, + 64145: 21660, + 64146: 21642, + 64147: 21673, + 64148: 21759, + 64149: 21894, + 64150: 22361, + 64151: 22373, + 64152: 22444, + 64153: 22472, + 64154: 22471, + 64155: 64015, + 64156: 64016, + 64157: 22686, + 64158: 22706, + 64159: 22795, + 64160: 22867, + 64161: 22875, + 64162: 22877, + 64163: 22883, + 64164: 22948, + 64165: 22970, + 64166: 23382, + 64167: 23488, + 64168: 29999, + 64169: 23512, + 64170: 23532, + 64171: 23582, + 64172: 23718, + 64173: 23738, + 64174: 23797, + 64175: 23847, + 64176: 23891, + 64177: 64017, + 64178: 23874, + 64179: 23917, + 64180: 23992, + 64181: 23993, + 64182: 24016, + 64183: 24353, + 64184: 24372, + 64185: 24423, + 64186: 24503, + 64187: 24542, + 64188: 24669, + 64189: 24709, + 64190: 24714, + 64191: 24798, + 64192: 24789, + 64193: 24864, + 64194: 24818, + 64195: 24849, + 64196: 24887, + 64197: 24880, + 64198: 24984, + 64199: 25107, + 64200: 25254, + 64201: 25589, + 64202: 25696, + 64203: 25757, + 64204: 25806, + 64205: 25934, + 64206: 26112, + 64207: 26133, + 64208: 26171, + 64209: 26121, + 64210: 26158, + 64211: 26142, + 64212: 26148, + 64213: 26213, + 64214: 26199, + 64215: 26201, + 64216: 64018, + 64217: 26227, + 64218: 26265, + 64219: 26272, + 64220: 26290, + 64221: 26303, + 64222: 26362, + 64223: 26382, + 64224: 63785, + 64225: 26470, + 64226: 26555, + 64227: 26706, + 64228: 26560, + 64229: 26625, + 64230: 26692, + 64231: 26831, + 64232: 64019, + 64233: 26984, + 64234: 64020, + 64235: 27032, + 64236: 27106, + 64237: 27184, + 64238: 27243, + 64239: 27206, + 64240: 27251, + 64241: 27262, + 64242: 27362, + 64243: 27364, + 64244: 27606, + 64245: 27711, + 64246: 27740, + 64247: 27782, + 64248: 27759, + 64249: 27866, + 64250: 27908, + 64251: 28039, + 64252: 28015, + 64320: 28054, + 64321: 28076, + 64322: 28111, + 64323: 28152, + 64324: 28146, + 64325: 28156, + 64326: 28217, + 64327: 28252, + 64328: 28199, + 64329: 28220, + 64330: 28351, + 64331: 28552, + 64332: 28597, + 64333: 28661, + 64334: 28677, + 64335: 28679, + 64336: 28712, + 64337: 28805, + 64338: 28843, + 64339: 28943, + 64340: 28932, + 64341: 29020, + 64342: 28998, + 64343: 28999, + 64344: 64021, + 64345: 29121, + 64346: 29182, + 64347: 29361, + 64348: 29374, + 64349: 29476, + 64350: 64022, + 64351: 29559, + 64352: 29629, + 64353: 29641, + 64354: 29654, + 64355: 29667, + 64356: 29650, + 64357: 29703, + 64358: 29685, + 64359: 29734, + 64360: 29738, + 64361: 29737, + 64362: 29742, + 64363: 29794, + 64364: 29833, + 64365: 29855, + 64366: 29953, + 64367: 30063, + 64368: 30338, + 64369: 30364, + 64370: 30366, + 64371: 30363, + 64372: 30374, + 64373: 64023, + 64374: 30534, + 64375: 21167, + 64376: 30753, + 64377: 30798, + 64378: 30820, + 64379: 30842, + 64380: 31024, + 64381: 64024, + 64382: 64025, + 64384: 64026, + 64385: 31124, + 64386: 64027, + 64387: 31131, + 64388: 31441, + 64389: 31463, + 64390: 64028, + 64391: 31467, + 64392: 31646, + 64393: 64029, + 64394: 32072, + 64395: 32092, + 64396: 32183, + 64397: 32160, + 64398: 32214, + 64399: 32338, + 64400: 32583, + 64401: 32673, + 64402: 64030, + 64403: 33537, + 64404: 33634, + 64405: 33663, + 64406: 33735, + 64407: 33782, + 64408: 33864, + 64409: 33972, + 64410: 34131, + 64411: 34137, + 64412: 34155, + 64413: 64031, + 64414: 34224, + 64415: 64032, + 64416: 64033, + 64417: 34823, + 64418: 35061, + 64419: 35346, + 64420: 35383, + 64421: 35449, + 64422: 35495, + 64423: 35518, + 64424: 35551, + 64425: 64034, + 64426: 35574, + 64427: 35667, + 64428: 35711, + 64429: 36080, + 64430: 36084, + 64431: 36114, + 64432: 36214, + 64433: 64035, + 64434: 36559, + 64435: 64036, + 64436: 64037, + 64437: 36967, + 64438: 37086, + 64439: 64038, + 64440: 37141, + 64441: 37159, + 64442: 37338, + 64443: 37335, + 64444: 37342, + 64445: 37357, + 64446: 37358, + 64447: 37348, + 64448: 37349, + 64449: 37382, + 64450: 37392, + 64451: 37386, + 64452: 37434, + 64453: 37440, + 64454: 37436, + 64455: 37454, + 64456: 37465, + 64457: 37457, + 64458: 37433, + 64459: 37479, + 64460: 37543, + 64461: 37495, + 64462: 37496, + 64463: 37607, + 64464: 37591, + 64465: 37593, + 64466: 37584, + 64467: 64039, + 64468: 37589, + 64469: 37600, + 64470: 37587, + 64471: 37669, + 64472: 37665, + 64473: 37627, + 64474: 64040, + 64475: 37662, + 64476: 37631, + 64477: 37661, + 64478: 37634, + 64479: 37744, + 64480: 37719, + 64481: 37796, + 64482: 37830, + 64483: 37854, + 64484: 37880, + 64485: 37937, + 64486: 37957, + 64487: 37960, + 64488: 38290, + 64489: 63964, + 64490: 64041, + 64491: 38557, + 64492: 38575, + 64493: 38707, + 64494: 38715, + 64495: 38723, + 64496: 38733, + 64497: 38735, + 64498: 38737, + 64499: 38741, + 64500: 38999, + 64501: 39013, + 64502: 64042, + 64503: 64043, + 64504: 39207, + 64505: 64044, + 64506: 39326, + 64507: 39502, + 64508: 39641, + 64576: 39644, + 64577: 39797, + 64578: 39794, + 64579: 39823, + 64580: 39857, + 64581: 39867, + 64582: 39936, + 64583: 40304, + 64584: 40299, + 64585: 64045, + 64586: 40473, + 64587: 40657 +}; +function DataViewEx(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + this.encoder = new CharsetEncoder(); +} +DataViewEx.prototype = { + constructor: DataViewEx, + getInt8: function() { + var value2 = this.dv.getInt8(this.offset); + this.offset += 1; + return value2; + }, + getInt8Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt8()); + } + return a2; + }, + getUint8: function() { + var value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + }, + getUint8Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint8()); + } + return a2; + }, + getInt16: function() { + var value2 = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + }, + getInt16Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt16()); + } + return a2; + }, + getUint16: function() { + var value2 = this.dv.getUint16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + }, + getUint16Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint16()); + } + return a2; + }, + getInt32: function() { + var value2 = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getInt32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getInt32()); + } + return a2; + }, + getUint32: function() { + var value2 = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getUint32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getUint32()); + } + return a2; + }, + getFloat32: function() { + var value2 = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + }, + getFloat32Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + }, + getFloat64: function() { + var value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + }, + getFloat64Array: function(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + }, + getIndex: function(type, isUnsigned) { + switch (type) { + case 1: + return isUnsigned === true ? this.getUint8() : this.getInt8(); + case 2: + return isUnsigned === true ? this.getUint16() : this.getInt16(); + case 4: + return this.getInt32(); + default: + throw "unknown number type " + type + " exception."; + } + }, + getIndexArray: function(type, size2, isUnsigned) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getIndex(type, isUnsigned)); + } + return a2; + }, + getChars: function(size2) { + var str = ""; + while (size2 > 0) { + var value2 = this.getUint8(); + size2--; + if (value2 === 0) { + break; + } + str += String.fromCharCode(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return str; + }, + getSjisStringsAsUnicode: function(size2) { + var a2 = []; + while (size2 > 0) { + var value2 = this.getUint8(); + size2--; + if (value2 === 0) { + break; + } + a2.push(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return this.encoder.s2u(new Uint8Array(a2)); + }, + getUnicodeStrings: function(size2) { + var str = ""; + while (size2 > 0) { + var value2 = this.getUint16(); + size2 -= 2; + if (value2 === 0) { + break; + } + str += String.fromCharCode(value2); + } + while (size2 > 0) { + this.getUint8(); + size2--; + } + return str; + }, + getTextBuffer: function() { + var size2 = this.getUint32(); + return this.getUnicodeStrings(size2); + } +}; +function DataCreationHelper() { +} +DataCreationHelper.prototype = { + constructor: DataCreationHelper, + leftToRightVector3: function(v) { + v[2] = -v[2]; + }, + leftToRightQuaternion: function(q2) { + q2[0] = -q2[0]; + q2[1] = -q2[1]; + }, + leftToRightEuler: function(r) { + r[0] = -r[0]; + r[1] = -r[1]; + }, + leftToRightIndexOrder: function(p2) { + var tmp = p2[2]; + p2[2] = p2[0]; + p2[0] = tmp; + }, + leftToRightVector3Range: function(v12, v2) { + var tmp = -v2[2]; + v2[2] = -v12[2]; + v12[2] = tmp; + }, + leftToRightEulerRange: function(r1, r2) { + var tmp1 = -r2[0]; + var tmp2 = -r2[1]; + r2[0] = -r1[0]; + r2[1] = -r1[1]; + r1[0] = tmp1; + r1[1] = tmp2; + } +}; +function Parser() { +} +Parser.prototype.parsePmd = function(buffer, leftToRight) { + var pmd = {}; + var dv = new DataViewEx(buffer); + pmd.metadata = {}; + pmd.metadata.format = "pmd"; + pmd.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = pmd.metadata; + metadata.magic = dv.getChars(3); + if (metadata.magic !== "Pmd") { + throw "PMD file magic is not Pmd, but " + metadata.magic; + } + metadata.version = dv.getFloat32(); + metadata.modelName = dv.getSjisStringsAsUnicode(20); + metadata.comment = dv.getSjisStringsAsUnicode(256); + }; + var parseVertices = function() { + var parseVertex = function() { + var p2 = {}; + p2.position = dv.getFloat32Array(3); + p2.normal = dv.getFloat32Array(3); + p2.uv = dv.getFloat32Array(2); + p2.skinIndices = dv.getUint16Array(2); + p2.skinWeights = [dv.getUint8() / 100]; + p2.skinWeights.push(1 - p2.skinWeights[0]); + p2.edgeFlag = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.vertexCount = dv.getUint32(); + pmd.vertices = []; + for (var i = 0; i < metadata.vertexCount; i++) { + pmd.vertices.push(parseVertex()); + } + }; + var parseFaces = function() { + var parseFace = function() { + var p2 = {}; + p2.indices = dv.getUint16Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.faceCount = dv.getUint32() / 3; + pmd.faces = []; + for (var i = 0; i < metadata.faceCount; i++) { + pmd.faces.push(parseFace()); + } + }; + var parseMaterials = function() { + var parseMaterial = function() { + var p2 = {}; + p2.diffuse = dv.getFloat32Array(4); + p2.shininess = dv.getFloat32(); + p2.specular = dv.getFloat32Array(3); + p2.ambient = dv.getFloat32Array(3); + p2.toonIndex = dv.getInt8(); + p2.edgeFlag = dv.getUint8(); + p2.faceCount = dv.getUint32() / 3; + p2.fileName = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + metadata.materialCount = dv.getUint32(); + pmd.materials = []; + for (var i = 0; i < metadata.materialCount; i++) { + pmd.materials.push(parseMaterial()); + } + }; + var parseBones = function() { + var parseBone = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.parentIndex = dv.getInt16(); + p2.tailIndex = dv.getInt16(); + p2.type = dv.getUint8(); + p2.ikIndex = dv.getInt16(); + p2.position = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneCount = dv.getUint16(); + pmd.bones = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmd.bones.push(parseBone()); + } + }; + var parseIks = function() { + var parseIk = function() { + var p2 = {}; + p2.target = dv.getUint16(); + p2.effector = dv.getUint16(); + p2.linkCount = dv.getUint8(); + p2.iteration = dv.getUint16(); + p2.maxAngle = dv.getFloat32(); + p2.links = []; + for (var i2 = 0; i2 < p2.linkCount; i2++) { + var link = {}; + link.index = dv.getUint16(); + p2.links.push(link); + } + return p2; + }; + var metadata = pmd.metadata; + metadata.ikCount = dv.getUint16(); + pmd.iks = []; + for (var i = 0; i < metadata.ikCount; i++) { + pmd.iks.push(parseIk()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.elementCount = dv.getUint32(); + p2.type = dv.getUint8(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + p2.elements.push({ + index: dv.getUint32(), + position: dv.getFloat32Array(3) + }); + } + return p2; + }; + var metadata = pmd.metadata; + metadata.morphCount = dv.getUint16(); + pmd.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + pmd.morphs.push(parseMorph()); + } + }; + var parseMorphFrames = function() { + var parseMorphFrame = function() { + var p2 = {}; + p2.index = dv.getUint16(); + return p2; + }; + var metadata = pmd.metadata; + metadata.morphFrameCount = dv.getUint8(); + pmd.morphFrames = []; + for (var i = 0; i < metadata.morphFrameCount; i++) { + pmd.morphFrames.push(parseMorphFrame()); + } + }; + var parseBoneFrameNames = function() { + var parseBoneFrameName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(50); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneFrameNameCount = dv.getUint8(); + pmd.boneFrameNames = []; + for (var i = 0; i < metadata.boneFrameNameCount; i++) { + pmd.boneFrameNames.push(parseBoneFrameName()); + } + }; + var parseBoneFrames = function() { + var parseBoneFrame = function() { + var p2 = {}; + p2.boneIndex = dv.getInt16(); + p2.frameIndex = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.boneFrameCount = dv.getUint32(); + pmd.boneFrames = []; + for (var i = 0; i < metadata.boneFrameCount; i++) { + pmd.boneFrames.push(parseBoneFrame()); + } + }; + var parseEnglishHeader = function() { + var metadata = pmd.metadata; + metadata.englishCompatibility = dv.getUint8(); + if (metadata.englishCompatibility > 0) { + metadata.englishModelName = dv.getSjisStringsAsUnicode(20); + metadata.englishComment = dv.getSjisStringsAsUnicode(256); + } + }; + var parseEnglishBoneNames = function() { + var parseEnglishBoneName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishBoneNames = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmd.englishBoneNames.push(parseEnglishBoneName()); + } + }; + var parseEnglishMorphNames = function() { + var parseEnglishMorphName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishMorphNames = []; + for (var i = 0; i < metadata.morphCount - 1; i++) { + pmd.englishMorphNames.push(parseEnglishMorphName()); + } + }; + var parseEnglishBoneFrameNames = function() { + var parseEnglishBoneFrameName = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(50); + return p2; + }; + var metadata = pmd.metadata; + if (metadata.englishCompatibility === 0) { + return; + } + pmd.englishBoneFrameNames = []; + for (var i = 0; i < metadata.boneFrameNameCount; i++) { + pmd.englishBoneFrameNames.push(parseEnglishBoneFrameName()); + } + }; + var parseToonTextures = function() { + var parseToonTexture = function() { + var p2 = {}; + p2.fileName = dv.getSjisStringsAsUnicode(100); + return p2; + }; + pmd.toonTextures = []; + for (var i = 0; i < 10; i++) { + pmd.toonTextures.push(parseToonTexture()); + } + }; + var parseRigidBodies = function() { + var parseRigidBody = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.boneIndex = dv.getInt16(); + p2.groupIndex = dv.getUint8(); + p2.groupTarget = dv.getUint16(); + p2.shapeType = dv.getUint8(); + p2.width = dv.getFloat32(); + p2.height = dv.getFloat32(); + p2.depth = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.weight = dv.getFloat32(); + p2.positionDamping = dv.getFloat32(); + p2.rotationDamping = dv.getFloat32(); + p2.restitution = dv.getFloat32(); + p2.friction = dv.getFloat32(); + p2.type = dv.getUint8(); + return p2; + }; + var metadata = pmd.metadata; + metadata.rigidBodyCount = dv.getUint32(); + pmd.rigidBodies = []; + for (var i = 0; i < metadata.rigidBodyCount; i++) { + pmd.rigidBodies.push(parseRigidBody()); + } + }; + var parseConstraints = function() { + var parseConstraint = function() { + var p2 = {}; + p2.name = dv.getSjisStringsAsUnicode(20); + p2.rigidBodyIndex1 = dv.getUint32(); + p2.rigidBodyIndex2 = dv.getUint32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.translationLimitation1 = dv.getFloat32Array(3); + p2.translationLimitation2 = dv.getFloat32Array(3); + p2.rotationLimitation1 = dv.getFloat32Array(3); + p2.rotationLimitation2 = dv.getFloat32Array(3); + p2.springPosition = dv.getFloat32Array(3); + p2.springRotation = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmd.metadata; + metadata.constraintCount = dv.getUint32(); + pmd.constraints = []; + for (var i = 0; i < metadata.constraintCount; i++) { + pmd.constraints.push(parseConstraint()); + } + }; + parseHeader(); + parseVertices(); + parseFaces(); + parseMaterials(); + parseBones(); + parseIks(); + parseMorphs(); + parseMorphFrames(); + parseBoneFrameNames(); + parseBoneFrames(); + parseEnglishHeader(); + parseEnglishBoneNames(); + parseEnglishMorphNames(); + parseEnglishBoneFrameNames(); + parseToonTextures(); + parseRigidBodies(); + parseConstraints(); + if (leftToRight === true) this.leftToRightModel(pmd); + return pmd; +}; +Parser.prototype.parsePmx = function(buffer, leftToRight) { + var pmx = {}; + var dv = new DataViewEx(buffer); + pmx.metadata = {}; + pmx.metadata.format = "pmx"; + pmx.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = pmx.metadata; + metadata.magic = dv.getChars(4); + if (metadata.magic !== "PMX ") { + throw "PMX file magic is not PMX , but " + metadata.magic; + } + metadata.version = dv.getFloat32(); + if (metadata.version !== 2 && metadata.version !== 2.1) { + throw "PMX version " + metadata.version + " is not supported."; + } + metadata.headerSize = dv.getUint8(); + metadata.encoding = dv.getUint8(); + metadata.additionalUvNum = dv.getUint8(); + metadata.vertexIndexSize = dv.getUint8(); + metadata.textureIndexSize = dv.getUint8(); + metadata.materialIndexSize = dv.getUint8(); + metadata.boneIndexSize = dv.getUint8(); + metadata.morphIndexSize = dv.getUint8(); + metadata.rigidBodyIndexSize = dv.getUint8(); + metadata.modelName = dv.getTextBuffer(); + metadata.englishModelName = dv.getTextBuffer(); + metadata.comment = dv.getTextBuffer(); + metadata.englishComment = dv.getTextBuffer(); + }; + var parseVertices = function() { + var parseVertex = function() { + var p2 = {}; + p2.position = dv.getFloat32Array(3); + p2.normal = dv.getFloat32Array(3); + p2.uv = dv.getFloat32Array(2); + p2.auvs = []; + for (var i2 = 0; i2 < pmx.metadata.additionalUvNum; i2++) { + p2.auvs.push(dv.getFloat32Array(4)); + } + p2.type = dv.getUint8(); + var indexSize = metadata.boneIndexSize; + if (p2.type === 0) { + p2.skinIndices = dv.getIndexArray(indexSize, 1); + p2.skinWeights = [1]; + } else if (p2.type === 1) { + p2.skinIndices = dv.getIndexArray(indexSize, 2); + p2.skinWeights = dv.getFloat32Array(1); + p2.skinWeights.push(1 - p2.skinWeights[0]); + } else if (p2.type === 2) { + p2.skinIndices = dv.getIndexArray(indexSize, 4); + p2.skinWeights = dv.getFloat32Array(4); + } else if (p2.type === 3) { + p2.skinIndices = dv.getIndexArray(indexSize, 2); + p2.skinWeights = dv.getFloat32Array(1); + p2.skinWeights.push(1 - p2.skinWeights[0]); + p2.skinC = dv.getFloat32Array(3); + p2.skinR0 = dv.getFloat32Array(3); + p2.skinR1 = dv.getFloat32Array(3); + p2.type = 1; + } else { + throw "unsupport bone type " + p2.type + " exception."; + } + p2.edgeRatio = dv.getFloat32(); + return p2; + }; + var metadata = pmx.metadata; + metadata.vertexCount = dv.getUint32(); + pmx.vertices = []; + for (var i = 0; i < metadata.vertexCount; i++) { + pmx.vertices.push(parseVertex()); + } + }; + var parseFaces = function() { + var parseFace = function() { + var p2 = {}; + p2.indices = dv.getIndexArray(metadata.vertexIndexSize, 3, true); + return p2; + }; + var metadata = pmx.metadata; + metadata.faceCount = dv.getUint32() / 3; + pmx.faces = []; + for (var i = 0; i < metadata.faceCount; i++) { + pmx.faces.push(parseFace()); + } + }; + var parseTextures = function() { + var parseTexture = function() { + return dv.getTextBuffer(); + }; + var metadata = pmx.metadata; + metadata.textureCount = dv.getUint32(); + pmx.textures = []; + for (var i = 0; i < metadata.textureCount; i++) { + pmx.textures.push(parseTexture()); + } + }; + var parseMaterials = function() { + var parseMaterial = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.diffuse = dv.getFloat32Array(4); + p2.specular = dv.getFloat32Array(3); + p2.shininess = dv.getFloat32(); + p2.ambient = dv.getFloat32Array(3); + p2.flag = dv.getUint8(); + p2.edgeColor = dv.getFloat32Array(4); + p2.edgeSize = dv.getFloat32(); + p2.textureIndex = dv.getIndex(pmx.metadata.textureIndexSize); + p2.envTextureIndex = dv.getIndex(pmx.metadata.textureIndexSize); + p2.envFlag = dv.getUint8(); + p2.toonFlag = dv.getUint8(); + if (p2.toonFlag === 0) { + p2.toonIndex = dv.getIndex(pmx.metadata.textureIndexSize); + } else if (p2.toonFlag === 1) { + p2.toonIndex = dv.getInt8(); + } else { + throw "unknown toon flag " + p2.toonFlag + " exception."; + } + p2.comment = dv.getTextBuffer(); + p2.faceCount = dv.getUint32() / 3; + return p2; + }; + var metadata = pmx.metadata; + metadata.materialCount = dv.getUint32(); + pmx.materials = []; + for (var i = 0; i < metadata.materialCount; i++) { + pmx.materials.push(parseMaterial()); + } + }; + var parseBones = function() { + var parseBone = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.position = dv.getFloat32Array(3); + p2.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); + p2.transformationClass = dv.getUint32(); + p2.flag = dv.getUint16(); + if (p2.flag & 1) { + p2.connectIndex = dv.getIndex(pmx.metadata.boneIndexSize); + } else { + p2.offsetPosition = dv.getFloat32Array(3); + } + if (p2.flag & 256 || p2.flag & 512) { + var grant = {}; + grant.isLocal = (p2.flag & 128) !== 0 ? true : false; + grant.affectRotation = (p2.flag & 256) !== 0 ? true : false; + grant.affectPosition = (p2.flag & 512) !== 0 ? true : false; + grant.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); + grant.ratio = dv.getFloat32(); + p2.grant = grant; + } + if (p2.flag & 1024) { + p2.fixAxis = dv.getFloat32Array(3); + } + if (p2.flag & 2048) { + p2.localXVector = dv.getFloat32Array(3); + p2.localZVector = dv.getFloat32Array(3); + } + if (p2.flag & 8192) { + p2.key = dv.getUint32(); + } + if (p2.flag & 32) { + var ik = {}; + ik.effector = dv.getIndex(pmx.metadata.boneIndexSize); + ik.target = null; + ik.iteration = dv.getUint32(); + ik.maxAngle = dv.getFloat32(); + ik.linkCount = dv.getUint32(); + ik.links = []; + for (var i2 = 0; i2 < ik.linkCount; i2++) { + var link = {}; + link.index = dv.getIndex(pmx.metadata.boneIndexSize); + link.angleLimitation = dv.getUint8(); + if (link.angleLimitation === 1) { + link.lowerLimitationAngle = dv.getFloat32Array(3); + link.upperLimitationAngle = dv.getFloat32Array(3); + } + ik.links.push(link); + } + p2.ik = ik; + } + return p2; + }; + var metadata = pmx.metadata; + metadata.boneCount = dv.getUint32(); + pmx.bones = []; + for (var i = 0; i < metadata.boneCount; i++) { + pmx.bones.push(parseBone()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.panel = dv.getUint8(); + p2.type = dv.getUint8(); + p2.elementCount = dv.getUint32(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + if (p2.type === 0) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.morphIndexSize); + m.ratio = dv.getFloat32(); + p2.elements.push(m); + } else if (p2.type === 1) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); + m.position = dv.getFloat32Array(3); + p2.elements.push(m); + } else if (p2.type === 2) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.boneIndexSize); + m.position = dv.getFloat32Array(3); + m.rotation = dv.getFloat32Array(4); + p2.elements.push(m); + } else if (p2.type === 3) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); + m.uv = dv.getFloat32Array(4); + p2.elements.push(m); + } else if (p2.type === 4) { + } else if (p2.type === 5) { + } else if (p2.type === 6) { + } else if (p2.type === 7) { + } else if (p2.type === 8) { + var m = {}; + m.index = dv.getIndex(pmx.metadata.materialIndexSize); + m.type = dv.getUint8(); + m.diffuse = dv.getFloat32Array(4); + m.specular = dv.getFloat32Array(3); + m.shininess = dv.getFloat32(); + m.ambient = dv.getFloat32Array(3); + m.edgeColor = dv.getFloat32Array(4); + m.edgeSize = dv.getFloat32(); + m.textureColor = dv.getFloat32Array(4); + m.sphereTextureColor = dv.getFloat32Array(4); + m.toonColor = dv.getFloat32Array(4); + p2.elements.push(m); + } + } + return p2; + }; + var metadata = pmx.metadata; + metadata.morphCount = dv.getUint32(); + pmx.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + pmx.morphs.push(parseMorph()); + } + }; + var parseFrames = function() { + var parseFrame = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.type = dv.getUint8(); + p2.elementCount = dv.getUint32(); + p2.elements = []; + for (var i2 = 0; i2 < p2.elementCount; i2++) { + var e = {}; + e.target = dv.getUint8(); + e.index = e.target === 0 ? dv.getIndex(pmx.metadata.boneIndexSize) : dv.getIndex(pmx.metadata.morphIndexSize); + p2.elements.push(e); + } + return p2; + }; + var metadata = pmx.metadata; + metadata.frameCount = dv.getUint32(); + pmx.frames = []; + for (var i = 0; i < metadata.frameCount; i++) { + pmx.frames.push(parseFrame()); + } + }; + var parseRigidBodies = function() { + var parseRigidBody = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.boneIndex = dv.getIndex(pmx.metadata.boneIndexSize); + p2.groupIndex = dv.getUint8(); + p2.groupTarget = dv.getUint16(); + p2.shapeType = dv.getUint8(); + p2.width = dv.getFloat32(); + p2.height = dv.getFloat32(); + p2.depth = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.weight = dv.getFloat32(); + p2.positionDamping = dv.getFloat32(); + p2.rotationDamping = dv.getFloat32(); + p2.restitution = dv.getFloat32(); + p2.friction = dv.getFloat32(); + p2.type = dv.getUint8(); + return p2; + }; + var metadata = pmx.metadata; + metadata.rigidBodyCount = dv.getUint32(); + pmx.rigidBodies = []; + for (var i = 0; i < metadata.rigidBodyCount; i++) { + pmx.rigidBodies.push(parseRigidBody()); + } + }; + var parseConstraints = function() { + var parseConstraint = function() { + var p2 = {}; + p2.name = dv.getTextBuffer(); + p2.englishName = dv.getTextBuffer(); + p2.type = dv.getUint8(); + p2.rigidBodyIndex1 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); + p2.rigidBodyIndex2 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.translationLimitation1 = dv.getFloat32Array(3); + p2.translationLimitation2 = dv.getFloat32Array(3); + p2.rotationLimitation1 = dv.getFloat32Array(3); + p2.rotationLimitation2 = dv.getFloat32Array(3); + p2.springPosition = dv.getFloat32Array(3); + p2.springRotation = dv.getFloat32Array(3); + return p2; + }; + var metadata = pmx.metadata; + metadata.constraintCount = dv.getUint32(); + pmx.constraints = []; + for (var i = 0; i < metadata.constraintCount; i++) { + pmx.constraints.push(parseConstraint()); + } + }; + parseHeader(); + parseVertices(); + parseFaces(); + parseTextures(); + parseMaterials(); + parseBones(); + parseMorphs(); + parseFrames(); + parseRigidBodies(); + parseConstraints(); + if (leftToRight === true) this.leftToRightModel(pmx); + return pmx; +}; +Parser.prototype.parseVmd = function(buffer, leftToRight) { + var vmd = {}; + var dv = new DataViewEx(buffer); + vmd.metadata = {}; + vmd.metadata.coordinateSystem = "left"; + var parseHeader = function() { + var metadata = vmd.metadata; + metadata.magic = dv.getChars(30); + if (metadata.magic !== "Vocaloid Motion Data 0002") { + throw "VMD file magic is not Vocaloid Motion Data 0002, but " + metadata.magic; + } + metadata.name = dv.getSjisStringsAsUnicode(20); + }; + var parseMotions = function() { + var parseMotion = function() { + var p2 = {}; + p2.boneName = dv.getSjisStringsAsUnicode(15); + p2.frameNum = dv.getUint32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(4); + p2.interpolation = dv.getUint8Array(64); + return p2; + }; + var metadata = vmd.metadata; + metadata.motionCount = dv.getUint32(); + vmd.motions = []; + for (var i = 0; i < metadata.motionCount; i++) { + vmd.motions.push(parseMotion()); + } + }; + var parseMorphs = function() { + var parseMorph = function() { + var p2 = {}; + p2.morphName = dv.getSjisStringsAsUnicode(15); + p2.frameNum = dv.getUint32(); + p2.weight = dv.getFloat32(); + return p2; + }; + var metadata = vmd.metadata; + metadata.morphCount = dv.getUint32(); + vmd.morphs = []; + for (var i = 0; i < metadata.morphCount; i++) { + vmd.morphs.push(parseMorph()); + } + }; + var parseCameras = function() { + var parseCamera = function() { + var p2 = {}; + p2.frameNum = dv.getUint32(); + p2.distance = dv.getFloat32(); + p2.position = dv.getFloat32Array(3); + p2.rotation = dv.getFloat32Array(3); + p2.interpolation = dv.getUint8Array(24); + p2.fov = dv.getUint32(); + p2.perspective = dv.getUint8(); + return p2; + }; + var metadata = vmd.metadata; + metadata.cameraCount = dv.getUint32(); + vmd.cameras = []; + for (var i = 0; i < metadata.cameraCount; i++) { + vmd.cameras.push(parseCamera()); + } + }; + parseHeader(); + parseMotions(); + parseMorphs(); + parseCameras(); + if (leftToRight === true) this.leftToRightVmd(vmd); + return vmd; +}; +Parser.prototype.parseVpd = function(text2, leftToRight) { + var vpd = {}; + vpd.metadata = {}; + vpd.metadata.coordinateSystem = "left"; + vpd.bones = []; + var commentPatternG = /\/\/\w*(\r|\n|\r\n)/g; + var newlinePattern = /\r|\n|\r\n/; + var lines = text2.replace(commentPatternG, "").split(newlinePattern); + function throwError() { + throw "the file seems not vpd file."; + } + function checkMagic() { + if (lines[0] !== "Vocaloid Pose Data file") { + throwError(); + } + } + function parseHeader() { + if (lines.length < 4) { + throwError(); + } + vpd.metadata.parentFile = lines[2]; + vpd.metadata.boneCount = parseInt(lines[3]); + } + function parseBones() { + var boneHeaderPattern = /^\s*(Bone[0-9]+)\s*\{\s*(.*)$/; + var boneVectorPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/; + var 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*;/; + var boneFooterPattern = /^\s*}/; + var bones = vpd.bones; + var n2 = null; + var v = null; + var q2 = null; + for (var i = 4; i < lines.length; i++) { + var line2 = lines[i]; + var result; + result = line2.match(boneHeaderPattern); + if (result !== null) { + if (n2 !== null) { + throwError(); + } + n2 = result[2]; + } + result = line2.match(boneVectorPattern); + if (result !== null) { + if (v !== null) { + throwError(); + } + v = [ + parseFloat(result[1]), + parseFloat(result[2]), + parseFloat(result[3]) + ]; + } + result = line2.match(boneQuaternionPattern); + if (result !== null) { + if (q2 !== null) { + throwError(); + } + q2 = [ + parseFloat(result[1]), + parseFloat(result[2]), + parseFloat(result[3]), + parseFloat(result[4]) + ]; + } + result = line2.match(boneFooterPattern); + if (result !== null) { + if (n2 === null || v === null || q2 === null) { + throwError(); + } + bones.push({ + name: n2, + translation: v, + quaternion: q2 + }); + n2 = null; + v = null; + q2 = null; + } + } + if (n2 !== null || v !== null || q2 !== null) { + throwError(); + } + } + checkMagic(); + parseHeader(); + parseBones(); + if (leftToRight === true) this.leftToRightVpd(vpd); + return vpd; +}; +Parser.prototype.mergeVmds = function(vmds) { + var v = {}; + v.metadata = {}; + v.metadata.name = vmds[0].metadata.name; + v.metadata.coordinateSystem = vmds[0].metadata.coordinateSystem; + v.metadata.motionCount = 0; + v.metadata.morphCount = 0; + v.metadata.cameraCount = 0; + v.motions = []; + v.morphs = []; + v.cameras = []; + for (var i = 0; i < vmds.length; i++) { + var v2 = vmds[i]; + v.metadata.motionCount += v2.metadata.motionCount; + v.metadata.morphCount += v2.metadata.morphCount; + v.metadata.cameraCount += v2.metadata.cameraCount; + for (var j = 0; j < v2.metadata.motionCount; j++) { + v.motions.push(v2.motions[j]); + } + for (var j = 0; j < v2.metadata.morphCount; j++) { + v.morphs.push(v2.morphs[j]); + } + for (var j = 0; j < v2.metadata.cameraCount; j++) { + v.cameras.push(v2.cameras[j]); + } + } + return v; +}; +Parser.prototype.leftToRightModel = function(model) { + if (model.metadata.coordinateSystem === "right") { + return; + } + model.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < model.metadata.vertexCount; i++) { + helper.leftToRightVector3(model.vertices[i].position); + helper.leftToRightVector3(model.vertices[i].normal); + } + for (var i = 0; i < model.metadata.faceCount; i++) { + helper.leftToRightIndexOrder(model.faces[i].indices); + } + for (var i = 0; i < model.metadata.boneCount; i++) { + helper.leftToRightVector3(model.bones[i].position); + } + for (var i = 0; i < model.metadata.morphCount; i++) { + var m = model.morphs[i]; + if (model.metadata.format === "pmx" && m.type !== 1) { + continue; + } + for (var j = 0; j < m.elements.length; j++) { + helper.leftToRightVector3(m.elements[j].position); + } + } + for (var i = 0; i < model.metadata.rigidBodyCount; i++) { + helper.leftToRightVector3(model.rigidBodies[i].position); + helper.leftToRightEuler(model.rigidBodies[i].rotation); + } + for (var i = 0; i < model.metadata.constraintCount; i++) { + helper.leftToRightVector3(model.constraints[i].position); + helper.leftToRightEuler(model.constraints[i].rotation); + helper.leftToRightVector3Range(model.constraints[i].translationLimitation1, model.constraints[i].translationLimitation2); + helper.leftToRightEulerRange(model.constraints[i].rotationLimitation1, model.constraints[i].rotationLimitation2); + } +}; +Parser.prototype.leftToRightVmd = function(vmd) { + if (vmd.metadata.coordinateSystem === "right") { + return; + } + vmd.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < vmd.metadata.motionCount; i++) { + helper.leftToRightVector3(vmd.motions[i].position); + helper.leftToRightQuaternion(vmd.motions[i].rotation); + } + for (var i = 0; i < vmd.metadata.cameraCount; i++) { + helper.leftToRightVector3(vmd.cameras[i].position); + helper.leftToRightEuler(vmd.cameras[i].rotation); + } +}; +Parser.prototype.leftToRightVpd = function(vpd) { + if (vpd.metadata.coordinateSystem === "right") { + return; + } + vpd.metadata.coordinateSystem = "right"; + var helper = new DataCreationHelper(); + for (var i = 0; i < vpd.bones.length; i++) { + helper.leftToRightVector3(vpd.bones[i].translation); + helper.leftToRightQuaternion(vpd.bones[i].quaternion); + } +}; +var MMDParser = { + CharsetEncoder, + Parser +}; + +// node_modules/three/examples/jsm/exporters/MMDExporter.js +var MMDExporter = class { + /* TODO: implement + // mesh -> pmd + this.parsePmd = function ( object ) { + + }; + */ + /* TODO: implement + // mesh -> pmx + this.parsePmx = function ( object ) { + + }; + */ + /* TODO: implement + // animation + skeleton -> vmd + this.parseVmd = function ( object ) { + + }; + */ + /* + * skeleton -> vpd + * Returns Shift_JIS encoded Uint8Array. Otherwise return strings. + */ + parseVpd(skin, outputShiftJis, useOriginalBones) { + if (skin.isSkinnedMesh !== true) { + console.warn("THREE.MMDExporter: parseVpd() requires SkinnedMesh instance."); + return null; + } + function toStringsFromNumber(num) { + if (Math.abs(num) < 1e-6) num = 0; + let a2 = num.toString(); + if (a2.indexOf(".") === -1) { + a2 += "."; + } + a2 += "000000"; + const index2 = a2.indexOf("."); + const d = a2.slice(0, index2); + const p2 = a2.slice(index2 + 1, index2 + 7); + return d + "." + p2; + } + function toStringsFromArray(array2) { + const a2 = []; + for (let i = 0, il = array2.length; i < il; i++) { + a2.push(toStringsFromNumber(array2[i])); + } + return a2.join(","); + } + skin.updateMatrixWorld(true); + const bones = skin.skeleton.bones; + const bones2 = getBindBones(skin); + const position2 = new Vector3(); + const quaternion = new Quaternion(); + const quaternion2 = new Quaternion(); + const matrix3 = new Matrix4(); + const array = []; + array.push("Vocaloid Pose Data file"); + array.push(""); + array.push((skin.name !== "" ? skin.name.replace(/\s/g, "_") : "skin") + ".osm;"); + array.push(bones.length + ";"); + array.push(""); + for (let i = 0, il = bones.length; i < il; i++) { + const bone = bones[i]; + const bone2 = bones2[i]; + if (useOriginalBones === true && bone.userData.ik !== void 0 && bone.userData.ik.originalMatrix !== void 0) { + matrix3.fromArray(bone.userData.ik.originalMatrix); + } else { + matrix3.copy(bone.matrix); + } + position2.setFromMatrixPosition(matrix3); + quaternion.setFromRotationMatrix(matrix3); + const pArray = position2.sub(bone2.position).toArray(); + const qArray = quaternion2.copy(bone2.quaternion).conjugate().multiply(quaternion).toArray(); + pArray[2] = -pArray[2]; + qArray[0] = -qArray[0]; + qArray[1] = -qArray[1]; + array.push("Bone" + i + "{" + bone.name); + array.push(" " + toStringsFromArray(pArray) + ";"); + array.push(" " + toStringsFromArray(qArray) + ";"); + array.push("}"); + array.push(""); + } + array.push(""); + const lines = array.join("\n"); + return outputShiftJis === true ? unicodeToShiftjis(lines) : lines; + } +}; +var u2sTable; +function unicodeToShiftjis(str) { + if (u2sTable === void 0) { + const encoder = new MMDParser.CharsetEncoder(); + const table2 = encoder.s2uTable; + u2sTable = {}; + const keys2 = Object.keys(table2); + for (let i = 0, il = keys2.length; i < il; i++) { + let key2 = keys2[i]; + const value2 = table2[key2]; + key2 = parseInt(key2); + u2sTable[value2] = key2; + } + } + const array = []; + for (let i = 0, il = str.length; i < il; i++) { + const code = str.charCodeAt(i); + const value2 = u2sTable[code]; + if (value2 === void 0) { + throw new Error("cannot convert charcode 0x" + code.toString(16)); + } else if (value2 > 255) { + array.push(value2 >> 8 & 255); + array.push(value2 & 255); + } else { + array.push(value2 & 255); + } + } + return new Uint8Array(array); +} +function getBindBones(skin) { + const poseSkin = skin.clone(); + poseSkin.pose(); + return poseSkin.skeleton.bones; +} + +// node_modules/three/examples/jsm/exporters/OBJExporter.js +var OBJExporter = class { + parse(object) { + let output = ""; + let indexVertex = 0; + let indexVertexUvs = 0; + let indexNormals = 0; + const vertex = new Vector3(); + const color = new Color(); + const normal = new Vector3(); + const uv = new Vector2(); + const face = []; + function parseMesh(mesh) { + let nbVertex = 0; + let nbNormals = 0; + let nbVertexUvs = 0; + const geometry = mesh.geometry; + const normalMatrixWorld = new Matrix3(); + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const indices = geometry.getIndex(); + output += "o " + mesh.name + "\n"; + if (mesh.material && mesh.material.name) { + output += "usemtl " + mesh.material.name + "\n"; + } + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + if (uvs !== void 0) { + for (let i = 0, l2 = uvs.count; i < l2; i++, nbVertexUvs++) { + uv.fromBufferAttribute(uvs, i); + output += "vt " + uv.x + " " + uv.y + "\n"; + } + } + if (normals !== void 0) { + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = normals.count; i < l2; i++, nbNormals++) { + normal.fromBufferAttribute(normals, i); + normal.applyMatrix3(normalMatrixWorld).normalize(); + output += "vn " + normal.x + " " + normal.y + " " + normal.z + "\n"; + } + } + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + for (let m = 0; m < 3; m++) { + const j = indices.getX(i + m) + 1; + face[m] = indexVertex + j + (normals || uvs ? "/" + (uvs ? indexVertexUvs + j : "") + (normals ? "/" + (indexNormals + j) : "") : ""); + } + output += "f " + face.join(" ") + "\n"; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + for (let m = 0; m < 3; m++) { + const j = i + m + 1; + face[m] = indexVertex + j + (normals || uvs ? "/" + (uvs ? indexVertexUvs + j : "") + (normals ? "/" + (indexNormals + j) : "") : ""); + } + output += "f " + face.join(" ") + "\n"; + } + } + indexVertex += nbVertex; + indexVertexUvs += nbVertexUvs; + indexNormals += nbNormals; + } + function parseLine(line2) { + let nbVertex = 0; + const geometry = line2.geometry; + const type = line2.type; + const vertices = geometry.getAttribute("position"); + output += "o " + line2.name + "\n"; + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(line2.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + if (type === "Line") { + output += "l "; + for (let j = 1, l2 = vertices.count; j <= l2; j++) { + output += indexVertex + j + " "; + } + output += "\n"; + } + if (type === "LineSegments") { + for (let j = 1, k2 = j + 1, l2 = vertices.count; j < l2; j += 2, k2 = j + 1) { + output += "l " + (indexVertex + j) + " " + (indexVertex + k2) + "\n"; + } + } + indexVertex += nbVertex; + } + function parsePoints(points) { + let nbVertex = 0; + const geometry = points.geometry; + const vertices = geometry.getAttribute("position"); + const colors = geometry.getAttribute("color"); + output += "o " + points.name + "\n"; + if (vertices !== void 0) { + for (let i = 0, l2 = vertices.count; i < l2; i++, nbVertex++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(points.matrixWorld); + output += "v " + vertex.x + " " + vertex.y + " " + vertex.z; + if (colors !== void 0) { + color.fromBufferAttribute(colors, i).convertLinearToSRGB(); + output += " " + color.r + " " + color.g + " " + color.b; + } + output += "\n"; + } + output += "p "; + for (let j = 1, l2 = vertices.count; j <= l2; j++) { + output += indexVertex + j + " "; + } + output += "\n"; + } + indexVertex += nbVertex; + } + object.traverse(function(child) { + if (child.isMesh === true) { + parseMesh(child); + } + if (child.isLine === true) { + parseLine(child); + } + if (child.isPoints === true) { + parsePoints(child); + } + }); + return output; + } +}; + +// node_modules/three/examples/jsm/exporters/PLYExporter.js +var PLYExporter = class { + parse(object, onDone, options = {}) { + function traverseMeshes(cb) { + object.traverse(function(child) { + if (child.isMesh === true || child.isPoints) { + const mesh = child; + const geometry = mesh.geometry; + if (geometry.hasAttribute("position") === true) { + cb(mesh, geometry); + } + } + }); + } + const defaultOptions = { + binary: false, + excludeAttributes: [], + // normal, uv, color, index + littleEndian: false + }; + options = Object.assign(defaultOptions, options); + const excludeAttributes = options.excludeAttributes; + let includeIndices = true; + let includeNormals = false; + let includeColors = false; + let includeUVs = false; + let vertexCount = 0; + let faceCount = 0; + object.traverse(function(child) { + if (child.isMesh === true) { + const mesh = child; + const geometry = mesh.geometry; + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + if (vertices === void 0) { + return; + } + vertexCount += vertices.count; + faceCount += indices ? indices.count / 3 : vertices.count / 3; + if (normals !== void 0) includeNormals = true; + if (uvs !== void 0) includeUVs = true; + if (colors !== void 0) includeColors = true; + } else if (child.isPoints) { + const mesh = child; + const geometry = mesh.geometry; + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const colors = geometry.getAttribute("color"); + vertexCount += vertices.count; + if (normals !== void 0) includeNormals = true; + if (colors !== void 0) includeColors = true; + includeIndices = false; + } + }); + const tempColor = new Color(); + includeIndices = includeIndices && excludeAttributes.indexOf("index") === -1; + includeNormals = includeNormals && excludeAttributes.indexOf("normal") === -1; + includeColors = includeColors && excludeAttributes.indexOf("color") === -1; + includeUVs = includeUVs && excludeAttributes.indexOf("uv") === -1; + if (includeIndices && faceCount !== Math.floor(faceCount)) { + console.error( + "PLYExporter: Failed to generate a valid PLY file with triangle indices because the number of indices is not divisible by 3." + ); + return null; + } + const indexByteCount = 4; + let header = `ply +format ${options.binary ? options.littleEndian ? "binary_little_endian" : "binary_big_endian" : "ascii"} 1.0 +element vertex ${vertexCount} +property float x +property float y +property float z +`; + if (includeNormals === true) { + header += "property float nx\nproperty float ny\nproperty float nz\n"; + } + if (includeUVs === true) { + header += "property float s\nproperty float t\n"; + } + if (includeColors === true) { + header += "property uchar red\nproperty uchar green\nproperty uchar blue\n"; + } + if (includeIndices === true) { + header += `element face ${faceCount} +property list uchar int vertex_index +`; + } + header += "end_header\n"; + const vertex = new Vector3(); + const normalMatrixWorld = new Matrix3(); + let result = null; + if (options.binary === true) { + const headerBin = new TextEncoder().encode(header); + const vertexListLength = vertexCount * (4 * 3 + (includeNormals ? 4 * 3 : 0) + (includeColors ? 3 : 0) + (includeUVs ? 4 * 2 : 0)); + const faceListLength = includeIndices ? faceCount * (indexByteCount * 3 + 1) : 0; + const output = new DataView(new ArrayBuffer(headerBin.length + vertexListLength + faceListLength)); + new Uint8Array(output.buffer).set(headerBin, 0); + let vOffset = headerBin.length; + let fOffset = headerBin.length + vertexListLength; + let writtenVertices = 0; + traverseMeshes(function(mesh, geometry) { + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = vertices.count; i < l2; i++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + output.setFloat32(vOffset, vertex.x, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.y, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.z, options.littleEndian); + vOffset += 4; + if (includeNormals === true) { + if (normals != null) { + vertex.fromBufferAttribute(normals, i); + vertex.applyMatrix3(normalMatrixWorld).normalize(); + output.setFloat32(vOffset, vertex.x, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.y, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, vertex.z, options.littleEndian); + vOffset += 4; + } else { + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + } + } + if (includeUVs === true) { + if (uvs != null) { + output.setFloat32(vOffset, uvs.getX(i), options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, uvs.getY(i), options.littleEndian); + vOffset += 4; + } else { + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + output.setFloat32(vOffset, 0, options.littleEndian); + vOffset += 4; + } + } + if (includeColors === true) { + if (colors != null) { + tempColor.fromBufferAttribute(colors, i).convertLinearToSRGB(); + output.setUint8(vOffset, Math.floor(tempColor.r * 255)); + vOffset += 1; + output.setUint8(vOffset, Math.floor(tempColor.g * 255)); + vOffset += 1; + output.setUint8(vOffset, Math.floor(tempColor.b * 255)); + vOffset += 1; + } else { + output.setUint8(vOffset, 255); + vOffset += 1; + output.setUint8(vOffset, 255); + vOffset += 1; + output.setUint8(vOffset, 255); + vOffset += 1; + } + } + } + if (includeIndices === true) { + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + output.setUint8(fOffset, 3); + fOffset += 1; + output.setUint32(fOffset, indices.getX(i + 0) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, indices.getX(i + 1) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, indices.getX(i + 2) + writtenVertices, options.littleEndian); + fOffset += indexByteCount; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + output.setUint8(fOffset, 3); + fOffset += 1; + output.setUint32(fOffset, writtenVertices + i, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, writtenVertices + i + 1, options.littleEndian); + fOffset += indexByteCount; + output.setUint32(fOffset, writtenVertices + i + 2, options.littleEndian); + fOffset += indexByteCount; + } + } + } + writtenVertices += vertices.count; + }); + result = output.buffer; + } else { + let writtenVertices = 0; + let vertexList = ""; + let faceList = ""; + traverseMeshes(function(mesh, geometry) { + const vertices = geometry.getAttribute("position"); + const normals = geometry.getAttribute("normal"); + const uvs = geometry.getAttribute("uv"); + const colors = geometry.getAttribute("color"); + const indices = geometry.getIndex(); + normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); + for (let i = 0, l2 = vertices.count; i < l2; i++) { + vertex.fromBufferAttribute(vertices, i); + vertex.applyMatrix4(mesh.matrixWorld); + let line2 = vertex.x + " " + vertex.y + " " + vertex.z; + if (includeNormals === true) { + if (normals != null) { + vertex.fromBufferAttribute(normals, i); + vertex.applyMatrix3(normalMatrixWorld).normalize(); + line2 += " " + vertex.x + " " + vertex.y + " " + vertex.z; + } else { + line2 += " 0 0 0"; + } + } + if (includeUVs === true) { + if (uvs != null) { + line2 += " " + uvs.getX(i) + " " + uvs.getY(i); + } else { + line2 += " 0 0"; + } + } + if (includeColors === true) { + if (colors != null) { + tempColor.fromBufferAttribute(colors, i).convertLinearToSRGB(); + line2 += " " + Math.floor(tempColor.r * 255) + " " + Math.floor(tempColor.g * 255) + " " + Math.floor(tempColor.b * 255); + } else { + line2 += " 255 255 255"; + } + } + vertexList += line2 + "\n"; + } + if (includeIndices === true) { + if (indices !== null) { + for (let i = 0, l2 = indices.count; i < l2; i += 3) { + faceList += `3 ${indices.getX(i + 0) + writtenVertices}`; + faceList += ` ${indices.getX(i + 1) + writtenVertices}`; + faceList += ` ${indices.getX(i + 2) + writtenVertices} +`; + } + } else { + for (let i = 0, l2 = vertices.count; i < l2; i += 3) { + faceList += `3 ${writtenVertices + i} ${writtenVertices + i + 1} ${writtenVertices + i + 2} +`; + } + } + faceCount += indices ? indices.count / 3 : vertices.count / 3; + } + writtenVertices += vertices.count; + }); + result = `${header}${vertexList}${includeIndices ? `${faceList} +` : "\n"}`; + } + if (typeof onDone === "function") requestAnimationFrame(() => onDone(result)); + return result; + } +}; + +// node_modules/three/examples/jsm/exporters/STLExporter.js +var STLExporter = class { + parse(scene, options = {}) { + options = Object.assign({ + binary: false + }, options); + const binary = options.binary; + const objects = []; + let triangles = 0; + scene.traverse(function(object) { + if (object.isMesh) { + const geometry = object.geometry; + const index2 = geometry.index; + const positionAttribute = geometry.getAttribute("position"); + triangles += index2 !== null ? index2.count / 3 : positionAttribute.count / 3; + objects.push({ + object3d: object, + geometry + }); + } + }); + let output; + let offset = 80; + if (binary === true) { + const bufferLength = triangles * 2 + triangles * 3 * 4 * 4 + 80 + 4; + const arrayBuffer = new ArrayBuffer(bufferLength); + output = new DataView(arrayBuffer); + output.setUint32(offset, triangles, true); + offset += 4; + } else { + output = ""; + output += "solid exported\n"; + } + const vA = new Vector3(); + const vB = new Vector3(); + const vC = new Vector3(); + const cb = new Vector3(); + const ab = new Vector3(); + const normal = new Vector3(); + for (let i = 0, il = objects.length; i < il; i++) { + const object = objects[i].object3d; + const geometry = objects[i].geometry; + const index2 = geometry.index; + const positionAttribute = geometry.getAttribute("position"); + if (index2 !== null) { + for (let j = 0; j < index2.count; j += 3) { + const a2 = index2.getX(j + 0); + const b3 = index2.getX(j + 1); + const c2 = index2.getX(j + 2); + writeFace(a2, b3, c2, positionAttribute, object); + } + } else { + for (let j = 0; j < positionAttribute.count; j += 3) { + const a2 = j + 0; + const b3 = j + 1; + const c2 = j + 2; + writeFace(a2, b3, c2, positionAttribute, object); + } + } + } + if (binary === false) { + output += "endsolid exported\n"; + } + return output; + function writeFace(a2, b3, c2, positionAttribute, object) { + vA.fromBufferAttribute(positionAttribute, a2); + vB.fromBufferAttribute(positionAttribute, b3); + vC.fromBufferAttribute(positionAttribute, c2); + if (object.isSkinnedMesh === true) { + object.applyBoneTransform(a2, vA); + object.applyBoneTransform(b3, vB); + object.applyBoneTransform(c2, vC); + } + vA.applyMatrix4(object.matrixWorld); + vB.applyMatrix4(object.matrixWorld); + vC.applyMatrix4(object.matrixWorld); + writeNormal(vA, vB, vC); + writeVertex(vA); + writeVertex(vB); + writeVertex(vC); + if (binary === true) { + output.setUint16(offset, 0, true); + offset += 2; + } else { + output += " endloop\n"; + output += " endfacet\n"; + } + } + function writeNormal(vA2, vB2, vC2) { + cb.subVectors(vC2, vB2); + ab.subVectors(vA2, vB2); + cb.cross(ab).normalize(); + normal.copy(cb).normalize(); + if (binary === true) { + output.setFloat32(offset, normal.x, true); + offset += 4; + output.setFloat32(offset, normal.y, true); + offset += 4; + output.setFloat32(offset, normal.z, true); + offset += 4; + } else { + output += " facet normal " + normal.x + " " + normal.y + " " + normal.z + "\n"; + output += " outer loop\n"; + } + } + function writeVertex(vertex) { + if (binary === true) { + output.setFloat32(offset, vertex.x, true); + offset += 4; + output.setFloat32(offset, vertex.y, true); + offset += 4; + output.setFloat32(offset, vertex.z, true); + offset += 4; + } else { + output += " vertex " + vertex.x + " " + vertex.y + " " + vertex.z + "\n"; + } + } + } +}; + +// node_modules/three/examples/jsm/exporters/USDZExporter.js +var USDZExporter = class { + parse(scene, onDone, onError, options) { + this.parseAsync(scene, options).then(onDone).catch(onError); + } + async parseAsync(scene, options = {}) { + options = Object.assign({ + ar: { + anchoring: { type: "plane" }, + planeAnchoring: { alignment: "horizontal" } + }, + includeAnchoringProperties: true, + quickLookCompatible: false, + maxTextureSize: 1024 + }, options); + const files = {}; + const modelFileName = "model.usda"; + files[modelFileName] = null; + let output = buildHeader(); + output += buildSceneStart(options); + const materials = {}; + const textures = {}; + scene.traverseVisible((object) => { + if (object.isMesh) { + const geometry = object.geometry; + const material = object.material; + if (material.isMeshStandardMaterial) { + const geometryFileName = "geometries/Geometry_" + geometry.id + ".usda"; + if (!(geometryFileName in files)) { + const meshObject = buildMeshObject(geometry); + files[geometryFileName] = buildUSDFileAsString(meshObject); + } + if (!(material.uuid in materials)) { + materials[material.uuid] = material; + } + output += buildXform(object, geometry, material); + } else { + console.warn("THREE.USDZExporter: Unsupported material type (USDZ only supports MeshStandardMaterial)", object); + } + } else if (object.isCamera) { + output += buildCamera(object); + } + }); + output += buildSceneEnd(); + output += buildMaterials(materials, textures, options.quickLookCompatible); + files[modelFileName] = strToU8(output); + output = null; + for (const id in textures) { + let texture = textures[id]; + if (texture.isCompressedTexture === true) { + texture = decompress(texture); + } + const canvas = imageToCanvas(texture.image, texture.flipY, options.maxTextureSize); + const blob = await new Promise((resolve) => canvas.toBlob(resolve, "image/png", 1)); + files[`textures/Texture_${id}.png`] = new Uint8Array(await blob.arrayBuffer()); + } + let offset = 0; + for (const filename in files) { + const file = files[filename]; + const headerSize = 34 + filename.length; + offset += headerSize; + const offsetMod64 = offset & 63; + if (offsetMod64 !== 4) { + const padLength = 64 - offsetMod64; + const padding = new Uint8Array(padLength); + files[filename] = [file, { extra: { 12345: padding } }]; + } + offset = file.length; + } + return zipSync(files, { level: 0 }); + } +}; +function imageToCanvas(image, flipY, maxTextureSize) { + if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { + const scale2 = maxTextureSize / Math.max(image.width, image.height); + const canvas = document.createElement("canvas"); + canvas.width = image.width * Math.min(1, scale2); + canvas.height = image.height * Math.min(1, scale2); + const context = canvas.getContext("2d"); + if (flipY === true) { + context.translate(0, canvas.height); + context.scale(1, -1); + } + context.drawImage(image, 0, 0, canvas.width, canvas.height); + return canvas; + } else { + throw new Error("THREE.USDZExporter: No valid image data found. Unable to process texture."); + } +} +var PRECISION = 7; +function buildHeader() { + return `#usda 1.0 +( + customLayerData = { + string creator = "Three.js USDZExporter" + } + defaultPrim = "Root" + metersPerUnit = 1 + upAxis = "Y" +) + +`; +} +function buildSceneStart(options) { + const alignment = options.includeAnchoringProperties === true ? ` + token preliminary:anchoring:type = "${options.ar.anchoring.type}" + token preliminary:planeAnchoring:alignment = "${options.ar.planeAnchoring.alignment}" + ` : ""; + return `def Xform "Root" +{ + def Scope "Scenes" ( + kind = "sceneLibrary" + ) + { + def Xform "Scene" ( + customData = { + bool preliminary_collidesWithEnvironment = 0 + string sceneName = "Scene" + } + sceneName = "Scene" + ) + {${alignment} +`; +} +function buildSceneEnd() { + return ` + } + } +} + +`; +} +function buildUSDFileAsString(dataToInsert) { + let output = buildHeader(); + output += dataToInsert; + return strToU8(output); +} +function buildXform(object, geometry, material) { + const name2 = "Object_" + object.id; + const transform2 = buildMatrix(object.matrixWorld); + if (object.matrixWorld.determinant() < 0) { + console.warn("THREE.USDZExporter: USDZ does not support negative scales", object); + } + return `def Xform "${name2}" ( + prepend references = @./geometries/Geometry_${geometry.id}.usda@ + prepend apiSchemas = ["MaterialBindingAPI"] +) +{ + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + rel material:binding = +} + +`; +} +function buildMatrix(matrix3) { + const array = matrix3.elements; + return `( ${buildMatrixRow(array, 0)}, ${buildMatrixRow(array, 4)}, ${buildMatrixRow(array, 8)}, ${buildMatrixRow(array, 12)} )`; +} +function buildMatrixRow(array, offset) { + return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`; +} +function buildMeshObject(geometry) { + const mesh = buildMesh(geometry); + return ` +def "Geometry" +{ +${mesh} +} +`; +} +function buildMesh(geometry) { + const name2 = "Geometry"; + const attributes = geometry.attributes; + const count = attributes.position.count; + return ` + def Mesh "${name2}" + { + int[] faceVertexCounts = [${buildMeshVertexCount(geometry)}] + int[] faceVertexIndices = [${buildMeshVertexIndices(geometry)}] + normal3f[] normals = [${buildVector3Array(attributes.normal, count)}] ( + interpolation = "vertex" + ) + point3f[] points = [${buildVector3Array(attributes.position, count)}] +${buildPrimvars(attributes)} + uniform token subdivisionScheme = "none" + } +`; +} +function buildMeshVertexCount(geometry) { + const count = geometry.index !== null ? geometry.index.count : geometry.attributes.position.count; + return Array(count / 3).fill(3).join(", "); +} +function buildMeshVertexIndices(geometry) { + const index2 = geometry.index; + const array = []; + if (index2 !== null) { + for (let i = 0; i < index2.count; i++) { + array.push(index2.getX(i)); + } + } else { + const length2 = geometry.attributes.position.count; + for (let i = 0; i < length2; i++) { + array.push(i); + } + } + return array.join(", "); +} +function buildVector3Array(attribute, count) { + if (attribute === void 0) { + console.warn("USDZExporter: Normals missing."); + return Array(count).fill("(0, 0, 0)").join(", "); + } + const array = []; + for (let i = 0; i < attribute.count; i++) { + const x2 = attribute.getX(i); + const y2 = attribute.getY(i); + const z = attribute.getZ(i); + array.push(`(${x2.toPrecision(PRECISION)}, ${y2.toPrecision(PRECISION)}, ${z.toPrecision(PRECISION)})`); + } + return array.join(", "); +} +function buildVector2Array(attribute) { + const array = []; + for (let i = 0; i < attribute.count; i++) { + const x2 = attribute.getX(i); + const y2 = attribute.getY(i); + array.push(`(${x2.toPrecision(PRECISION)}, ${1 - y2.toPrecision(PRECISION)})`); + } + return array.join(", "); +} +function buildPrimvars(attributes) { + let string = ""; + for (let i = 0; i < 4; i++) { + const id = i > 0 ? i : ""; + const attribute = attributes["uv" + id]; + if (attribute !== void 0) { + string += ` + texCoord2f[] primvars:st${id} = [${buildVector2Array(attribute)}] ( + interpolation = "vertex" + )`; + } + } + const colorAttribute = attributes.color; + if (colorAttribute !== void 0) { + const count = colorAttribute.count; + string += ` + color3f[] primvars:displayColor = [${buildVector3Array(colorAttribute, count)}] ( + interpolation = "vertex" + )`; + } + return string; +} +function buildMaterials(materials, textures, quickLookCompatible = false) { + const array = []; + for (const uuid in materials) { + const material = materials[uuid]; + array.push(buildMaterial(material, textures, quickLookCompatible)); + } + return `def "Materials" +{ +${array.join("")} +} + +`; +} +function buildMaterial(material, textures, quickLookCompatible = false) { + const pad = " "; + const inputs = []; + const samplers = []; + function buildTexture(texture, mapType, color) { + const id = texture.source.id + "_" + texture.flipY; + textures[id] = texture; + const uv = texture.channel > 0 ? "st" + texture.channel : "st"; + const WRAPPINGS = { + 1e3: "repeat", + // RepeatWrapping + 1001: "clamp", + // ClampToEdgeWrapping + 1002: "mirror" + // MirroredRepeatWrapping + }; + const repeat = texture.repeat.clone(); + const offset = texture.offset.clone(); + const rotation2 = texture.rotation; + const xRotationOffset = Math.sin(rotation2); + const yRotationOffset = Math.cos(rotation2); + offset.y = 1 - offset.y - repeat.y; + if (quickLookCompatible) { + offset.x = offset.x / repeat.x; + offset.y = offset.y / repeat.y; + offset.x += xRotationOffset / repeat.x; + offset.y += yRotationOffset - 1; + } else { + offset.x += xRotationOffset * repeat.x; + offset.y += (1 - yRotationOffset) * repeat.y; + } + return ` + def Shader "PrimvarReader_${mapType}" + { + uniform token info:id = "UsdPrimvarReader_float2" + float2 inputs:fallback = (0.0, 0.0) + token inputs:varname = "${uv}" + float2 outputs:result + } + + def Shader "Transform2d_${mapType}" + { + uniform token info:id = "UsdTransform2d" + token inputs:in.connect = + float inputs:rotation = ${(rotation2 * (180 / Math.PI)).toFixed(PRECISION)} + float2 inputs:scale = ${buildVector2(repeat)} + float2 inputs:translation = ${buildVector2(offset)} + float2 outputs:result + } + + def Shader "Texture_${texture.id}_${mapType}" + { + uniform token info:id = "UsdUVTexture" + asset inputs:file = @textures/Texture_${id}.png@ + float2 inputs:st.connect = + ${color !== void 0 ? "float4 inputs:scale = " + buildColor4(color) : ""} + token inputs:sourceColorSpace = "${texture.colorSpace === NoColorSpace ? "raw" : "sRGB"}" + token inputs:wrapS = "${WRAPPINGS[texture.wrapS]}" + token inputs:wrapT = "${WRAPPINGS[texture.wrapT]}" + float outputs:r + float outputs:g + float outputs:b + float3 outputs:rgb + ${material.transparent || material.alphaTest > 0 ? "float outputs:a" : ""} + }`; + } + if (material.side === DoubleSide) { + console.warn("THREE.USDZExporter: USDZ does not support double sided materials", material); + } + if (material.map !== null) { + inputs.push(`${pad}color3f inputs:diffuseColor.connect = `); + if (material.transparent) { + inputs.push(`${pad}float inputs:opacity.connect = `); + } else if (material.alphaTest > 0) { + inputs.push(`${pad}float inputs:opacity.connect = `); + inputs.push(`${pad}float inputs:opacityThreshold = ${material.alphaTest}`); + } + samplers.push(buildTexture(material.map, "diffuse", material.color)); + } else { + inputs.push(`${pad}color3f inputs:diffuseColor = ${buildColor(material.color)}`); + } + if (material.emissiveMap !== null) { + inputs.push(`${pad}color3f inputs:emissiveColor.connect = `); + samplers.push(buildTexture(material.emissiveMap, "emissive")); + } else if (material.emissive.getHex() > 0) { + inputs.push(`${pad}color3f inputs:emissiveColor = ${buildColor(material.emissive)}`); + } + if (material.normalMap !== null) { + inputs.push(`${pad}normal3f inputs:normal.connect = `); + samplers.push(buildTexture(material.normalMap, "normal")); + } + if (material.aoMap !== null) { + inputs.push(`${pad}float inputs:occlusion.connect = `); + samplers.push(buildTexture(material.aoMap, "occlusion")); + } + if (material.roughnessMap !== null && material.roughness === 1) { + inputs.push(`${pad}float inputs:roughness.connect = `); + samplers.push(buildTexture(material.roughnessMap, "roughness")); + } else { + inputs.push(`${pad}float inputs:roughness = ${material.roughness}`); + } + if (material.metalnessMap !== null && material.metalness === 1) { + inputs.push(`${pad}float inputs:metallic.connect = `); + samplers.push(buildTexture(material.metalnessMap, "metallic")); + } else { + inputs.push(`${pad}float inputs:metallic = ${material.metalness}`); + } + if (material.alphaMap !== null) { + inputs.push(`${pad}float inputs:opacity.connect = `); + inputs.push(`${pad}float inputs:opacityThreshold = 0.0001`); + samplers.push(buildTexture(material.alphaMap, "opacity")); + } else { + inputs.push(`${pad}float inputs:opacity = ${material.opacity}`); + } + if (material.isMeshPhysicalMaterial) { + inputs.push(`${pad}float inputs:clearcoat = ${material.clearcoat}`); + inputs.push(`${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`); + inputs.push(`${pad}float inputs:ior = ${material.ior}`); + } + return ` + def Material "Material_${material.id}" + { + def Shader "PreviewSurface" + { + uniform token info:id = "UsdPreviewSurface" +${inputs.join("\n")} + int inputs:useSpecularWorkflow = 0 + token outputs:surface + } + + token outputs:surface.connect = + +${samplers.join("\n")} + + } +`; +} +function buildColor(color) { + return `(${color.r}, ${color.g}, ${color.b})`; +} +function buildColor4(color) { + return `(${color.r}, ${color.g}, ${color.b}, 1.0)`; +} +function buildVector2(vector) { + return `(${vector.x}, ${vector.y})`; +} +function buildCamera(camera) { + const name2 = camera.name ? camera.name : "Camera_" + camera.id; + const transform2 = buildMatrix(camera.matrixWorld); + if (camera.matrixWorld.determinant() < 0) { + console.warn("THREE.USDZExporter: USDZ does not support negative scales", camera); + } + if (camera.isOrthographicCamera) { + return `def Camera "${name2}" + { + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + float2 clippingRange = (${camera.near.toPrecision(PRECISION)}, ${camera.far.toPrecision(PRECISION)}) + float horizontalAperture = ${((Math.abs(camera.left) + Math.abs(camera.right)) * 10).toPrecision(PRECISION)} + float verticalAperture = ${((Math.abs(camera.top) + Math.abs(camera.bottom)) * 10).toPrecision(PRECISION)} + token projection = "orthographic" + } + + `; + } else { + return `def Camera "${name2}" + { + matrix4d xformOp:transform = ${transform2} + uniform token[] xformOpOrder = ["xformOp:transform"] + + float2 clippingRange = (${camera.near.toPrecision(PRECISION)}, ${camera.far.toPrecision(PRECISION)}) + float focalLength = ${camera.getFocalLength().toPrecision(PRECISION)} + float focusDistance = ${camera.focus.toPrecision(PRECISION)} + float horizontalAperture = ${camera.getFilmWidth().toPrecision(PRECISION)} + token projection = "perspective" + float verticalAperture = ${camera.getFilmHeight().toPrecision(PRECISION)} + } + + `; + } +} + +// node_modules/three/examples/jsm/geometries/BoxLineGeometry.js +var BoxLineGeometry = class extends BufferGeometry { + constructor(width2 = 1, height2 = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1) { + super(); + widthSegments = Math.floor(widthSegments); + heightSegments = Math.floor(heightSegments); + depthSegments = Math.floor(depthSegments); + const widthHalf = width2 / 2; + const heightHalf = height2 / 2; + const depthHalf = depth / 2; + const segmentWidth = width2 / widthSegments; + const segmentHeight = height2 / heightSegments; + const segmentDepth = depth / depthSegments; + const vertices = []; + let x2 = -widthHalf; + let y2 = -heightHalf; + let z = -depthHalf; + for (let i = 0; i <= widthSegments; i++) { + vertices.push(x2, -heightHalf, -depthHalf, x2, heightHalf, -depthHalf); + vertices.push(x2, heightHalf, -depthHalf, x2, heightHalf, depthHalf); + vertices.push(x2, heightHalf, depthHalf, x2, -heightHalf, depthHalf); + vertices.push(x2, -heightHalf, depthHalf, x2, -heightHalf, -depthHalf); + x2 += segmentWidth; + } + for (let i = 0; i <= heightSegments; i++) { + vertices.push(-widthHalf, y2, -depthHalf, widthHalf, y2, -depthHalf); + vertices.push(widthHalf, y2, -depthHalf, widthHalf, y2, depthHalf); + vertices.push(widthHalf, y2, depthHalf, -widthHalf, y2, depthHalf); + vertices.push(-widthHalf, y2, depthHalf, -widthHalf, y2, -depthHalf); + y2 += segmentHeight; + } + for (let i = 0; i <= depthSegments; i++) { + vertices.push(-widthHalf, -heightHalf, z, -widthHalf, heightHalf, z); + vertices.push(-widthHalf, heightHalf, z, widthHalf, heightHalf, z); + vertices.push(widthHalf, heightHalf, z, widthHalf, -heightHalf, z); + vertices.push(widthHalf, -heightHalf, z, -widthHalf, -heightHalf, z); + z += segmentDepth; + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } +}; + +// node_modules/three/examples/jsm/math/ConvexHull.js +var Visible = 0; +var Deleted = 1; +var _v12 = new Vector3(); +var _line3 = new Line3(); +var _plane2 = new Plane(); +var _closestPoint = new Vector3(); +var _triangle = new Triangle(); +var ConvexHull = class { + constructor() { + this.tolerance = -1; + this.faces = []; + this.newFaces = []; + this.assigned = new VertexList(); + this.unassigned = new VertexList(); + this.vertices = []; + } + setFromPoints(points) { + if (points.length >= 4) { + this.makeEmpty(); + for (let i = 0, l2 = points.length; i < l2; i++) { + this.vertices.push(new VertexNode(points[i])); + } + this.compute(); + } + return this; + } + setFromObject(object) { + const points = []; + object.updateMatrixWorld(true); + object.traverse(function(node) { + const geometry = node.geometry; + if (geometry !== void 0) { + const attribute = geometry.attributes.position; + if (attribute !== void 0) { + for (let i = 0, l2 = attribute.count; i < l2; i++) { + const point = new Vector3(); + point.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld); + points.push(point); + } + } + } + }); + return this.setFromPoints(points); + } + containsPoint(point) { + const faces = this.faces; + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + if (face.distanceToPoint(point) > this.tolerance) return false; + } + return true; + } + intersectRay(ray, target) { + const faces = this.faces; + let tNear = -Infinity; + let tFar = Infinity; + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + const vN = face.distanceToPoint(ray.origin); + const vD = face.normal.dot(ray.direction); + if (vN > 0 && vD >= 0) return null; + const t3 = vD !== 0 ? -vN / vD : 0; + if (t3 <= 0) continue; + if (vD > 0) { + tFar = Math.min(t3, tFar); + } else { + tNear = Math.max(t3, tNear); + } + if (tNear > tFar) { + return null; + } + } + if (tNear !== -Infinity) { + ray.at(tNear, target); + } else { + ray.at(tFar, target); + } + return target; + } + intersectsRay(ray) { + return this.intersectRay(ray, _v12) !== null; + } + makeEmpty() { + this.faces = []; + this.vertices = []; + return this; + } + // Adds a vertex to the 'assigned' list of vertices and assigns it to the given face + addVertexToFace(vertex, face) { + vertex.face = face; + if (face.outside === null) { + this.assigned.append(vertex); + } else { + this.assigned.insertBefore(face.outside, vertex); + } + face.outside = vertex; + return this; + } + // Removes a vertex from the 'assigned' list of vertices and from the given face + removeVertexFromFace(vertex, face) { + if (vertex === face.outside) { + if (vertex.next !== null && vertex.next.face === face) { + face.outside = vertex.next; + } else { + face.outside = null; + } + } + this.assigned.remove(vertex); + return this; + } + // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list + removeAllVerticesFromFace(face) { + if (face.outside !== null) { + const start = face.outside; + let end = face.outside; + while (end.next !== null && end.next.face === face) { + end = end.next; + } + this.assigned.removeSubList(start, end); + start.prev = end.next = null; + face.outside = null; + return start; + } + } + // Removes all the visible vertices that 'face' is able to see + deleteFaceVertices(face, absorbingFace) { + const faceVertices = this.removeAllVerticesFromFace(face); + if (faceVertices !== void 0) { + if (absorbingFace === void 0) { + this.unassigned.appendChain(faceVertices); + } else { + let vertex = faceVertices; + do { + const nextVertex = vertex.next; + const distance = absorbingFace.distanceToPoint(vertex.point); + if (distance > this.tolerance) { + this.addVertexToFace(vertex, absorbingFace); + } else { + this.unassigned.append(vertex); + } + vertex = nextVertex; + } while (vertex !== null); + } + } + return this; + } + // Reassigns as many vertices as possible from the unassigned list to the new faces + resolveUnassignedPoints(newFaces) { + if (this.unassigned.isEmpty() === false) { + let vertex = this.unassigned.first(); + do { + const nextVertex = vertex.next; + let maxDistance = this.tolerance; + let maxFace = null; + for (let i = 0; i < newFaces.length; i++) { + const face = newFaces[i]; + if (face.mark === Visible) { + const distance = face.distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + maxFace = face; + } + if (maxDistance > 1e3 * this.tolerance) break; + } + } + if (maxFace !== null) { + this.addVertexToFace(vertex, maxFace); + } + vertex = nextVertex; + } while (vertex !== null); + } + return this; + } + // Computes the extremes of a simplex which will be the initial hull + computeExtremes() { + const min = new Vector3(); + const max2 = new Vector3(); + const minVertices = []; + const maxVertices = []; + for (let i = 0; i < 3; i++) { + minVertices[i] = maxVertices[i] = this.vertices[0]; + } + min.copy(this.vertices[0].point); + max2.copy(this.vertices[0].point); + for (let i = 0, l2 = this.vertices.length; i < l2; i++) { + const vertex = this.vertices[i]; + const point = vertex.point; + for (let j = 0; j < 3; j++) { + if (point.getComponent(j) < min.getComponent(j)) { + min.setComponent(j, point.getComponent(j)); + minVertices[j] = vertex; + } + } + for (let j = 0; j < 3; j++) { + if (point.getComponent(j) > max2.getComponent(j)) { + max2.setComponent(j, point.getComponent(j)); + maxVertices[j] = vertex; + } + } + } + this.tolerance = 3 * Number.EPSILON * (Math.max(Math.abs(min.x), Math.abs(max2.x)) + Math.max(Math.abs(min.y), Math.abs(max2.y)) + Math.max(Math.abs(min.z), Math.abs(max2.z))); + return { min: minVertices, max: maxVertices }; + } + // Computes the initial simplex assigning to its faces all the points + // that are candidates to form part of the hull + computeInitialHull() { + const vertices = this.vertices; + const extremes = this.computeExtremes(); + const min = extremes.min; + const max2 = extremes.max; + let maxDistance = 0; + let index2 = 0; + for (let i = 0; i < 3; i++) { + const distance = max2[i].point.getComponent(i) - min[i].point.getComponent(i); + if (distance > maxDistance) { + maxDistance = distance; + index2 = i; + } + } + const v0 = min[index2]; + const v12 = max2[index2]; + let v2; + let v3; + maxDistance = 0; + _line3.set(v0.point, v12.point); + for (let i = 0, l2 = this.vertices.length; i < l2; i++) { + const vertex = vertices[i]; + if (vertex !== v0 && vertex !== v12) { + _line3.closestPointToPoint(vertex.point, true, _closestPoint); + const distance = _closestPoint.distanceToSquared(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + v2 = vertex; + } + } + } + maxDistance = -1; + _plane2.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)); + if (distance > maxDistance) { + maxDistance = distance; + v3 = vertex; + } + } + } + const faces = []; + if (_plane2.distanceToPoint(v3.point) < 0) { + faces.push( + Face.create(v0, v12, v2), + Face.create(v3, v12, v0), + Face.create(v3, v2, v12), + Face.create(v3, v0, v2) + ); + for (let i = 0; i < 3; i++) { + const j = (i + 1) % 3; + faces[i + 1].getEdge(2).setTwin(faces[0].getEdge(j)); + faces[i + 1].getEdge(1).setTwin(faces[j + 1].getEdge(0)); + } + } else { + faces.push( + Face.create(v0, v2, v12), + Face.create(v3, v0, v12), + Face.create(v3, v12, v2), + Face.create(v3, v2, v0) + ); + for (let i = 0; i < 3; i++) { + const j = (i + 1) % 3; + faces[i + 1].getEdge(2).setTwin(faces[0].getEdge((3 - i) % 3)); + faces[i + 1].getEdge(0).setTwin(faces[j + 1].getEdge(1)); + } + } + for (let i = 0; i < 4; i++) { + this.faces.push(faces[i]); + } + for (let i = 0, l2 = vertices.length; i < l2; i++) { + const vertex = vertices[i]; + if (vertex !== v0 && vertex !== v12 && vertex !== v2 && vertex !== v3) { + maxDistance = this.tolerance; + let maxFace = null; + for (let j = 0; j < 4; j++) { + const distance = this.faces[j].distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + maxFace = this.faces[j]; + } + } + if (maxFace !== null) { + this.addVertexToFace(vertex, maxFace); + } + } + } + return this; + } + // Removes inactive faces + reindexFaces() { + const activeFaces = []; + for (let i = 0; i < this.faces.length; i++) { + const face = this.faces[i]; + if (face.mark === Visible) { + activeFaces.push(face); + } + } + this.faces = activeFaces; + return this; + } + // Finds the next vertex to create faces with the current hull + nextVertexToAdd() { + if (this.assigned.isEmpty() === false) { + let eyeVertex, maxDistance = 0; + const eyeFace = this.assigned.first().face; + let vertex = eyeFace.outside; + do { + const distance = eyeFace.distanceToPoint(vertex.point); + if (distance > maxDistance) { + maxDistance = distance; + eyeVertex = vertex; + } + vertex = vertex.next; + } while (vertex !== null && vertex.face === eyeFace); + return eyeVertex; + } + } + // Computes a chain of half edges in CCW order called the 'horizon'. + // For an edge to be part of the horizon it must join a face that can see + // 'eyePoint' and a face that cannot see 'eyePoint'. + computeHorizon(eyePoint, crossEdge, face, horizon) { + this.deleteFaceVertices(face); + face.mark = Deleted; + let edge; + if (crossEdge === null) { + edge = crossEdge = face.getEdge(0); + } else { + edge = crossEdge.next; + } + do { + const twinEdge = edge.twin; + const oppositeFace = twinEdge.face; + if (oppositeFace.mark === Visible) { + if (oppositeFace.distanceToPoint(eyePoint) > this.tolerance) { + this.computeHorizon(eyePoint, twinEdge, oppositeFace, horizon); + } else { + horizon.push(edge); + } + } + edge = edge.next; + } while (edge !== crossEdge); + return this; + } + // Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order + addAdjoiningFace(eyeVertex, horizonEdge) { + const face = Face.create(eyeVertex, horizonEdge.tail(), horizonEdge.head()); + this.faces.push(face); + face.getEdge(-1).setTwin(horizonEdge.twin); + return face.getEdge(0); + } + // Adds 'horizon.length' faces to the hull, each face will be linked with the + // horizon opposite face and the face on the left/right + addNewFaces(eyeVertex, horizon) { + this.newFaces = []; + let firstSideEdge = null; + let previousSideEdge = null; + for (let i = 0; i < horizon.length; i++) { + const horizonEdge = horizon[i]; + const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge); + if (firstSideEdge === null) { + firstSideEdge = sideEdge; + } else { + sideEdge.next.setTwin(previousSideEdge); + } + this.newFaces.push(sideEdge.face); + previousSideEdge = sideEdge; + } + firstSideEdge.next.setTwin(previousSideEdge); + return this; + } + // Adds a vertex to the hull + addVertexToHull(eyeVertex) { + const horizon = []; + this.unassigned.clear(); + this.removeVertexFromFace(eyeVertex, eyeVertex.face); + this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon); + this.addNewFaces(eyeVertex, horizon); + this.resolveUnassignedPoints(this.newFaces); + return this; + } + cleanup() { + this.assigned.clear(); + this.unassigned.clear(); + this.newFaces = []; + return this; + } + compute() { + let vertex; + this.computeInitialHull(); + while ((vertex = this.nextVertexToAdd()) !== void 0) { + this.addVertexToHull(vertex); + } + this.reindexFaces(); + this.cleanup(); + return this; + } +}; +var Face = class _Face { + constructor() { + this.normal = new Vector3(); + this.midpoint = new Vector3(); + this.area = 0; + this.constant = 0; + this.outside = null; + this.mark = Visible; + this.edge = null; + } + static create(a2, b3, c2) { + const face = new _Face(); + const e0 = new HalfEdge(a2, face); + const e1 = new HalfEdge(b3, face); + const e2 = new HalfEdge(c2, face); + e0.next = e2.prev = e1; + e1.next = e0.prev = e2; + e2.next = e1.prev = e0; + face.edge = e0; + return face.compute(); + } + getEdge(i) { + let edge = this.edge; + while (i > 0) { + edge = edge.next; + i--; + } + while (i < 0) { + edge = edge.prev; + i++; + } + return edge; + } + compute() { + const a2 = this.edge.tail(); + const b3 = this.edge.head(); + const c2 = this.edge.next.head(); + _triangle.set(a2.point, b3.point, c2.point); + _triangle.getNormal(this.normal); + _triangle.getMidpoint(this.midpoint); + this.area = _triangle.getArea(); + this.constant = this.normal.dot(this.midpoint); + return this; + } + distanceToPoint(point) { + return this.normal.dot(point) - this.constant; + } +}; +var HalfEdge = class { + constructor(vertex, face) { + this.vertex = vertex; + this.prev = null; + this.next = null; + this.twin = null; + this.face = face; + } + head() { + return this.vertex; + } + tail() { + return this.prev ? this.prev.vertex : null; + } + length() { + const head2 = this.head(); + const tail = this.tail(); + if (tail !== null) { + return tail.point.distanceTo(head2.point); + } + return -1; + } + lengthSquared() { + const head2 = this.head(); + const tail = this.tail(); + if (tail !== null) { + return tail.point.distanceToSquared(head2.point); + } + return -1; + } + setTwin(edge) { + this.twin = edge; + edge.twin = this; + return this; + } +}; +var VertexNode = class { + constructor(point) { + this.point = point; + this.prev = null; + this.next = null; + this.face = null; + } +}; +var VertexList = class { + constructor() { + this.head = null; + this.tail = null; + } + first() { + return this.head; + } + last() { + return this.tail; + } + clear() { + this.head = this.tail = null; + return this; + } + // Inserts a vertex before the target vertex + insertBefore(target, vertex) { + vertex.prev = target.prev; + vertex.next = target; + if (vertex.prev === null) { + this.head = vertex; + } else { + vertex.prev.next = vertex; + } + target.prev = vertex; + return this; + } + // Inserts a vertex after the target vertex + insertAfter(target, vertex) { + vertex.prev = target; + vertex.next = target.next; + if (vertex.next === null) { + this.tail = vertex; + } else { + vertex.next.prev = vertex; + } + target.next = vertex; + return this; + } + // Appends a vertex to the end of the linked list + append(vertex) { + if (this.head === null) { + this.head = vertex; + } else { + this.tail.next = vertex; + } + vertex.prev = this.tail; + vertex.next = null; + this.tail = vertex; + return this; + } + // Appends a chain of vertices where 'vertex' is the head. + appendChain(vertex) { + if (this.head === null) { + this.head = vertex; + } else { + this.tail.next = vertex; + } + vertex.prev = this.tail; + while (vertex.next !== null) { + vertex = vertex.next; + } + this.tail = vertex; + return this; + } + // Removes a vertex from the linked list + remove(vertex) { + if (vertex.prev === null) { + this.head = vertex.next; + } else { + vertex.prev.next = vertex.next; + } + if (vertex.next === null) { + this.tail = vertex.prev; + } else { + vertex.next.prev = vertex.prev; + } + return this; + } + // Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b + removeSubList(a2, b3) { + if (a2.prev === null) { + this.head = b3.next; + } else { + a2.prev.next = b3.next; + } + if (b3.next === null) { + this.tail = a2.prev; + } else { + b3.next.prev = a2.prev; + } + return this; + } + isEmpty() { + return this.head === null; + } +}; + +// node_modules/three/examples/jsm/geometries/ConvexGeometry.js +var ConvexGeometry = class extends BufferGeometry { + constructor(points = []) { + super(); + const vertices = []; + const normals = []; + const convexHull = new ConvexHull().setFromPoints(points); + const faces = convexHull.faces; + for (let i = 0; i < faces.length; i++) { + const face = faces[i]; + let edge = face.edge; + do { + const point = edge.head().point; + vertices.push(point.x, point.y, point.z); + normals.push(face.normal.x, face.normal.y, face.normal.z); + edge = edge.next; + } while (edge !== face.edge); + } + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + } +}; + +// node_modules/three/examples/jsm/geometries/DecalGeometry.js +var DecalGeometry = class extends BufferGeometry { + constructor(mesh, position2, orientation, size2) { + super(); + const vertices = []; + const normals = []; + const uvs = []; + const plane = new Vector3(); + const projectorMatrix = new Matrix4(); + projectorMatrix.makeRotationFromEuler(orientation); + projectorMatrix.setPosition(position2); + const projectorMatrixInverse = new Matrix4(); + projectorMatrixInverse.copy(projectorMatrix).invert(); + generate(); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generate() { + let decalVertices = []; + const vertex = new Vector3(); + const normal = new Vector3(); + const geometry = mesh.geometry; + const positionAttribute = geometry.attributes.position; + const normalAttribute = geometry.attributes.normal; + if (geometry.index !== null) { + const index2 = geometry.index; + for (let i = 0; i < index2.count; i++) { + vertex.fromBufferAttribute(positionAttribute, index2.getX(i)); + normal.fromBufferAttribute(normalAttribute, index2.getX(i)); + pushDecalVertex(decalVertices, vertex, normal); + } + } else { + for (let i = 0; i < positionAttribute.count; i++) { + vertex.fromBufferAttribute(positionAttribute, i); + normal.fromBufferAttribute(normalAttribute, i); + pushDecalVertex(decalVertices, vertex, normal); + } + } + decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1)); + for (let i = 0; i < decalVertices.length; i++) { + const decalVertex = decalVertices[i]; + uvs.push( + 0.5 + decalVertex.position.x / size2.x, + 0.5 + decalVertex.position.y / size2.y + ); + decalVertex.position.applyMatrix4(projectorMatrix); + vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z); + normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z); + } + } + function pushDecalVertex(decalVertices, vertex, normal) { + vertex.applyMatrix4(mesh.matrixWorld); + vertex.applyMatrix4(projectorMatrixInverse); + normal.transformDirection(mesh.matrixWorld); + decalVertices.push(new DecalVertex(vertex.clone(), normal.clone())); + } + function clipGeometry(inVertices, plane2) { + const outVertices = []; + const s = 0.5 * Math.abs(size2.dot(plane2)); + for (let i = 0; i < inVertices.length; i += 3) { + let total = 0; + let nV1; + let nV2; + let nV3; + let nV4; + const d1 = inVertices[i + 0].position.dot(plane2) - s; + const d2 = inVertices[i + 1].position.dot(plane2) - s; + const d3 = inVertices[i + 2].position.dot(plane2) - s; + const v1Out = d1 > 0; + const v2Out = d2 > 0; + const v3Out = d3 > 0; + total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0); + switch (total) { + case 0: { + outVertices.push(inVertices[i]); + outVertices.push(inVertices[i + 1]); + outVertices.push(inVertices[i + 2]); + break; + } + case 1: { + if (v1Out) { + nV1 = inVertices[i + 1]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i], nV1, plane2, s); + nV4 = clip(inVertices[i], nV2, plane2, s); + } + if (v2Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i + 1], nV1, plane2, s); + nV4 = clip(inVertices[i + 1], nV2, plane2, s); + outVertices.push(nV3); + outVertices.push(nV2.clone()); + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3.clone()); + outVertices.push(nV4); + break; + } + if (v3Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 1]; + nV3 = clip(inVertices[i + 2], nV1, plane2, s); + nV4 = clip(inVertices[i + 2], nV2, plane2, s); + } + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3); + outVertices.push(nV4); + outVertices.push(nV3.clone()); + outVertices.push(nV2.clone()); + break; + } + case 2: { + if (!v1Out) { + nV1 = inVertices[i].clone(); + nV2 = clip(nV1, inVertices[i + 1], plane2, s); + nV3 = clip(nV1, inVertices[i + 2], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v2Out) { + nV1 = inVertices[i + 1].clone(); + nV2 = clip(nV1, inVertices[i + 2], plane2, s); + nV3 = clip(nV1, inVertices[i], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v3Out) { + nV1 = inVertices[i + 2].clone(); + nV2 = clip(nV1, inVertices[i], plane2, s); + nV3 = clip(nV1, inVertices[i + 1], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + break; + } + case 3: { + break; + } + } + } + return outVertices; + } + function clip(v0, v12, p2, s) { + const d0 = v0.position.dot(p2) - s; + const d1 = v12.position.dot(p2) - s; + const s0 = d0 / (d0 - d1); + const v = new DecalVertex( + new Vector3( + v0.position.x + s0 * (v12.position.x - v0.position.x), + v0.position.y + s0 * (v12.position.y - v0.position.y), + v0.position.z + s0 * (v12.position.z - v0.position.z) + ), + new Vector3( + v0.normal.x + s0 * (v12.normal.x - v0.normal.x), + v0.normal.y + s0 * (v12.normal.y - v0.normal.y), + v0.normal.z + s0 * (v12.normal.z - v0.normal.z) + ) + ); + return v; + } + } +}; +var DecalVertex = class { + constructor(position2, normal) { + this.position = position2; + this.normal = normal; + } + clone() { + return new this.constructor(this.position.clone(), this.normal.clone()); + } +}; + +// node_modules/three/examples/jsm/geometries/ParametricGeometry.js +var ParametricGeometry = class extends BufferGeometry { + constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) { + super(); + this.type = "ParametricGeometry"; + this.parameters = { + func, + slices, + stacks + }; + const indices = []; + const vertices = []; + const normals = []; + const uvs = []; + const EPS2 = 1e-5; + const normal = new Vector3(); + const p0 = new Vector3(), p1 = new Vector3(); + const pu = new Vector3(), pv = new Vector3(); + const sliceCount = slices + 1; + for (let i = 0; i <= stacks; i++) { + const v = i / stacks; + for (let j = 0; j <= slices; j++) { + const u = j / slices; + func(u, v, p0); + vertices.push(p0.x, p0.y, p0.z); + if (u - EPS2 >= 0) { + func(u - EPS2, v, p1); + pu.subVectors(p0, p1); + } else { + func(u + EPS2, v, p1); + pu.subVectors(p1, p0); + } + if (v - EPS2 >= 0) { + func(u, v - EPS2, p1); + pv.subVectors(p0, p1); + } else { + func(u, v + EPS2, p1); + pv.subVectors(p1, p0); + } + normal.crossVectors(pu, pv).normalize(); + normals.push(normal.x, normal.y, normal.z); + uvs.push(u, v); + } + } + for (let i = 0; i < stacks; i++) { + for (let j = 0; j < slices; j++) { + const a2 = i * sliceCount + j; + const b3 = i * sliceCount + j + 1; + const c2 = (i + 1) * sliceCount + j + 1; + const d = (i + 1) * sliceCount + j; + indices.push(a2, b3, d); + indices.push(b3, c2, d); + } + } + this.setIndex(indices); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + copy(source) { + super.copy(source); + this.parameters = Object.assign({}, source.parameters); + return this; + } +}; + +// node_modules/three/examples/jsm/geometries/ParametricGeometries.js +var ParametricGeometries = { + klein: function(v, u, target) { + u *= Math.PI; + v *= 2 * Math.PI; + u = u * 2; + let x2, z; + if (u < Math.PI) { + x2 = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v); + z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v); + } else { + x2 = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI); + z = -8 * Math.sin(u); + } + const y2 = -2 * (1 - Math.cos(u) / 2) * Math.sin(v); + target.set(x2, y2, z); + }, + plane: function(width2, height2) { + return function(u, v, target) { + const x2 = u * width2; + const y2 = 0; + const z = v * height2; + target.set(x2, y2, z); + }; + }, + mobius: function(u, t3, target) { + u = u - 0.5; + const v = 2 * Math.PI * t3; + const a2 = 2; + const x2 = Math.cos(v) * (a2 + u * Math.cos(v / 2)); + const y2 = Math.sin(v) * (a2 + u * Math.cos(v / 2)); + const z = u * Math.sin(v / 2); + target.set(x2, y2, z); + }, + mobius3d: function(u, t3, target) { + u *= Math.PI; + t3 *= 2 * Math.PI; + u = u * 2; + const phi = u / 2; + const major = 2.25, a2 = 0.125, b3 = 0.65; + let x2 = a2 * Math.cos(t3) * Math.cos(phi) - b3 * Math.sin(t3) * Math.sin(phi); + const z = a2 * Math.cos(t3) * Math.sin(phi) + b3 * Math.sin(t3) * Math.cos(phi); + const y2 = (major + x2) * Math.sin(u); + x2 = (major + x2) * Math.cos(u); + target.set(x2, y2, z); + } +}; +ParametricGeometries.TubeGeometry = class TubeGeometry extends ParametricGeometry { + constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) { + const numpoints = segments + 1; + const frames2 = path.computeFrenetFrames(segments, closed), tangents = frames2.tangents, normals = frames2.normals, binormals = frames2.binormals; + const position2 = new Vector3(); + function ParametricTube(u, v, target) { + v *= 2 * Math.PI; + const i = Math.floor(u * (numpoints - 1)); + path.getPointAt(u, position2); + const normal = normals[i]; + const binormal = binormals[i]; + const cx = -radius * Math.cos(v); + const cy = radius * Math.sin(v); + position2.x += cx * normal.x + cy * binormal.x; + position2.y += cx * normal.y + cy * binormal.y; + position2.z += cx * normal.z + cy * binormal.z; + target.copy(position2); + } + super(ParametricTube, segments, segmentsRadius); + this.tangents = tangents; + this.normals = normals; + this.binormals = binormals; + this.path = path; + this.segments = segments; + this.radius = radius; + this.segmentsRadius = segmentsRadius; + this.closed = closed; + } +}; +ParametricGeometries.TorusKnotGeometry = class TorusKnotGeometry extends ParametricGeometries.TubeGeometry { + constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p2 = 2, q2 = 3) { + class TorusKnotCurve extends Curve { + getPoint(t3, optionalTarget = new Vector3()) { + const point = optionalTarget; + t3 *= Math.PI * 2; + const r = 0.5; + const x2 = (1 + r * Math.cos(q2 * t3)) * Math.cos(p2 * t3); + const y2 = (1 + r * Math.cos(q2 * t3)) * Math.sin(p2 * t3); + const z = r * Math.sin(q2 * t3); + return point.set(x2, y2, z).multiplyScalar(radius); + } + } + const segments = segmentsT; + const radiusSegments = segmentsR; + const extrudePath = new TorusKnotCurve(); + super(extrudePath, segments, tube, radiusSegments, true, false); + this.radius = radius; + this.tube = tube; + this.segmentsT = segmentsT; + this.segmentsR = segmentsR; + this.p = p2; + this.q = q2; + } +}; +ParametricGeometries.SphereGeometry = class SphereGeometry2 extends ParametricGeometry { + constructor(size2, u, v) { + function sphere(u2, v2, target) { + u2 *= Math.PI; + v2 *= 2 * Math.PI; + const x2 = size2 * Math.sin(u2) * Math.cos(v2); + const y2 = size2 * Math.sin(u2) * Math.sin(v2); + const z = size2 * Math.cos(u2); + target.set(x2, y2, z); + } + super(sphere, u, v); + } +}; +ParametricGeometries.PlaneGeometry = class PlaneGeometry2 extends ParametricGeometry { + constructor(width2, depth, segmentsWidth, segmentsDepth) { + function plane(u, v, target) { + const x2 = u * width2; + const y2 = 0; + const z = v * depth; + target.set(x2, y2, z); + } + super(plane, segmentsWidth, segmentsDepth); + } +}; + +// node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js +var _tempNormal = new Vector3(); +function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) { + const totArcLength = 2 * Math.PI * radius / 4; + const centerLength = Math.max(sideLength - 2 * radius, 0); + const halfArc = Math.PI / 4; + _tempNormal.copy(normal); + _tempNormal[projectionAxis] = 0; + _tempNormal.normalize(); + const arcUvRatio = 0.5 * totArcLength / (totArcLength + centerLength); + const arcAngleRatio = 1 - _tempNormal.angleTo(faceDirVector) / halfArc; + if (Math.sign(_tempNormal[uvAxis]) === 1) { + return arcAngleRatio * arcUvRatio; + } else { + const lenUv = centerLength / (totArcLength + centerLength); + return lenUv + arcUvRatio + arcUvRatio * (1 - arcAngleRatio); + } +} +var RoundedBoxGeometry = class extends BoxGeometry { + constructor(width2 = 1, height2 = 1, depth = 1, segments = 2, radius = 0.1) { + segments = segments * 2 + 1; + radius = Math.min(width2 / 2, height2 / 2, depth / 2, radius); + super(1, 1, 1, segments, segments, segments); + if (segments === 1) return; + const geometry2 = this.toNonIndexed(); + this.index = null; + this.attributes.position = geometry2.attributes.position; + this.attributes.normal = geometry2.attributes.normal; + this.attributes.uv = geometry2.attributes.uv; + const position2 = new Vector3(); + const normal = new Vector3(); + const box = new Vector3(width2, height2, depth).divideScalar(2).subScalar(radius); + const positions = this.attributes.position.array; + const normals = this.attributes.normal.array; + const uvs = this.attributes.uv.array; + const faceTris = positions.length / 6; + const faceDirVector = new Vector3(); + const halfSegmentSize = 0.5 / segments; + for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) { + position2.fromArray(positions, i); + normal.copy(position2); + normal.x -= Math.sign(normal.x) * halfSegmentSize; + normal.y -= Math.sign(normal.y) * halfSegmentSize; + normal.z -= Math.sign(normal.z) * halfSegmentSize; + normal.normalize(); + positions[i + 0] = box.x * Math.sign(position2.x) + normal.x * radius; + positions[i + 1] = box.y * Math.sign(position2.y) + normal.y * radius; + positions[i + 2] = box.z * Math.sign(position2.z) + normal.z * radius; + normals[i + 0] = normal.x; + normals[i + 1] = normal.y; + normals[i + 2] = normal.z; + const side = Math.floor(i / faceTris); + switch (side) { + case 0: + faceDirVector.set(1, 0, 0); + uvs[j + 0] = getUv(faceDirVector, normal, "z", "y", radius, depth); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height2); + break; + case 1: + faceDirVector.set(-1, 0, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "z", "y", radius, depth); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height2); + break; + case 2: + faceDirVector.set(0, 1, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width2); + uvs[j + 1] = getUv(faceDirVector, normal, "z", "x", radius, depth); + break; + case 3: + faceDirVector.set(0, -1, 0); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "z", "x", radius, depth); + break; + case 4: + faceDirVector.set(0, 0, 1); + uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "y", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height2); + break; + case 5: + faceDirVector.set(0, 0, -1); + uvs[j + 0] = getUv(faceDirVector, normal, "x", "y", radius, width2); + uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height2); + break; + } + } + } +}; + +// node_modules/three/examples/jsm/geometries/TeapotGeometry.js +var TeapotGeometry = class extends BufferGeometry { + constructor(size2 = 50, segments = 10, bottom = true, lid = true, body = true, fitLid = true, blinn = true) { + const teapotPatches = [ + /*rim*/ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 3, + 16, + 17, + 18, + 7, + 19, + 20, + 21, + 11, + 22, + 23, + 24, + 15, + 25, + 26, + 27, + 18, + 28, + 29, + 30, + 21, + 31, + 32, + 33, + 24, + 34, + 35, + 36, + 27, + 37, + 38, + 39, + 30, + 40, + 41, + 0, + 33, + 42, + 43, + 4, + 36, + 44, + 45, + 8, + 39, + 46, + 47, + 12, + /*body*/ + 12, + 13, + 14, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 15, + 25, + 26, + 27, + 51, + 60, + 61, + 62, + 55, + 63, + 64, + 65, + 59, + 66, + 67, + 68, + 27, + 37, + 38, + 39, + 62, + 69, + 70, + 71, + 65, + 72, + 73, + 74, + 68, + 75, + 76, + 77, + 39, + 46, + 47, + 12, + 71, + 78, + 79, + 48, + 74, + 80, + 81, + 52, + 77, + 82, + 83, + 56, + 56, + 57, + 58, + 59, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 59, + 66, + 67, + 68, + 87, + 96, + 97, + 98, + 91, + 99, + 100, + 101, + 95, + 102, + 103, + 104, + 68, + 75, + 76, + 77, + 98, + 105, + 106, + 107, + 101, + 108, + 109, + 110, + 104, + 111, + 112, + 113, + 77, + 82, + 83, + 56, + 107, + 114, + 115, + 84, + 110, + 116, + 117, + 88, + 113, + 118, + 119, + 92, + /*handle*/ + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 123, + 136, + 137, + 120, + 127, + 138, + 139, + 124, + 131, + 140, + 141, + 128, + 135, + 142, + 143, + 132, + 132, + 133, + 134, + 135, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 68, + 152, + 153, + 154, + 135, + 142, + 143, + 132, + 147, + 155, + 156, + 144, + 151, + 157, + 158, + 148, + 154, + 159, + 160, + 68, + /*spout*/ + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 164, + 177, + 178, + 161, + 168, + 179, + 180, + 165, + 172, + 181, + 182, + 169, + 176, + 183, + 184, + 173, + 173, + 174, + 175, + 176, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 176, + 183, + 184, + 173, + 188, + 197, + 198, + 185, + 192, + 199, + 200, + 189, + 196, + 201, + 202, + 193, + /*lid*/ + 203, + 203, + 203, + 203, + 204, + 205, + 206, + 207, + 208, + 208, + 208, + 208, + 209, + 210, + 211, + 212, + 203, + 203, + 203, + 203, + 207, + 213, + 214, + 215, + 208, + 208, + 208, + 208, + 212, + 216, + 217, + 218, + 203, + 203, + 203, + 203, + 215, + 219, + 220, + 221, + 208, + 208, + 208, + 208, + 218, + 222, + 223, + 224, + 203, + 203, + 203, + 203, + 221, + 225, + 226, + 204, + 208, + 208, + 208, + 208, + 224, + 227, + 228, + 209, + 209, + 210, + 211, + 212, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 212, + 216, + 217, + 218, + 232, + 241, + 242, + 243, + 236, + 244, + 245, + 246, + 240, + 247, + 248, + 249, + 218, + 222, + 223, + 224, + 243, + 250, + 251, + 252, + 246, + 253, + 254, + 255, + 249, + 256, + 257, + 258, + 224, + 227, + 228, + 209, + 252, + 259, + 260, + 229, + 255, + 261, + 262, + 233, + 258, + 263, + 264, + 237, + /*bottom*/ + 265, + 265, + 265, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 92, + 119, + 118, + 113, + 265, + 265, + 265, + 265, + 269, + 274, + 275, + 276, + 273, + 277, + 278, + 279, + 113, + 112, + 111, + 104, + 265, + 265, + 265, + 265, + 276, + 280, + 281, + 282, + 279, + 283, + 284, + 285, + 104, + 103, + 102, + 95, + 265, + 265, + 265, + 265, + 282, + 286, + 287, + 266, + 285, + 288, + 289, + 270, + 95, + 94, + 93, + 92 + ]; + const teapotVertices = [ + 1.4, + 0, + 2.4, + 1.4, + -0.784, + 2.4, + 0.784, + -1.4, + 2.4, + 0, + -1.4, + 2.4, + 1.3375, + 0, + 2.53125, + 1.3375, + -0.749, + 2.53125, + 0.749, + -1.3375, + 2.53125, + 0, + -1.3375, + 2.53125, + 1.4375, + 0, + 2.53125, + 1.4375, + -0.805, + 2.53125, + 0.805, + -1.4375, + 2.53125, + 0, + -1.4375, + 2.53125, + 1.5, + 0, + 2.4, + 1.5, + -0.84, + 2.4, + 0.84, + -1.5, + 2.4, + 0, + -1.5, + 2.4, + -0.784, + -1.4, + 2.4, + -1.4, + -0.784, + 2.4, + -1.4, + 0, + 2.4, + -0.749, + -1.3375, + 2.53125, + -1.3375, + -0.749, + 2.53125, + -1.3375, + 0, + 2.53125, + -0.805, + -1.4375, + 2.53125, + -1.4375, + -0.805, + 2.53125, + -1.4375, + 0, + 2.53125, + -0.84, + -1.5, + 2.4, + -1.5, + -0.84, + 2.4, + -1.5, + 0, + 2.4, + -1.4, + 0.784, + 2.4, + -0.784, + 1.4, + 2.4, + 0, + 1.4, + 2.4, + -1.3375, + 0.749, + 2.53125, + -0.749, + 1.3375, + 2.53125, + 0, + 1.3375, + 2.53125, + -1.4375, + 0.805, + 2.53125, + -0.805, + 1.4375, + 2.53125, + 0, + 1.4375, + 2.53125, + -1.5, + 0.84, + 2.4, + -0.84, + 1.5, + 2.4, + 0, + 1.5, + 2.4, + 0.784, + 1.4, + 2.4, + 1.4, + 0.784, + 2.4, + 0.749, + 1.3375, + 2.53125, + 1.3375, + 0.749, + 2.53125, + 0.805, + 1.4375, + 2.53125, + 1.4375, + 0.805, + 2.53125, + 0.84, + 1.5, + 2.4, + 1.5, + 0.84, + 2.4, + 1.75, + 0, + 1.875, + 1.75, + -0.98, + 1.875, + 0.98, + -1.75, + 1.875, + 0, + -1.75, + 1.875, + 2, + 0, + 1.35, + 2, + -1.12, + 1.35, + 1.12, + -2, + 1.35, + 0, + -2, + 1.35, + 2, + 0, + 0.9, + 2, + -1.12, + 0.9, + 1.12, + -2, + 0.9, + 0, + -2, + 0.9, + -0.98, + -1.75, + 1.875, + -1.75, + -0.98, + 1.875, + -1.75, + 0, + 1.875, + -1.12, + -2, + 1.35, + -2, + -1.12, + 1.35, + -2, + 0, + 1.35, + -1.12, + -2, + 0.9, + -2, + -1.12, + 0.9, + -2, + 0, + 0.9, + -1.75, + 0.98, + 1.875, + -0.98, + 1.75, + 1.875, + 0, + 1.75, + 1.875, + -2, + 1.12, + 1.35, + -1.12, + 2, + 1.35, + 0, + 2, + 1.35, + -2, + 1.12, + 0.9, + -1.12, + 2, + 0.9, + 0, + 2, + 0.9, + 0.98, + 1.75, + 1.875, + 1.75, + 0.98, + 1.875, + 1.12, + 2, + 1.35, + 2, + 1.12, + 1.35, + 1.12, + 2, + 0.9, + 2, + 1.12, + 0.9, + 2, + 0, + 0.45, + 2, + -1.12, + 0.45, + 1.12, + -2, + 0.45, + 0, + -2, + 0.45, + 1.5, + 0, + 0.225, + 1.5, + -0.84, + 0.225, + 0.84, + -1.5, + 0.225, + 0, + -1.5, + 0.225, + 1.5, + 0, + 0.15, + 1.5, + -0.84, + 0.15, + 0.84, + -1.5, + 0.15, + 0, + -1.5, + 0.15, + -1.12, + -2, + 0.45, + -2, + -1.12, + 0.45, + -2, + 0, + 0.45, + -0.84, + -1.5, + 0.225, + -1.5, + -0.84, + 0.225, + -1.5, + 0, + 0.225, + -0.84, + -1.5, + 0.15, + -1.5, + -0.84, + 0.15, + -1.5, + 0, + 0.15, + -2, + 1.12, + 0.45, + -1.12, + 2, + 0.45, + 0, + 2, + 0.45, + -1.5, + 0.84, + 0.225, + -0.84, + 1.5, + 0.225, + 0, + 1.5, + 0.225, + -1.5, + 0.84, + 0.15, + -0.84, + 1.5, + 0.15, + 0, + 1.5, + 0.15, + 1.12, + 2, + 0.45, + 2, + 1.12, + 0.45, + 0.84, + 1.5, + 0.225, + 1.5, + 0.84, + 0.225, + 0.84, + 1.5, + 0.15, + 1.5, + 0.84, + 0.15, + -1.6, + 0, + 2.025, + -1.6, + -0.3, + 2.025, + -1.5, + -0.3, + 2.25, + -1.5, + 0, + 2.25, + -2.3, + 0, + 2.025, + -2.3, + -0.3, + 2.025, + -2.5, + -0.3, + 2.25, + -2.5, + 0, + 2.25, + -2.7, + 0, + 2.025, + -2.7, + -0.3, + 2.025, + -3, + -0.3, + 2.25, + -3, + 0, + 2.25, + -2.7, + 0, + 1.8, + -2.7, + -0.3, + 1.8, + -3, + -0.3, + 1.8, + -3, + 0, + 1.8, + -1.5, + 0.3, + 2.25, + -1.6, + 0.3, + 2.025, + -2.5, + 0.3, + 2.25, + -2.3, + 0.3, + 2.025, + -3, + 0.3, + 2.25, + -2.7, + 0.3, + 2.025, + -3, + 0.3, + 1.8, + -2.7, + 0.3, + 1.8, + -2.7, + 0, + 1.575, + -2.7, + -0.3, + 1.575, + -3, + -0.3, + 1.35, + -3, + 0, + 1.35, + -2.5, + 0, + 1.125, + -2.5, + -0.3, + 1.125, + -2.65, + -0.3, + 0.9375, + -2.65, + 0, + 0.9375, + -2, + -0.3, + 0.9, + -1.9, + -0.3, + 0.6, + -1.9, + 0, + 0.6, + -3, + 0.3, + 1.35, + -2.7, + 0.3, + 1.575, + -2.65, + 0.3, + 0.9375, + -2.5, + 0.3, + 1.125, + -1.9, + 0.3, + 0.6, + -2, + 0.3, + 0.9, + 1.7, + 0, + 1.425, + 1.7, + -0.66, + 1.425, + 1.7, + -0.66, + 0.6, + 1.7, + 0, + 0.6, + 2.6, + 0, + 1.425, + 2.6, + -0.66, + 1.425, + 3.1, + -0.66, + 0.825, + 3.1, + 0, + 0.825, + 2.3, + 0, + 2.1, + 2.3, + -0.25, + 2.1, + 2.4, + -0.25, + 2.025, + 2.4, + 0, + 2.025, + 2.7, + 0, + 2.4, + 2.7, + -0.25, + 2.4, + 3.3, + -0.25, + 2.4, + 3.3, + 0, + 2.4, + 1.7, + 0.66, + 0.6, + 1.7, + 0.66, + 1.425, + 3.1, + 0.66, + 0.825, + 2.6, + 0.66, + 1.425, + 2.4, + 0.25, + 2.025, + 2.3, + 0.25, + 2.1, + 3.3, + 0.25, + 2.4, + 2.7, + 0.25, + 2.4, + 2.8, + 0, + 2.475, + 2.8, + -0.25, + 2.475, + 3.525, + -0.25, + 2.49375, + 3.525, + 0, + 2.49375, + 2.9, + 0, + 2.475, + 2.9, + -0.15, + 2.475, + 3.45, + -0.15, + 2.5125, + 3.45, + 0, + 2.5125, + 2.8, + 0, + 2.4, + 2.8, + -0.15, + 2.4, + 3.2, + -0.15, + 2.4, + 3.2, + 0, + 2.4, + 3.525, + 0.25, + 2.49375, + 2.8, + 0.25, + 2.475, + 3.45, + 0.15, + 2.5125, + 2.9, + 0.15, + 2.475, + 3.2, + 0.15, + 2.4, + 2.8, + 0.15, + 2.4, + 0, + 0, + 3.15, + 0.8, + 0, + 3.15, + 0.8, + -0.45, + 3.15, + 0.45, + -0.8, + 3.15, + 0, + -0.8, + 3.15, + 0, + 0, + 2.85, + 0.2, + 0, + 2.7, + 0.2, + -0.112, + 2.7, + 0.112, + -0.2, + 2.7, + 0, + -0.2, + 2.7, + -0.45, + -0.8, + 3.15, + -0.8, + -0.45, + 3.15, + -0.8, + 0, + 3.15, + -0.112, + -0.2, + 2.7, + -0.2, + -0.112, + 2.7, + -0.2, + 0, + 2.7, + -0.8, + 0.45, + 3.15, + -0.45, + 0.8, + 3.15, + 0, + 0.8, + 3.15, + -0.2, + 0.112, + 2.7, + -0.112, + 0.2, + 2.7, + 0, + 0.2, + 2.7, + 0.45, + 0.8, + 3.15, + 0.8, + 0.45, + 3.15, + 0.112, + 0.2, + 2.7, + 0.2, + 0.112, + 2.7, + 0.4, + 0, + 2.55, + 0.4, + -0.224, + 2.55, + 0.224, + -0.4, + 2.55, + 0, + -0.4, + 2.55, + 1.3, + 0, + 2.55, + 1.3, + -0.728, + 2.55, + 0.728, + -1.3, + 2.55, + 0, + -1.3, + 2.55, + 1.3, + 0, + 2.4, + 1.3, + -0.728, + 2.4, + 0.728, + -1.3, + 2.4, + 0, + -1.3, + 2.4, + -0.224, + -0.4, + 2.55, + -0.4, + -0.224, + 2.55, + -0.4, + 0, + 2.55, + -0.728, + -1.3, + 2.55, + -1.3, + -0.728, + 2.55, + -1.3, + 0, + 2.55, + -0.728, + -1.3, + 2.4, + -1.3, + -0.728, + 2.4, + -1.3, + 0, + 2.4, + -0.4, + 0.224, + 2.55, + -0.224, + 0.4, + 2.55, + 0, + 0.4, + 2.55, + -1.3, + 0.728, + 2.55, + -0.728, + 1.3, + 2.55, + 0, + 1.3, + 2.55, + -1.3, + 0.728, + 2.4, + -0.728, + 1.3, + 2.4, + 0, + 1.3, + 2.4, + 0.224, + 0.4, + 2.55, + 0.4, + 0.224, + 2.55, + 0.728, + 1.3, + 2.55, + 1.3, + 0.728, + 2.55, + 0.728, + 1.3, + 2.4, + 1.3, + 0.728, + 2.4, + 0, + 0, + 0, + 1.425, + 0, + 0, + 1.425, + 0.798, + 0, + 0.798, + 1.425, + 0, + 0, + 1.425, + 0, + 1.5, + 0, + 0.075, + 1.5, + 0.84, + 0.075, + 0.84, + 1.5, + 0.075, + 0, + 1.5, + 0.075, + -0.798, + 1.425, + 0, + -1.425, + 0.798, + 0, + -1.425, + 0, + 0, + -0.84, + 1.5, + 0.075, + -1.5, + 0.84, + 0.075, + -1.5, + 0, + 0.075, + -1.425, + -0.798, + 0, + -0.798, + -1.425, + 0, + 0, + -1.425, + 0, + -1.5, + -0.84, + 0.075, + -0.84, + -1.5, + 0.075, + 0, + -1.5, + 0.075, + 0.798, + -1.425, + 0, + 1.425, + -0.798, + 0, + 0.84, + -1.5, + 0.075, + 1.5, + -0.84, + 0.075 + ]; + super(); + segments = Math.max(2, Math.floor(segments)); + const blinnScale = 1.3; + const maxHeight = 3.15 * (blinn ? 1 : blinnScale); + const maxHeight2 = maxHeight / 2; + const trueSize = size2 / maxHeight2; + let numTriangles = bottom ? (8 * segments - 4) * segments : 0; + numTriangles += lid ? (16 * segments - 4) * segments : 0; + numTriangles += body ? 40 * segments * segments : 0; + const indices = new Uint32Array(numTriangles * 3); + let numVertices = bottom ? 4 : 0; + numVertices += lid ? 8 : 0; + numVertices += body ? 20 : 0; + numVertices *= (segments + 1) * (segments + 1); + const vertices = new Float32Array(numVertices * 3); + const normals = new Float32Array(numVertices * 3); + const uvs = new Float32Array(numVertices * 2); + const ms = new Matrix4(); + ms.set( + -1, + 3, + -3, + 1, + 3, + -6, + 3, + 0, + -3, + 3, + 0, + 0, + 1, + 0, + 0, + 0 + ); + const g2 = []; + const sp = []; + const tp = []; + const dsp = []; + const dtp = []; + const mgm = []; + const vert = []; + const sdir = []; + const tdir = []; + const norm = new Vector3(); + let tcoord; + let sval; + let tval; + let p2; + let dsval = 0; + let dtval = 0; + const normOut = new Vector3(); + const gmx = new Matrix4(); + const tmtx = new Matrix4(); + const vsp = new Vector4(); + const vtp = new Vector4(); + const vdsp = new Vector4(); + const vdtp = new Vector4(); + const vsdir = new Vector3(); + const vtdir = new Vector3(); + const mst = ms.clone(); + mst.transpose(); + const notDegenerate = (vtx1, vtx2, vtx3) => ( + // if any vertex matches, return false + !(vertices[vtx1 * 3] === vertices[vtx2 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx2 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx2 * 3 + 2] || vertices[vtx1 * 3] === vertices[vtx3 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx3 * 3 + 2] || vertices[vtx2 * 3] === vertices[vtx3 * 3] && vertices[vtx2 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx2 * 3 + 2] === vertices[vtx3 * 3 + 2]) + ); + for (let i = 0; i < 3; i++) { + mgm[i] = new Matrix4(); + } + const minPatches = body ? 0 : 20; + const maxPatches = bottom ? 32 : 28; + const vertPerRow = segments + 1; + let surfCount = 0; + let vertCount = 0; + let normCount = 0; + let uvCount = 0; + let indexCount = 0; + for (let surf = minPatches; surf < maxPatches; surf++) { + if (lid || (surf < 20 || surf >= 28)) { + for (let i = 0; i < 3; i++) { + for (let r = 0; r < 4; r++) { + for (let c2 = 0; c2 < 4; c2++) { + g2[c2 * 4 + r] = teapotVertices[teapotPatches[surf * 16 + r * 4 + c2] * 3 + i]; + if (fitLid && (surf >= 20 && surf < 28) && i !== 2) { + g2[c2 * 4 + r] *= 1.077; + } + if (!blinn && i === 2) { + g2[c2 * 4 + r] *= blinnScale; + } + } + } + gmx.set(g2[0], g2[1], g2[2], g2[3], g2[4], g2[5], g2[6], g2[7], g2[8], g2[9], g2[10], g2[11], g2[12], g2[13], g2[14], g2[15]); + tmtx.multiplyMatrices(gmx, ms); + mgm[i].multiplyMatrices(mst, tmtx); + } + for (let sstep = 0; sstep <= segments; sstep++) { + const s = sstep / segments; + for (let tstep = 0; tstep <= segments; tstep++) { + const t3 = tstep / segments; + for (p2 = 4, sval = tval = 1; p2--; ) { + sp[p2] = sval; + tp[p2] = tval; + sval *= s; + tval *= t3; + if (p2 === 3) { + dsp[p2] = dtp[p2] = 0; + dsval = dtval = 1; + } else { + dsp[p2] = dsval * (3 - p2); + dtp[p2] = dtval * (3 - p2); + dsval *= s; + dtval *= t3; + } + } + vsp.fromArray(sp); + vtp.fromArray(tp); + vdsp.fromArray(dsp); + vdtp.fromArray(dtp); + for (let i = 0; i < 3; i++) { + tcoord = vsp.clone(); + tcoord.applyMatrix4(mgm[i]); + vert[i] = tcoord.dot(vtp); + tcoord = vdsp.clone(); + tcoord.applyMatrix4(mgm[i]); + sdir[i] = tcoord.dot(vtp); + tcoord = vsp.clone(); + tcoord.applyMatrix4(mgm[i]); + tdir[i] = tcoord.dot(vdtp); + } + vsdir.fromArray(sdir); + vtdir.fromArray(tdir); + norm.crossVectors(vtdir, vsdir); + norm.normalize(); + if (vert[0] === 0 && vert[1] === 0) { + normOut.set(0, vert[2] > maxHeight2 ? 1 : -1, 0); + } else { + normOut.set(norm.x, norm.z, -norm.y); + } + vertices[vertCount++] = trueSize * vert[0]; + vertices[vertCount++] = trueSize * (vert[2] - maxHeight2); + vertices[vertCount++] = -trueSize * vert[1]; + normals[normCount++] = normOut.x; + normals[normCount++] = normOut.y; + normals[normCount++] = normOut.z; + uvs[uvCount++] = 1 - t3; + uvs[uvCount++] = 1 - s; + } + } + for (let sstep = 0; sstep < segments; sstep++) { + for (let tstep = 0; tstep < segments; tstep++) { + const v12 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep; + const v2 = v12 + 1; + const v3 = v2 + vertPerRow; + const v4 = v12 + vertPerRow; + if (notDegenerate(v12, v2, v3)) { + indices[indexCount++] = v12; + indices[indexCount++] = v2; + indices[indexCount++] = v3; + } + if (notDegenerate(v12, v3, v4)) { + indices[indexCount++] = v12; + indices[indexCount++] = v3; + indices[indexCount++] = v4; + } + } + } + surfCount++; + } + } + this.setIndex(new BufferAttribute(indices, 1)); + this.setAttribute("position", new BufferAttribute(vertices, 3)); + this.setAttribute("normal", new BufferAttribute(normals, 3)); + this.setAttribute("uv", new BufferAttribute(uvs, 2)); + this.computeBoundingSphere(); + } +}; + +// node_modules/three/examples/jsm/geometries/TextGeometry.js +var TextGeometry = class extends ExtrudeGeometry { + constructor(text2, parameters = {}) { + const font = parameters.font; + if (font === void 0) { + super(); + } else { + const shapes = font.generateShapes(text2, parameters.size); + if (parameters.depth === void 0 && parameters.height !== void 0) { + console.warn("THREE.TextGeometry: .height is now depreciated. Please use .depth instead"); + } + parameters.depth = parameters.depth !== void 0 ? parameters.depth : parameters.height !== void 0 ? parameters.height : 50; + if (parameters.bevelThickness === void 0) parameters.bevelThickness = 10; + if (parameters.bevelSize === void 0) parameters.bevelSize = 8; + if (parameters.bevelEnabled === void 0) parameters.bevelEnabled = false; + super(shapes, parameters); + } + this.type = "TextGeometry"; + } +}; + +// node_modules/three/examples/jsm/helpers/LightProbeHelper.js +var LightProbeHelper = class extends Mesh { + constructor(lightProbe, size2) { + const material = new ShaderMaterial({ + type: "LightProbeHelperMaterial", + uniforms: { + sh: { value: lightProbe.sh.coefficients }, + // by reference + intensity: { value: lightProbe.intensity } + }, + vertexShader: [ + "varying vec3 vNormal;", + "void main() {", + " vNormal = normalize( normalMatrix * normal );", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "#define RECIPROCAL_PI 0.318309886", + "vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {", + " // matrix is assumed to be orthogonal", + " return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );", + "}", + "// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf", + "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", + " // normal is assumed to have unit length", + " float x = normal.x, y = normal.y, z = normal.z;", + " // band 0", + " vec3 result = shCoefficients[ 0 ] * 0.886227;", + " // band 1", + " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", + " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", + " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", + " // band 2", + " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", + " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", + " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", + " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", + " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", + " return result;", + "}", + "uniform vec3 sh[ 9 ]; // sh coefficients", + "uniform float intensity; // light probe intensity", + "varying vec3 vNormal;", + "void main() {", + " vec3 normal = normalize( vNormal );", + " vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );", + " vec3 irradiance = shGetIrradianceAt( worldNormal, sh );", + " vec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;", + " gl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );", + "}" + ].join("\n") + }); + const geometry = new SphereGeometry(1, 32, 16); + super(geometry, material); + this.lightProbe = lightProbe; + this.size = size2; + this.type = "LightProbeHelper"; + this.onBeforeRender(); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } + onBeforeRender() { + this.position.copy(this.lightProbe.position); + this.scale.set(1, 1, 1).multiplyScalar(this.size); + this.material.uniforms.intensity.value = this.lightProbe.intensity; + } +}; + +// node_modules/three/examples/jsm/helpers/OctreeHelper.js +var OctreeHelper = class extends LineSegments { + constructor(octree, color = 16776960) { + super(new BufferGeometry(), new LineBasicMaterial({ color, toneMapped: false })); + this.octree = octree; + this.color = color; + this.type = "OctreeHelper"; + this.update(); + } + update() { + const vertices = []; + function traverse(tree) { + for (let i = 0; i < tree.length; i++) { + const min = tree[i].box.min; + const max2 = tree[i].box.max; + vertices.push(max2.x, max2.y, max2.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, max2.y, max2.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, min.y, min.z); + vertices.push(min.x, min.y, min.z); + vertices.push(max2.x, min.y, min.z); + vertices.push(max2.x, min.y, min.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(max2.x, max2.y, max2.z); + vertices.push(max2.x, max2.y, min.z); + vertices.push(min.x, max2.y, max2.z); + vertices.push(min.x, max2.y, min.z); + vertices.push(min.x, min.y, max2.z); + vertices.push(min.x, min.y, min.z); + vertices.push(max2.x, min.y, max2.z); + vertices.push(max2.x, min.y, min.z); + traverse(tree[i].subTrees); + } + } + traverse(this.octree.subTrees); + this.geometry.dispose(); + this.geometry = new BufferGeometry(); + this.geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js +var PositionalAudioHelper = class extends Line { + constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) { + const geometry = new BufferGeometry(); + const divisions = divisionsInnerAngle + divisionsOuterAngle * 2; + const positions = new Float32Array((divisions * 3 + 3) * 3); + geometry.setAttribute("position", new BufferAttribute(positions, 3)); + const materialInnerAngle = new LineBasicMaterial({ color: 65280 }); + const materialOuterAngle = new LineBasicMaterial({ color: 16776960 }); + super(geometry, [materialOuterAngle, materialInnerAngle]); + this.audio = audio; + this.range = range; + this.divisionsInnerAngle = divisionsInnerAngle; + this.divisionsOuterAngle = divisionsOuterAngle; + this.type = "PositionalAudioHelper"; + this.update(); + } + update() { + const audio = this.audio; + const range = this.range; + const divisionsInnerAngle = this.divisionsInnerAngle; + const divisionsOuterAngle = this.divisionsOuterAngle; + const coneInnerAngle = MathUtils.degToRad(audio.panner.coneInnerAngle); + const coneOuterAngle = MathUtils.degToRad(audio.panner.coneOuterAngle); + const halfConeInnerAngle = coneInnerAngle / 2; + const halfConeOuterAngle = coneOuterAngle / 2; + let start = 0; + let count = 0; + let i; + let stride; + const geometry = this.geometry; + const positionAttribute = geometry.attributes.position; + geometry.clearGroups(); + function generateSegment(from, to, divisions, materialIndex) { + const step = (to - from) / divisions; + positionAttribute.setXYZ(start, 0, 0, 0); + count++; + for (i = from; i < to; i += step) { + stride = start + count; + positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range); + positionAttribute.setXYZ(stride + 1, Math.sin(Math.min(i + step, to)) * range, 0, Math.cos(Math.min(i + step, to)) * range); + positionAttribute.setXYZ(stride + 2, 0, 0, 0); + count += 3; + } + geometry.addGroup(start, count, materialIndex); + start += count; + count = 0; + } + generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0); + generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1); + generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0); + positionAttribute.needsUpdate = true; + if (coneInnerAngle === coneOuterAngle) this.material[0].visible = false; + } + dispose() { + this.geometry.dispose(); + this.material[0].dispose(); + this.material[1].dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js +var RectAreaLightHelper = class extends Line { + constructor(light, color) { + const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0]; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.computeBoundingSphere(); + const material = new LineBasicMaterial({ fog: false }); + super(geometry, material); + this.light = light; + this.color = color; + this.type = "RectAreaLightHelper"; + const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0]; + const geometry2 = new BufferGeometry(); + geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); + geometry2.computeBoundingSphere(); + this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false }))); + } + updateMatrixWorld() { + this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1); + if (this.color !== void 0) { + this.material.color.set(this.color); + this.children[0].material.color.set(this.color); + } else { + this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity); + const c2 = this.material.color; + const max2 = Math.max(c2.r, c2.g, c2.b); + if (max2 > 1) c2.multiplyScalar(1 / max2); + this.children[0].material.color.copy(this.material.color); + } + this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld); + this.children[0].matrixWorld.copy(this.matrixWorld); + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + this.children[0].geometry.dispose(); + this.children[0].material.dispose(); + } +}; + +// node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +var BufferGeometryUtils_exports = {}; +__export(BufferGeometryUtils_exports, { + computeMikkTSpaceTangents: () => computeMikkTSpaceTangents, + computeMorphedAttributes: () => computeMorphedAttributes, + deepCloneAttribute: () => deepCloneAttribute, + deinterleaveAttribute: () => deinterleaveAttribute, + deinterleaveGeometry: () => deinterleaveGeometry, + estimateBytesUsed: () => estimateBytesUsed, + interleaveAttributes: () => interleaveAttributes, + mergeAttributes: () => mergeAttributes, + mergeGeometries: () => mergeGeometries, + mergeGroups: () => mergeGroups, + mergeVertices: () => mergeVertices, + toCreasedNormals: () => toCreasedNormals, + toTrianglesDrawMode: () => toTrianglesDrawMode +}); +function computeMikkTSpaceTangents(geometry, MikkTSpace, negateSign = true) { + if (!MikkTSpace || !MikkTSpace.isReady) { + throw new Error("BufferGeometryUtils: Initialized MikkTSpace library required."); + } + if (!geometry.hasAttribute("position") || !geometry.hasAttribute("normal") || !geometry.hasAttribute("uv")) { + throw new Error('BufferGeometryUtils: Tangents require "position", "normal", and "uv" attributes.'); + } + function getAttributeArray(attribute) { + if (attribute.normalized || attribute.isInterleavedBufferAttribute) { + const dstArray = new Float32Array(attribute.count * attribute.itemSize); + for (let i = 0, j = 0; i < attribute.count; i++) { + dstArray[j++] = attribute.getX(i); + dstArray[j++] = attribute.getY(i); + if (attribute.itemSize > 2) { + dstArray[j++] = attribute.getZ(i); + } + } + return dstArray; + } + if (attribute.array instanceof Float32Array) { + return attribute.array; + } + return new Float32Array(attribute.array); + } + const _geometry2 = geometry.index ? geometry.toNonIndexed() : geometry; + const tangents = MikkTSpace.generateTangents( + getAttributeArray(_geometry2.attributes.position), + getAttributeArray(_geometry2.attributes.normal), + getAttributeArray(_geometry2.attributes.uv) + ); + if (negateSign) { + for (let i = 3; i < tangents.length; i += 4) { + tangents[i] *= -1; + } + } + _geometry2.setAttribute("tangent", new BufferAttribute(tangents, 4)); + if (geometry !== _geometry2) { + geometry.copy(_geometry2); + } + return geometry; +} +function mergeGeometries(geometries, useGroups = false) { + const isIndexed = geometries[0].index !== null; + const attributesUsed = new Set(Object.keys(geometries[0].attributes)); + const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes)); + const attributes = {}; + const morphAttributes = {}; + const morphTargetsRelative = geometries[0].morphTargetsRelative; + const mergedGeometry = new BufferGeometry(); + let offset = 0; + for (let i = 0; i < geometries.length; ++i) { + const geometry = geometries[i]; + let attributesCount = 0; + if (isIndexed !== (geometry.index !== null)) { + console.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."); + return null; + } + for (const name2 in geometry.attributes) { + if (!attributesUsed.has(name2)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + '. All geometries must have compatible attributes; make sure "' + name2 + '" attribute exists among all geometries, or in none of them.'); + return null; + } + if (attributes[name2] === void 0) attributes[name2] = []; + attributes[name2].push(geometry.attributes[name2]); + attributesCount++; + } + if (attributesCount !== attributesUsed.size) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". Make sure all geometries have the same number of attributes."); + return null; + } + if (morphTargetsRelative !== geometry.morphTargetsRelative) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphTargetsRelative must be consistent throughout all geometries."); + return null; + } + for (const name2 in geometry.morphAttributes) { + if (!morphAttributesUsed.has(name2)) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". .morphAttributes must be consistent throughout all geometries."); + return null; + } + if (morphAttributes[name2] === void 0) morphAttributes[name2] = []; + morphAttributes[name2].push(geometry.morphAttributes[name2]); + } + if (useGroups) { + let count; + if (isIndexed) { + count = geometry.index.count; + } else if (geometry.attributes.position !== void 0) { + count = geometry.attributes.position.count; + } else { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + i + ". The geometry must have either an index or a position attribute"); + return null; + } + mergedGeometry.addGroup(offset, count, i); + offset += count; + } + } + if (isIndexed) { + let indexOffset = 0; + const mergedIndex = []; + for (let i = 0; i < geometries.length; ++i) { + const index2 = geometries[i].index; + for (let j = 0; j < index2.count; ++j) { + mergedIndex.push(index2.getX(j) + indexOffset); + } + indexOffset += geometries[i].attributes.position.count; + } + mergedGeometry.setIndex(mergedIndex); + } + for (const name2 in attributes) { + const mergedAttribute = mergeAttributes(attributes[name2]); + if (!mergedAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name2 + " attribute."); + return null; + } + mergedGeometry.setAttribute(name2, mergedAttribute); + } + for (const name2 in morphAttributes) { + const numMorphTargets = morphAttributes[name2][0].length; + if (numMorphTargets === 0) break; + mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {}; + mergedGeometry.morphAttributes[name2] = []; + for (let i = 0; i < numMorphTargets; ++i) { + const morphAttributesToMerge = []; + for (let j = 0; j < morphAttributes[name2].length; ++j) { + morphAttributesToMerge.push(morphAttributes[name2][j][i]); + } + const mergedMorphAttribute = mergeAttributes(morphAttributesToMerge); + if (!mergedMorphAttribute) { + console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + name2 + " morphAttribute."); + return null; + } + mergedGeometry.morphAttributes[name2].push(mergedMorphAttribute); + } + } + return mergedGeometry; +} +function mergeAttributes(attributes) { + let TypedArray; + let itemSize; + let normalized; + let gpuType = -1; + let arrayLength = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."); + return null; + } + if (itemSize === void 0) itemSize = attribute.itemSize; + if (itemSize !== attribute.itemSize) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."); + return null; + } + if (normalized === void 0) normalized = attribute.normalized; + if (normalized !== attribute.normalized) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."); + return null; + } + if (gpuType === -1) gpuType = attribute.gpuType; + if (gpuType !== attribute.gpuType) { + console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."); + return null; + } + arrayLength += attribute.count * itemSize; + } + const array = new TypedArray(arrayLength); + const result = new BufferAttribute(array, itemSize, normalized); + let offset = 0; + for (let i = 0; i < attributes.length; ++i) { + const attribute = attributes[i]; + if (attribute.isInterleavedBufferAttribute) { + const tupleOffset = offset / itemSize; + for (let j = 0, l2 = attribute.count; j < l2; j++) { + for (let c2 = 0; c2 < itemSize; c2++) { + const value2 = attribute.getComponent(j, c2); + result.setComponent(j + tupleOffset, c2, value2); + } + } + } else { + array.set(attribute.array, offset); + } + offset += attribute.count * itemSize; + } + if (gpuType !== void 0) { + result.gpuType = gpuType; + } + return result; +} +function deepCloneAttribute(attribute) { + if (attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute) { + return deinterleaveAttribute(attribute); + } + if (attribute.isInstancedBufferAttribute) { + return new InstancedBufferAttribute().copy(attribute); + } + return new BufferAttribute().copy(attribute); +} +function interleaveAttributes(attributes) { + let TypedArray; + let arrayLength = 0; + let stride = 0; + for (let i = 0, l2 = attributes.length; i < l2; ++i) { + const attribute = attributes[i]; + if (TypedArray === void 0) TypedArray = attribute.array.constructor; + if (TypedArray !== attribute.array.constructor) { + console.error("AttributeBuffers of different types cannot be interleaved"); + return null; + } + arrayLength += attribute.array.length; + stride += attribute.itemSize; + } + const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride); + let offset = 0; + const res = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let j = 0, l2 = attributes.length; j < l2; j++) { + const attribute = attributes[j]; + const itemSize = attribute.itemSize; + const count = attribute.count; + const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized); + res.push(iba); + offset += itemSize; + for (let c2 = 0; c2 < count; c2++) { + for (let k2 = 0; k2 < itemSize; k2++) { + iba[setters[k2]](c2, attribute[getters[k2]](c2)); + } + } + } + return res; +} +function deinterleaveAttribute(attribute) { + const cons = attribute.data.array.constructor; + const count = attribute.count; + const itemSize = attribute.itemSize; + const normalized = attribute.normalized; + const array = new cons(count * itemSize); + let newAttribute; + if (attribute.isInstancedInterleavedBufferAttribute) { + newAttribute = new InstancedBufferAttribute(array, itemSize, normalized, attribute.meshPerAttribute); + } else { + newAttribute = new BufferAttribute(array, itemSize, normalized); + } + for (let i = 0; i < count; i++) { + newAttribute.setX(i, attribute.getX(i)); + if (itemSize >= 2) { + newAttribute.setY(i, attribute.getY(i)); + } + if (itemSize >= 3) { + newAttribute.setZ(i, attribute.getZ(i)); + } + if (itemSize >= 4) { + newAttribute.setW(i, attribute.getW(i)); + } + } + return newAttribute; +} +function deinterleaveGeometry(geometry) { + const attributes = geometry.attributes; + const morphTargets = geometry.morphTargets; + const attrMap = /* @__PURE__ */ new Map(); + for (const key2 in attributes) { + const attr = attributes[key2]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + attributes[key2] = attrMap.get(attr); + } + } + for (const key2 in morphTargets) { + const attr = morphTargets[key2]; + if (attr.isInterleavedBufferAttribute) { + if (!attrMap.has(attr)) { + attrMap.set(attr, deinterleaveAttribute(attr)); + } + morphTargets[key2] = attrMap.get(attr); + } + } +} +function estimateBytesUsed(geometry) { + let mem = 0; + for (const name2 in geometry.attributes) { + const attr = geometry.getAttribute(name2); + mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT; + } + const indices = geometry.getIndex(); + mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0; + return mem; +} +function mergeVertices(geometry, tolerance = 1e-4) { + tolerance = Math.max(tolerance, Number.EPSILON); + const hashToIndex = {}; + const indices = geometry.getIndex(); + const positions = geometry.getAttribute("position"); + const vertexCount = indices ? indices.count : positions.count; + let nextIndex = 0; + const attributeNames = Object.keys(geometry.attributes); + const tmpAttributes = {}; + const tmpMorphAttributes = {}; + const newIndices = []; + const getters = ["getX", "getY", "getZ", "getW"]; + const setters = ["setX", "setY", "setZ", "setW"]; + for (let i = 0, l2 = attributeNames.length; i < l2; i++) { + const name2 = attributeNames[i]; + const attr = geometry.attributes[name2]; + tmpAttributes[name2] = new attr.constructor( + new attr.array.constructor(attr.count * attr.itemSize), + attr.itemSize, + attr.normalized + ); + const morphAttributes = geometry.morphAttributes[name2]; + if (morphAttributes) { + if (!tmpMorphAttributes[name2]) tmpMorphAttributes[name2] = []; + morphAttributes.forEach((morphAttr, i2) => { + const array = new morphAttr.array.constructor(morphAttr.count * morphAttr.itemSize); + tmpMorphAttributes[name2][i2] = new morphAttr.constructor(array, morphAttr.itemSize, morphAttr.normalized); + }); + } + } + const halfTolerance = tolerance * 0.5; + const exponent = Math.log10(1 / tolerance); + const hashMultiplier = Math.pow(10, exponent); + const hashAdditive = halfTolerance * hashMultiplier; + for (let i = 0; i < vertexCount; i++) { + const index2 = indices ? indices.getX(i) : i; + let hash = ""; + for (let j = 0, l2 = attributeNames.length; j < l2; j++) { + const name2 = attributeNames[j]; + const attribute = geometry.getAttribute(name2); + const itemSize = attribute.itemSize; + for (let k2 = 0; k2 < itemSize; k2++) { + hash += `${~~(attribute[getters[k2]](index2) * hashMultiplier + hashAdditive)},`; + } + } + if (hash in hashToIndex) { + newIndices.push(hashToIndex[hash]); + } else { + for (let j = 0, l2 = attributeNames.length; j < l2; j++) { + const name2 = attributeNames[j]; + const attribute = geometry.getAttribute(name2); + const morphAttributes = geometry.morphAttributes[name2]; + const itemSize = attribute.itemSize; + const newArray = tmpAttributes[name2]; + const newMorphArrays = tmpMorphAttributes[name2]; + for (let k2 = 0; k2 < itemSize; k2++) { + const getterFunc = getters[k2]; + const setterFunc = setters[k2]; + newArray[setterFunc](nextIndex, attribute[getterFunc](index2)); + if (morphAttributes) { + for (let m = 0, ml = morphAttributes.length; m < ml; m++) { + newMorphArrays[m][setterFunc](nextIndex, morphAttributes[m][getterFunc](index2)); + } + } + } + } + hashToIndex[hash] = nextIndex; + newIndices.push(nextIndex); + nextIndex++; + } + } + const result = geometry.clone(); + for (const name2 in geometry.attributes) { + const tmpAttribute = tmpAttributes[name2]; + result.setAttribute(name2, new tmpAttribute.constructor( + tmpAttribute.array.slice(0, nextIndex * tmpAttribute.itemSize), + tmpAttribute.itemSize, + tmpAttribute.normalized + )); + if (!(name2 in tmpMorphAttributes)) continue; + for (let j = 0; j < tmpMorphAttributes[name2].length; j++) { + const tmpMorphAttribute = tmpMorphAttributes[name2][j]; + result.morphAttributes[name2][j] = new tmpMorphAttribute.constructor( + tmpMorphAttribute.array.slice(0, nextIndex * tmpMorphAttribute.itemSize), + tmpMorphAttribute.itemSize, + tmpMorphAttribute.normalized + ); + } + } + result.setIndex(newIndices); + return result; +} +function toTrianglesDrawMode(geometry, drawMode) { + if (drawMode === TrianglesDrawMode) { + console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); + return geometry; + } + if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) { + let index2 = geometry.getIndex(); + if (index2 === null) { + const indices = []; + const position2 = geometry.getAttribute("position"); + if (position2 !== void 0) { + for (let i = 0; i < position2.count; i++) { + indices.push(i); + } + geometry.setIndex(indices); + index2 = geometry.getIndex(); + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); + return geometry; + } + } + const numberOfTriangles = index2.count - 2; + const newIndices = []; + if (drawMode === TriangleFanDrawMode) { + for (let i = 1; i <= numberOfTriangles; i++) { + newIndices.push(index2.getX(0)); + newIndices.push(index2.getX(i)); + newIndices.push(index2.getX(i + 1)); + } + } else { + for (let i = 0; i < numberOfTriangles; i++) { + if (i % 2 === 0) { + newIndices.push(index2.getX(i)); + newIndices.push(index2.getX(i + 1)); + newIndices.push(index2.getX(i + 2)); + } else { + newIndices.push(index2.getX(i + 2)); + newIndices.push(index2.getX(i + 1)); + newIndices.push(index2.getX(i)); + } + } + } + if (newIndices.length / 3 !== numberOfTriangles) { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + } + const newGeometry = geometry.clone(); + newGeometry.setIndex(newIndices); + newGeometry.clearGroups(); + return newGeometry; + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); + return geometry; + } +} +function computeMorphedAttributes(object) { + const _vA2 = new Vector3(); + const _vB2 = new Vector3(); + const _vC2 = new Vector3(); + const _tempA = new Vector3(); + const _tempB = new Vector3(); + const _tempC = new Vector3(); + const _morphA = new Vector3(); + const _morphB = new Vector3(); + const _morphC = new Vector3(); + function _calculateMorphedAttributeData(object2, attribute, morphAttribute, morphTargetsRelative2, a3, b5, c3, modifiedAttributeArray) { + _vA2.fromBufferAttribute(attribute, a3); + _vB2.fromBufferAttribute(attribute, b5); + _vC2.fromBufferAttribute(attribute, c3); + const morphInfluences = object2.morphTargetInfluences; + if (morphAttribute && morphInfluences) { + _morphA.set(0, 0, 0); + _morphB.set(0, 0, 0); + _morphC.set(0, 0, 0); + for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) { + const influence = morphInfluences[i2]; + const morph = morphAttribute[i2]; + if (influence === 0) continue; + _tempA.fromBufferAttribute(morph, a3); + _tempB.fromBufferAttribute(morph, b5); + _tempC.fromBufferAttribute(morph, c3); + if (morphTargetsRelative2) { + _morphA.addScaledVector(_tempA, influence); + _morphB.addScaledVector(_tempB, influence); + _morphC.addScaledVector(_tempC, influence); + } else { + _morphA.addScaledVector(_tempA.sub(_vA2), influence); + _morphB.addScaledVector(_tempB.sub(_vB2), influence); + _morphC.addScaledVector(_tempC.sub(_vC2), influence); + } + } + _vA2.add(_morphA); + _vB2.add(_morphB); + _vC2.add(_morphC); + } + if (object2.isSkinnedMesh) { + object2.applyBoneTransform(a3, _vA2); + object2.applyBoneTransform(b5, _vB2); + object2.applyBoneTransform(c3, _vC2); + } + modifiedAttributeArray[a3 * 3 + 0] = _vA2.x; + modifiedAttributeArray[a3 * 3 + 1] = _vA2.y; + modifiedAttributeArray[a3 * 3 + 2] = _vA2.z; + modifiedAttributeArray[b5 * 3 + 0] = _vB2.x; + modifiedAttributeArray[b5 * 3 + 1] = _vB2.y; + modifiedAttributeArray[b5 * 3 + 2] = _vB2.z; + modifiedAttributeArray[c3 * 3 + 0] = _vC2.x; + modifiedAttributeArray[c3 * 3 + 1] = _vC2.y; + modifiedAttributeArray[c3 * 3 + 2] = _vC2.z; + } + const geometry = object.geometry; + const material = object.material; + let a2, b3, c2; + const index2 = geometry.index; + const positionAttribute = geometry.attributes.position; + const morphPosition = geometry.morphAttributes.position; + const morphTargetsRelative = geometry.morphTargetsRelative; + const normalAttribute = geometry.attributes.normal; + const morphNormal = geometry.morphAttributes.position; + const groups = geometry.groups; + const drawRange = geometry.drawRange; + let i, j, il, jl; + let group; + let start, end; + const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize); + const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize); + if (index2 !== null) { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a2 = index2.getX(j); + b3 = index2.getX(j + 1); + c2 = index2.getX(j + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a2, + b3, + c2, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a2, + b3, + c2, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(index2.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a2 = index2.getX(i); + b3 = index2.getX(i + 1); + c2 = index2.getX(i + 2); + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a2, + b3, + c2, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a2, + b3, + c2, + modifiedNormal + ); + } + } + } else { + if (Array.isArray(material)) { + for (i = 0, il = groups.length; i < il; i++) { + group = groups[i]; + start = Math.max(group.start, drawRange.start); + end = Math.min(group.start + group.count, drawRange.start + drawRange.count); + for (j = start, jl = end; j < jl; j += 3) { + a2 = j; + b3 = j + 1; + c2 = j + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a2, + b3, + c2, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a2, + b3, + c2, + modifiedNormal + ); + } + } + } else { + start = Math.max(0, drawRange.start); + end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); + for (i = start, il = end; i < il; i += 3) { + a2 = i; + b3 = i + 1; + c2 = i + 2; + _calculateMorphedAttributeData( + object, + positionAttribute, + morphPosition, + morphTargetsRelative, + a2, + b3, + c2, + modifiedPosition + ); + _calculateMorphedAttributeData( + object, + normalAttribute, + morphNormal, + morphTargetsRelative, + a2, + b3, + c2, + modifiedNormal + ); + } + } + } + const morphedPositionAttribute = new Float32BufferAttribute(modifiedPosition, 3); + const morphedNormalAttribute = new Float32BufferAttribute(modifiedNormal, 3); + return { + positionAttribute, + normalAttribute, + morphedPositionAttribute, + morphedNormalAttribute + }; +} +function mergeGroups(geometry) { + if (geometry.groups.length === 0) { + console.warn("THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge."); + return geometry; + } + let groups = geometry.groups; + groups = groups.sort((a2, b3) => { + if (a2.materialIndex !== b3.materialIndex) return a2.materialIndex - b3.materialIndex; + return a2.start - b3.start; + }); + if (geometry.getIndex() === null) { + const positionAttribute = geometry.getAttribute("position"); + const indices = []; + for (let i = 0; i < positionAttribute.count; i += 3) { + indices.push(i, i + 1, i + 2); + } + geometry.setIndex(indices); + } + const index2 = geometry.getIndex(); + const newIndices = []; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + const groupStart = group.start; + const groupLength = groupStart + group.count; + for (let j = groupStart; j < groupLength; j++) { + newIndices.push(index2.getX(j)); + } + } + geometry.dispose(); + geometry.setIndex(newIndices); + let start = 0; + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + group.start = start; + start += group.count; + } + let currentGroup = groups[0]; + geometry.groups = [currentGroup]; + for (let i = 1; i < groups.length; i++) { + const group = groups[i]; + if (currentGroup.materialIndex === group.materialIndex) { + currentGroup.count += group.count; + } else { + currentGroup = group; + geometry.groups.push(currentGroup); + } + } + return geometry; +} +function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) { + const creaseDot = Math.cos(creaseAngle); + const hashMultiplier = (1 + 1e-10) * 100; + const verts = [new Vector3(), new Vector3(), new Vector3()]; + const tempVec1 = new Vector3(); + const tempVec2 = new Vector3(); + const tempNorm = new Vector3(); + const tempNorm2 = new Vector3(); + function hashVertex(v) { + const x2 = ~~(v.x * hashMultiplier); + const y2 = ~~(v.y * hashMultiplier); + const z = ~~(v.z * hashMultiplier); + return `${x2},${y2},${z}`; + } + const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry; + const posAttr = resultGeometry.attributes.position; + const vertexMap = {}; + for (let i = 0, l2 = posAttr.count / 3; i < l2; i++) { + const i3 = 3 * i; + const a2 = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b3 = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c2 = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c2, b3); + tempVec2.subVectors(a2, b3); + const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize(); + for (let n2 = 0; n2 < 3; n2++) { + const vert = verts[n2]; + const hash = hashVertex(vert); + if (!(hash in vertexMap)) { + vertexMap[hash] = []; + } + vertexMap[hash].push(normal); + } + } + const normalArray = new Float32Array(posAttr.count * 3); + const normAttr = new BufferAttribute(normalArray, 3, false); + for (let i = 0, l2 = posAttr.count / 3; i < l2; i++) { + const i3 = 3 * i; + const a2 = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b3 = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c2 = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c2, b3); + tempVec2.subVectors(a2, b3); + tempNorm.crossVectors(tempVec1, tempVec2).normalize(); + for (let n2 = 0; n2 < 3; n2++) { + const vert = verts[n2]; + const hash = hashVertex(vert); + const otherNormals = vertexMap[hash]; + tempNorm2.set(0, 0, 0); + for (let k2 = 0, lk = otherNormals.length; k2 < lk; k2++) { + const otherNorm = otherNormals[k2]; + if (tempNorm.dot(otherNorm) > creaseDot) { + tempNorm2.add(otherNorm); + } + } + tempNorm2.normalize(); + normAttr.setXYZ(i3 + n2, tempNorm2.x, tempNorm2.y, tempNorm2.z); + } + } + resultGeometry.setAttribute("normal", normAttr); + return resultGeometry; +} + +// node_modules/three/examples/jsm/helpers/TextureHelper.js +var TextureHelper = class extends Mesh { + constructor(texture, width2 = 1, height2 = 1, depth = 1) { + const material = new ShaderMaterial({ + type: "TextureHelperMaterial", + side: DoubleSide, + transparent: true, + uniforms: { + map: { value: texture }, + alpha: { value: getAlpha(texture) } + }, + vertexShader: [ + "attribute vec3 uvw;", + "varying vec3 vUvw;", + "void main() {", + " vUvw = uvw;", + " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", + "}" + ].join("\n"), + fragmentShader: [ + "precision highp float;", + "precision highp sampler2DArray;", + "precision highp sampler3D;", + "uniform {samplerType} map;", + "uniform float alpha;", + "varying vec3 vUvw;", + "vec4 textureHelper( in sampler2D map ) { return texture( map, vUvw.xy ); }", + "vec4 textureHelper( in sampler2DArray map ) { return texture( map, vUvw ); }", + "vec4 textureHelper( in sampler3D map ) { return texture( map, vUvw ); }", + "vec4 textureHelper( in samplerCube map ) { return texture( map, vUvw ); }", + "void main() {", + " gl_FragColor = linearToOutputTexel( vec4( textureHelper( map ).xyz, alpha ) );", + "}" + ].join("\n").replace("{samplerType}", getSamplerType(texture)) + }); + const geometry = texture.isCubeTexture ? createCubeGeometry(width2, height2, depth) : createSliceGeometry(texture, width2, height2, depth); + super(geometry, material); + this.texture = texture; + this.type = "TextureHelper"; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; +function getSamplerType(texture) { + if (texture.isCubeTexture) { + return "samplerCube"; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return "sampler2DArray"; + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return "sampler3D"; + } else { + return "sampler2D"; + } +} +function getImageCount(texture) { + if (texture.isCubeTexture) { + return 6; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return texture.image.depth; + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return texture.image.depth; + } else { + return 1; + } +} +function getAlpha(texture) { + if (texture.isCubeTexture) { + return 1; + } else if (texture.isDataArrayTexture || texture.isCompressedArrayTexture) { + return Math.max(1 / texture.image.depth, 0.25); + } else if (texture.isData3DTexture || texture.isCompressed3DTexture) { + return Math.max(1 / texture.image.depth, 0.25); + } else { + return 1; + } +} +function createCubeGeometry(width2, height2, depth) { + const geometry = new BoxGeometry(width2, height2, depth); + const position2 = geometry.attributes.position; + const uv = geometry.attributes.uv; + const uvw = new BufferAttribute(new Float32Array(uv.count * 3), 3); + const _direction = new Vector3(); + for (let j = 0, jl = uv.count; j < jl; ++j) { + _direction.fromBufferAttribute(position2, j).normalize(); + const u = _direction.x; + const v = _direction.y; + const w = _direction.z; + uvw.setXYZ(j, u, v, w); + } + geometry.deleteAttribute("uv"); + geometry.setAttribute("uvw", uvw); + return geometry; +} +function createSliceGeometry(texture, width2, height2, depth) { + const sliceCount = getImageCount(texture); + const geometries = []; + for (let i = 0; i < sliceCount; ++i) { + const geometry = new PlaneGeometry(width2, height2); + if (sliceCount > 1) { + geometry.translate(0, 0, depth * (i / (sliceCount - 1) - 0.5)); + } + const uv = geometry.attributes.uv; + const uvw = new BufferAttribute(new Float32Array(uv.count * 3), 3); + for (let j = 0, jl = uv.count; j < jl; ++j) { + const u = uv.getX(j); + const v = texture.flipY ? uv.getY(j) : 1 - uv.getY(j); + const w = sliceCount === 1 ? 1 : texture.isDataArrayTexture || texture.isCompressedArrayTexture ? i : i / (sliceCount - 1); + uvw.setXYZ(j, u, v, w); + } + geometry.deleteAttribute("uv"); + geometry.setAttribute("uvw", uvw); + geometries.push(geometry); + } + return mergeGeometries(geometries); +} + +// node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js +var _v13 = new Vector3(); +var _v22 = new Vector3(); +var _normalMatrix = new Matrix3(); +var VertexNormalsHelper = class extends LineSegments { + constructor(object, size2 = 1, color = 16711680) { + const geometry = new BufferGeometry(); + const nNormals = object.geometry.attributes.normal.count; + const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3); + geometry.setAttribute("position", positions); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.size = size2; + this.type = "VertexNormalsHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update() { + this.object.updateMatrixWorld(true); + _normalMatrix.getNormalMatrix(this.object.matrixWorld); + const matrixWorld = this.object.matrixWorld; + const position2 = this.geometry.attributes.position; + const objGeometry = this.object.geometry; + if (objGeometry) { + const objPos = objGeometry.attributes.position; + const objNorm = objGeometry.attributes.normal; + let idx = 0; + for (let j = 0, jl = objPos.count; j < jl; j++) { + _v13.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); + _v22.fromBufferAttribute(objNorm, j); + _v22.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v13); + position2.setXYZ(idx, _v13.x, _v13.y, _v13.z); + idx = idx + 1; + position2.setXYZ(idx, _v22.x, _v22.y, _v22.z); + idx = idx + 1; + } + } + position2.needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js +var _v14 = new Vector3(); +var _v23 = new Vector3(); +var VertexTangentsHelper = class extends LineSegments { + constructor(object, size2 = 1, color = 65535) { + const geometry = new BufferGeometry(); + const nTangents = object.geometry.attributes.tangent.count; + const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3); + geometry.setAttribute("position", positions); + super(geometry, new LineBasicMaterial({ color, toneMapped: false })); + this.object = object; + this.size = size2; + this.type = "VertexTangentsHelper"; + this.matrixAutoUpdate = false; + this.update(); + } + update() { + this.object.updateMatrixWorld(true); + const matrixWorld = this.object.matrixWorld; + const position2 = this.geometry.attributes.position; + const objGeometry = this.object.geometry; + const objPos = objGeometry.attributes.position; + const objTan = objGeometry.attributes.tangent; + let idx = 0; + for (let j = 0, jl = objPos.count; j < jl; j++) { + _v14.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); + _v23.fromBufferAttribute(objTan, j); + _v23.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v14); + position2.setXYZ(idx, _v14.x, _v14.y, _v14.z); + idx = idx + 1; + position2.setXYZ(idx, _v23.x, _v23.y, _v23.z); + idx = idx + 1; + } + position2.needsUpdate = true; + } + dispose() { + this.geometry.dispose(); + this.material.dispose(); + } +}; + +// node_modules/three/examples/jsm/helpers/ViewHelper.js +var ViewHelper = class extends Object3D { + constructor(camera, domElement) { + super(); + this.isViewHelper = true; + this.animating = false; + this.center = new Vector3(); + const color1 = new Color("#ff4466"); + const color2 = new Color("#88ff44"); + const color3 = new Color("#4488ff"); + const color4 = new Color("#000000"); + const options = {}; + const interactiveObjects = []; + const raycaster = new Raycaster(); + const mouse = new Vector2(); + const dummy = new Object3D(); + const orthoCamera = new OrthographicCamera(-2, 2, 2, -2, 0, 4); + orthoCamera.position.set(0, 0, 2); + const geometry = new CylinderGeometry(0.04, 0.04, 0.8, 5).rotateZ(-Math.PI / 2).translate(0.4, 0, 0); + const xAxis2 = new Mesh(geometry, getAxisMaterial(color1)); + const yAxis2 = new Mesh(geometry, getAxisMaterial(color2)); + const zAxis2 = new Mesh(geometry, getAxisMaterial(color3)); + yAxis2.rotation.z = Math.PI / 2; + zAxis2.rotation.y = -Math.PI / 2; + this.add(xAxis2); + this.add(zAxis2); + this.add(yAxis2); + const spriteMaterial1 = getSpriteMaterial(color1); + const spriteMaterial2 = getSpriteMaterial(color2); + const spriteMaterial3 = getSpriteMaterial(color3); + const spriteMaterial4 = getSpriteMaterial(color4); + const posXAxisHelper = new Sprite(spriteMaterial1); + const posYAxisHelper = new Sprite(spriteMaterial2); + const posZAxisHelper = new Sprite(spriteMaterial3); + const negXAxisHelper = new Sprite(spriteMaterial4); + const negYAxisHelper = new Sprite(spriteMaterial4); + const negZAxisHelper = new Sprite(spriteMaterial4); + posXAxisHelper.position.x = 1; + posYAxisHelper.position.y = 1; + posZAxisHelper.position.z = 1; + negXAxisHelper.position.x = -1; + negYAxisHelper.position.y = -1; + negZAxisHelper.position.z = -1; + negXAxisHelper.material.opacity = 0.2; + negYAxisHelper.material.opacity = 0.2; + negZAxisHelper.material.opacity = 0.2; + posXAxisHelper.userData.type = "posX"; + posYAxisHelper.userData.type = "posY"; + posZAxisHelper.userData.type = "posZ"; + negXAxisHelper.userData.type = "negX"; + negYAxisHelper.userData.type = "negY"; + negZAxisHelper.userData.type = "negZ"; + this.add(posXAxisHelper); + this.add(posYAxisHelper); + this.add(posZAxisHelper); + this.add(negXAxisHelper); + this.add(negYAxisHelper); + this.add(negZAxisHelper); + interactiveObjects.push(posXAxisHelper); + interactiveObjects.push(posYAxisHelper); + interactiveObjects.push(posZAxisHelper); + interactiveObjects.push(negXAxisHelper); + interactiveObjects.push(negYAxisHelper); + interactiveObjects.push(negZAxisHelper); + const point = new Vector3(); + const dim = 128; + const turnRate = 2 * Math.PI; + this.render = function(renderer2) { + this.quaternion.copy(camera.quaternion).invert(); + this.updateMatrixWorld(); + point.set(0, 0, 1); + point.applyQuaternion(camera.quaternion); + const x2 = domElement.offsetWidth - dim; + renderer2.clearDepth(); + renderer2.getViewport(viewport); + renderer2.setViewport(x2, 0, dim, dim); + renderer2.render(this, orthoCamera); + renderer2.setViewport(viewport.x, viewport.y, viewport.z, viewport.w); + }; + const targetPosition = new Vector3(); + const targetQuaternion = new Quaternion(); + const q1 = new Quaternion(); + const q2 = new Quaternion(); + const viewport = new Vector4(); + let radius = 0; + this.handleClick = function(event) { + if (this.animating === true) return false; + const rect = domElement.getBoundingClientRect(); + const offsetX = rect.left + (domElement.offsetWidth - dim); + const offsetY = rect.top + (domElement.offsetHeight - dim); + mouse.x = (event.clientX - offsetX) / (rect.right - offsetX) * 2 - 1; + mouse.y = -((event.clientY - offsetY) / (rect.bottom - offsetY)) * 2 + 1; + raycaster.setFromCamera(mouse, orthoCamera); + const intersects = raycaster.intersectObjects(interactiveObjects); + if (intersects.length > 0) { + const intersection = intersects[0]; + const object = intersection.object; + prepareAnimationData(object, this.center); + this.animating = true; + return true; + } else { + return false; + } + }; + this.setLabels = function(labelX, labelY, labelZ) { + options.labelX = labelX; + options.labelY = labelY; + options.labelZ = labelZ; + updateLabels(); + }; + this.setLabelStyle = function(font, color, radius2) { + options.font = font; + options.color = color; + options.radius = radius2; + updateLabels(); + }; + this.update = function(delta) { + const step = delta * turnRate; + q1.rotateTowards(q2, step); + camera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius).add(this.center); + camera.quaternion.rotateTowards(targetQuaternion, step); + if (q1.angleTo(q2) === 0) { + this.animating = false; + } + }; + this.dispose = function() { + geometry.dispose(); + xAxis2.material.dispose(); + yAxis2.material.dispose(); + zAxis2.material.dispose(); + posXAxisHelper.material.map.dispose(); + posYAxisHelper.material.map.dispose(); + posZAxisHelper.material.map.dispose(); + negXAxisHelper.material.map.dispose(); + negYAxisHelper.material.map.dispose(); + negZAxisHelper.material.map.dispose(); + posXAxisHelper.material.dispose(); + posYAxisHelper.material.dispose(); + posZAxisHelper.material.dispose(); + negXAxisHelper.material.dispose(); + negYAxisHelper.material.dispose(); + negZAxisHelper.material.dispose(); + }; + function prepareAnimationData(object, focusPoint) { + switch (object.userData.type) { + case "posX": + targetPosition.set(1, 0, 0); + targetQuaternion.setFromEuler(new Euler(0, Math.PI * 0.5, 0)); + break; + case "posY": + targetPosition.set(0, 1, 0); + targetQuaternion.setFromEuler(new Euler(-Math.PI * 0.5, 0, 0)); + break; + case "posZ": + targetPosition.set(0, 0, 1); + targetQuaternion.setFromEuler(new Euler()); + break; + case "negX": + targetPosition.set(-1, 0, 0); + targetQuaternion.setFromEuler(new Euler(0, -Math.PI * 0.5, 0)); + break; + case "negY": + targetPosition.set(0, -1, 0); + targetQuaternion.setFromEuler(new Euler(Math.PI * 0.5, 0, 0)); + break; + case "negZ": + targetPosition.set(0, 0, -1); + targetQuaternion.setFromEuler(new Euler(0, Math.PI, 0)); + break; + default: + console.error("ViewHelper: Invalid axis."); + } + radius = camera.position.distanceTo(focusPoint); + targetPosition.multiplyScalar(radius).add(focusPoint); + dummy.position.copy(focusPoint); + dummy.lookAt(camera.position); + q1.copy(dummy.quaternion); + dummy.lookAt(targetPosition); + q2.copy(dummy.quaternion); + } + function getAxisMaterial(color) { + return new MeshBasicMaterial({ color, toneMapped: false }); + } + function getSpriteMaterial(color, text2) { + const { font = "24px Arial", color: labelColor = "#000000", radius: radius2 = 14 } = options; + const canvas = document.createElement("canvas"); + canvas.width = 64; + canvas.height = 64; + const context = canvas.getContext("2d"); + context.beginPath(); + context.arc(32, 32, radius2, 0, 2 * Math.PI); + context.closePath(); + context.fillStyle = color.getStyle(); + context.fill(); + if (text2) { + context.font = font; + context.textAlign = "center"; + context.fillStyle = labelColor; + context.fillText(text2, 32, 41); + } + const texture = new CanvasTexture(canvas); + texture.colorSpace = SRGBColorSpace; + return new SpriteMaterial({ map: texture, toneMapped: false }); + } + function updateLabels() { + posXAxisHelper.material.map.dispose(); + posYAxisHelper.material.map.dispose(); + posZAxisHelper.material.map.dispose(); + posXAxisHelper.material.dispose(); + posYAxisHelper.material.dispose(); + posZAxisHelper.material.dispose(); + posXAxisHelper.material = getSpriteMaterial(color1, options.labelX); + posYAxisHelper.material = getSpriteMaterial(color2, options.labelY); + posZAxisHelper.material = getSpriteMaterial(color3, options.labelZ); + } + } +}; + +// node_modules/three/examples/jsm/interactive/HTMLMesh.js +var HTMLMesh = class extends Mesh { + constructor(dom) { + const texture = new HTMLTexture(dom); + const geometry = new PlaneGeometry(texture.image.width * 1e-3, texture.image.height * 1e-3); + const material = new MeshBasicMaterial({ map: texture, toneMapped: false, transparent: true }); + super(geometry, material); + function onEvent(event) { + material.map.dispatchDOMEvent(event); + } + this.addEventListener("mousedown", onEvent); + this.addEventListener("mousemove", onEvent); + this.addEventListener("mouseup", onEvent); + this.addEventListener("click", onEvent); + this.dispose = function() { + geometry.dispose(); + material.dispose(); + material.map.dispose(); + canvases.delete(dom); + this.removeEventListener("mousedown", onEvent); + this.removeEventListener("mousemove", onEvent); + this.removeEventListener("mouseup", onEvent); + this.removeEventListener("click", onEvent); + }; + } +}; +var HTMLTexture = class extends CanvasTexture { + constructor(dom) { + super(html2canvas(dom)); + this.dom = dom; + this.anisotropy = 16; + this.colorSpace = SRGBColorSpace; + this.minFilter = LinearFilter; + this.magFilter = LinearFilter; + const observer = new MutationObserver(() => { + if (!this.scheduleUpdate) { + this.scheduleUpdate = setTimeout(() => this.update(), 16); + } + }); + const config = { attributes: true, childList: true, subtree: true, characterData: true }; + observer.observe(dom, config); + this.observer = observer; + } + dispatchDOMEvent(event) { + if (event.data) { + htmlevent(this.dom, event.type, event.data.x, event.data.y); + } + } + update() { + this.image = html2canvas(this.dom); + this.needsUpdate = true; + this.scheduleUpdate = null; + } + dispose() { + if (this.observer) { + this.observer.disconnect(); + } + this.scheduleUpdate = clearTimeout(this.scheduleUpdate); + super.dispose(); + } +}; +var canvases = /* @__PURE__ */ new WeakMap(); +function html2canvas(element) { + const range = document.createRange(); + const color = new Color(); + function Clipper(context2) { + const clips = []; + let isClipping = false; + function doClip() { + if (isClipping) { + isClipping = false; + context2.restore(); + } + if (clips.length === 0) return; + let minX = -Infinity, minY = -Infinity; + let maxX = Infinity, maxY = Infinity; + for (let i = 0; i < clips.length; i++) { + const clip = clips[i]; + minX = Math.max(minX, clip.x); + minY = Math.max(minY, clip.y); + maxX = Math.min(maxX, clip.x + clip.width); + maxY = Math.min(maxY, clip.y + clip.height); + } + context2.save(); + context2.beginPath(); + context2.rect(minX, minY, maxX - minX, maxY - minY); + context2.clip(); + isClipping = true; + } + return { + add: function(clip) { + clips.push(clip); + doClip(); + }, + remove: function() { + clips.pop(); + doClip(); + } + }; + } + function drawText(style, x2, y2, string) { + if (string !== "") { + if (style.textTransform === "uppercase") { + string = string.toUpperCase(); + } + context.font = style.fontWeight + " " + style.fontSize + " " + style.fontFamily; + context.textBaseline = "top"; + context.fillStyle = style.color; + context.fillText(string, x2, y2 + parseFloat(style.fontSize) * 0.1); + } + } + function buildRectPath(x2, y2, w, h, r) { + if (w < 2 * r) r = w / 2; + if (h < 2 * r) r = h / 2; + context.beginPath(); + context.moveTo(x2 + r, y2); + context.arcTo(x2 + w, y2, x2 + w, y2 + h, r); + context.arcTo(x2 + w, y2 + h, x2, y2 + h, r); + context.arcTo(x2, y2 + h, x2, y2, r); + context.arcTo(x2, y2, x2 + w, y2, r); + context.closePath(); + } + function drawBorder(style, which, x2, y2, width2, height2) { + const borderWidth = style[which + "Width"]; + const borderStyle = style[which + "Style"]; + const borderColor = style[which + "Color"]; + if (borderWidth !== "0px" && borderStyle !== "none" && borderColor !== "transparent" && borderColor !== "rgba(0, 0, 0, 0)") { + context.strokeStyle = borderColor; + context.lineWidth = parseFloat(borderWidth); + context.beginPath(); + context.moveTo(x2, y2); + context.lineTo(x2 + width2, y2 + height2); + context.stroke(); + } + } + function drawElement(element2, style) { + if (element2.nodeType === Node.COMMENT_NODE || element2.nodeName === "SCRIPT" || element2.style && element2.style.display === "none") { + return; + } + let x2 = 0, y2 = 0, width2 = 0, height2 = 0; + if (element2.nodeType === Node.TEXT_NODE) { + range.selectNode(element2); + const rect = range.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + drawText(style, x2, y2, element2.nodeValue.trim()); + } else if (element2 instanceof HTMLCanvasElement) { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + context.save(); + const dpr = window.devicePixelRatio; + context.scale(1 / dpr, 1 / dpr); + context.drawImage(element2, x2, y2); + context.restore(); + } else if (element2 instanceof HTMLImageElement) { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + context.drawImage(element2, x2, y2, width2, height2); + } else { + const rect = element2.getBoundingClientRect(); + x2 = rect.left - offset.left - 0.5; + y2 = rect.top - offset.top - 0.5; + width2 = rect.width; + height2 = rect.height; + style = window.getComputedStyle(element2); + buildRectPath(x2, y2, width2, height2, parseFloat(style.borderRadius)); + const backgroundColor = style.backgroundColor; + if (backgroundColor !== "transparent" && backgroundColor !== "rgba(0, 0, 0, 0)") { + context.fillStyle = backgroundColor; + context.fill(); + } + const borders = ["borderTop", "borderLeft", "borderBottom", "borderRight"]; + let match = true; + let prevBorder = null; + for (const border of borders) { + if (prevBorder !== null) { + match = style[border + "Width"] === style[prevBorder + "Width"] && style[border + "Color"] === style[prevBorder + "Color"] && style[border + "Style"] === style[prevBorder + "Style"]; + } + if (match === false) break; + prevBorder = border; + } + if (match === true) { + const width3 = parseFloat(style.borderTopWidth); + if (style.borderTopWidth !== "0px" && style.borderTopStyle !== "none" && style.borderTopColor !== "transparent" && style.borderTopColor !== "rgba(0, 0, 0, 0)") { + context.strokeStyle = style.borderTopColor; + context.lineWidth = width3; + context.stroke(); + } + } else { + drawBorder(style, "borderTop", x2, y2, width2, 0); + drawBorder(style, "borderLeft", x2, y2, 0, height2); + drawBorder(style, "borderBottom", x2, y2 + height2, width2, 0); + drawBorder(style, "borderRight", x2 + width2, y2, 0, height2); + } + if (element2 instanceof HTMLInputElement) { + let accentColor = style.accentColor; + if (accentColor === void 0 || accentColor === "auto") accentColor = style.color; + color.set(accentColor); + const luminance = Math.sqrt(0.299 * color.r ** 2 + 0.587 * color.g ** 2 + 0.114 * color.b ** 2); + const accentTextColor = luminance < 0.5 ? "white" : "#111111"; + if (element2.type === "radio") { + buildRectPath(x2, y2, width2, height2, height2); + context.fillStyle = "white"; + context.strokeStyle = accentColor; + context.lineWidth = 1; + context.fill(); + context.stroke(); + if (element2.checked) { + buildRectPath(x2 + 2, y2 + 2, width2 - 4, height2 - 4, height2); + context.fillStyle = accentColor; + context.strokeStyle = accentTextColor; + context.lineWidth = 2; + context.fill(); + context.stroke(); + } + } + if (element2.type === "checkbox") { + buildRectPath(x2, y2, width2, height2, 2); + context.fillStyle = element2.checked ? accentColor : "white"; + context.strokeStyle = element2.checked ? accentTextColor : accentColor; + context.lineWidth = 1; + context.stroke(); + context.fill(); + if (element2.checked) { + const currentTextAlign = context.textAlign; + context.textAlign = "center"; + const properties = { + color: accentTextColor, + fontFamily: style.fontFamily, + fontSize: height2 + "px", + fontWeight: "bold" + }; + drawText(properties, x2 + width2 / 2, y2, "✔"); + context.textAlign = currentTextAlign; + } + } + if (element2.type === "range") { + const [min, max2, value2] = ["min", "max", "value"].map((property2) => parseFloat(element2[property2])); + const position2 = (value2 - min) / (max2 - min) * (width2 - height2); + buildRectPath(x2, y2 + height2 / 4, width2, height2 / 2, height2 / 4); + context.fillStyle = accentTextColor; + context.strokeStyle = accentColor; + context.lineWidth = 1; + context.fill(); + context.stroke(); + buildRectPath(x2, y2 + height2 / 4, position2 + height2 / 2, height2 / 2, height2 / 4); + context.fillStyle = accentColor; + context.fill(); + buildRectPath(x2 + position2, y2, height2, height2, height2 / 2); + context.fillStyle = accentColor; + context.fill(); + } + if (element2.type === "color" || element2.type === "text" || element2.type === "number") { + clipper.add({ x: x2, y: y2, width: width2, height: height2 }); + drawText(style, x2 + parseInt(style.paddingLeft), y2 + parseInt(style.paddingTop), element2.value); + clipper.remove(); + } + } + } + const isClipping = style.overflow === "auto" || style.overflow === "hidden"; + if (isClipping) clipper.add({ x: x2, y: y2, width: width2, height: height2 }); + for (let i = 0; i < element2.childNodes.length; i++) { + drawElement(element2.childNodes[i], style); + } + if (isClipping) clipper.remove(); + } + const offset = element.getBoundingClientRect(); + let canvas = canvases.get(element); + if (canvas === void 0) { + canvas = document.createElement("canvas"); + canvas.width = offset.width; + canvas.height = offset.height; + canvases.set(element, canvas); + } + const context = canvas.getContext( + "2d" + /*, { alpha: false }*/ + ); + const clipper = new Clipper(context); + context.clearRect(0, 0, canvas.width, canvas.height); + drawElement(element); + return canvas; +} +function htmlevent(element, event, x2, y2) { + const mouseEventInit = { + clientX: x2 * element.offsetWidth + element.offsetLeft, + clientY: y2 * element.offsetHeight + element.offsetTop, + view: element.ownerDocument.defaultView + }; + window.dispatchEvent(new MouseEvent(event, mouseEventInit)); + const rect = element.getBoundingClientRect(); + x2 = x2 * rect.width + rect.left; + y2 = y2 * rect.height + rect.top; + function traverse(element2) { + if (element2.nodeType !== Node.TEXT_NODE && element2.nodeType !== Node.COMMENT_NODE) { + const rect2 = element2.getBoundingClientRect(); + if (x2 > rect2.left && x2 < rect2.right && y2 > rect2.top && y2 < rect2.bottom) { + element2.dispatchEvent(new MouseEvent(event, mouseEventInit)); + if (element2 instanceof HTMLInputElement && element2.type === "range" && (event === "mousedown" || event === "click")) { + const [min, max2] = ["min", "max"].map((property2) => parseFloat(element2[property2])); + const width2 = rect2.width; + const offsetX = x2 - rect2.x; + const proportion = offsetX / width2; + element2.value = min + (max2 - min) * proportion; + element2.dispatchEvent(new InputEvent("input", { bubbles: true })); + } + } + for (let i = 0; i < element2.childNodes.length; i++) { + traverse(element2.childNodes[i]); + } + } + } + traverse(element); +} + +// node_modules/three/examples/jsm/interactive/InteractiveGroup.js +var _pointer2 = new Vector2(); +var _event = { type: "", data: _pointer2 }; +var _raycaster4 = new Raycaster(); +var InteractiveGroup = class extends Group { + listenToPointerEvents(renderer2, camera) { + const scope = this; + const raycaster = new Raycaster(); + const element = renderer2.domElement; + function onPointerEvent(event) { + event.stopPropagation(); + const rect = renderer2.domElement.getBoundingClientRect(); + _pointer2.x = (event.clientX - rect.left) / rect.width * 2 - 1; + _pointer2.y = -(event.clientY - rect.top) / rect.height * 2 + 1; + raycaster.setFromCamera(_pointer2, camera); + const intersects = raycaster.intersectObjects(scope.children, false); + if (intersects.length > 0) { + const intersection = intersects[0]; + const object = intersection.object; + const uv = intersection.uv; + _event.type = event.type; + _event.data.set(uv.x, 1 - uv.y); + object.dispatchEvent(_event); + } + } + element.addEventListener("pointerdown", onPointerEvent); + element.addEventListener("pointerup", onPointerEvent); + element.addEventListener("pointermove", onPointerEvent); + element.addEventListener("mousedown", onPointerEvent); + element.addEventListener("mouseup", onPointerEvent); + element.addEventListener("mousemove", onPointerEvent); + element.addEventListener("click", onPointerEvent); + } + listenToXRControllerEvents(controller) { + const scope = this; + const events = { + "move": "mousemove", + "select": "click", + "selectstart": "mousedown", + "selectend": "mouseup" + }; + function onXRControllerEvent(event) { + const controller2 = event.target; + _raycaster4.setFromXRController(controller2); + const intersections = _raycaster4.intersectObjects(scope.children, false); + if (intersections.length > 0) { + const intersection = intersections[0]; + const object = intersection.object; + const uv = intersection.uv; + _event.type = events[event.type]; + _event.data.set(uv.x, 1 - uv.y); + object.dispatchEvent(_event); + } + } + controller.addEventListener("move", onXRControllerEvent); + controller.addEventListener("select", onXRControllerEvent); + controller.addEventListener("selectstart", onXRControllerEvent); + controller.addEventListener("selectend", onXRControllerEvent); + } +}; + +// node_modules/three/examples/jsm/interactive/SelectionBox.js +var _frustum = new Frustum(); +var _center3 = new Vector3(); +var _tmpPoint = new Vector3(); +var _vecNear = new Vector3(); +var _vecTopLeft = new Vector3(); +var _vecTopRight = new Vector3(); +var _vecDownRight = new Vector3(); +var _vecDownLeft = new Vector3(); +var _vecFarTopLeft = new Vector3(); +var _vecFarTopRight = new Vector3(); +var _vecFarDownRight = new Vector3(); +var _vecFarDownLeft = new Vector3(); +var _vectemp1 = new Vector3(); +var _vectemp2 = new Vector3(); +var _vectemp3 = new Vector3(); +var _matrix2 = new Matrix4(); +var _quaternion2 = new Quaternion(); +var _scale2 = new Vector3(); +var SelectionBox = class { + constructor(camera, scene, deep = Number.MAX_VALUE) { + this.camera = camera; + this.scene = scene; + this.startPoint = new Vector3(); + this.endPoint = new Vector3(); + this.collection = []; + this.instances = {}; + this.deep = deep; + } + select(startPoint, endPoint) { + this.startPoint = startPoint || this.startPoint; + this.endPoint = endPoint || this.endPoint; + this.collection = []; + this.updateFrustum(this.startPoint, this.endPoint); + this.searchChildInFrustum(_frustum, this.scene); + return this.collection; + } + updateFrustum(startPoint, endPoint) { + startPoint = startPoint || this.startPoint; + endPoint = endPoint || this.endPoint; + if (startPoint.x === endPoint.x) { + endPoint.x += Number.EPSILON; + } + if (startPoint.y === endPoint.y) { + endPoint.y += Number.EPSILON; + } + this.camera.updateProjectionMatrix(); + this.camera.updateMatrixWorld(); + if (this.camera.isPerspectiveCamera) { + _tmpPoint.copy(startPoint); + _tmpPoint.x = Math.min(startPoint.x, endPoint.x); + _tmpPoint.y = Math.max(startPoint.y, endPoint.y); + endPoint.x = Math.max(startPoint.x, endPoint.x); + endPoint.y = Math.min(startPoint.y, endPoint.y); + _vecNear.setFromMatrixPosition(this.camera.matrixWorld); + _vecTopLeft.copy(_tmpPoint); + _vecTopRight.set(endPoint.x, _tmpPoint.y, 0); + _vecDownRight.copy(endPoint); + _vecDownLeft.set(_tmpPoint.x, endPoint.y, 0); + _vecTopLeft.unproject(this.camera); + _vecTopRight.unproject(this.camera); + _vecDownRight.unproject(this.camera); + _vecDownLeft.unproject(this.camera); + _vectemp1.copy(_vecTopLeft).sub(_vecNear); + _vectemp2.copy(_vecTopRight).sub(_vecNear); + _vectemp3.copy(_vecDownRight).sub(_vecNear); + _vectemp1.normalize(); + _vectemp2.normalize(); + _vectemp3.normalize(); + _vectemp1.multiplyScalar(this.deep); + _vectemp2.multiplyScalar(this.deep); + _vectemp3.multiplyScalar(this.deep); + _vectemp1.add(_vecNear); + _vectemp2.add(_vecNear); + _vectemp3.add(_vecNear); + const planes = _frustum.planes; + planes[0].setFromCoplanarPoints(_vecNear, _vecTopLeft, _vecTopRight); + planes[1].setFromCoplanarPoints(_vecNear, _vecTopRight, _vecDownRight); + planes[2].setFromCoplanarPoints(_vecDownRight, _vecDownLeft, _vecNear); + planes[3].setFromCoplanarPoints(_vecDownLeft, _vecTopLeft, _vecNear); + planes[4].setFromCoplanarPoints(_vecTopRight, _vecDownRight, _vecDownLeft); + planes[5].setFromCoplanarPoints(_vectemp3, _vectemp2, _vectemp1); + planes[5].normal.multiplyScalar(-1); + } else if (this.camera.isOrthographicCamera) { + const left = Math.min(startPoint.x, endPoint.x); + const top = Math.max(startPoint.y, endPoint.y); + const right = Math.max(startPoint.x, endPoint.x); + const down = Math.min(startPoint.y, endPoint.y); + _vecTopLeft.set(left, top, -1); + _vecTopRight.set(right, top, -1); + _vecDownRight.set(right, down, -1); + _vecDownLeft.set(left, down, -1); + _vecFarTopLeft.set(left, top, 1); + _vecFarTopRight.set(right, top, 1); + _vecFarDownRight.set(right, down, 1); + _vecFarDownLeft.set(left, down, 1); + _vecTopLeft.unproject(this.camera); + _vecTopRight.unproject(this.camera); + _vecDownRight.unproject(this.camera); + _vecDownLeft.unproject(this.camera); + _vecFarTopLeft.unproject(this.camera); + _vecFarTopRight.unproject(this.camera); + _vecFarDownRight.unproject(this.camera); + _vecFarDownLeft.unproject(this.camera); + const planes = _frustum.planes; + planes[0].setFromCoplanarPoints(_vecTopLeft, _vecFarTopLeft, _vecFarTopRight); + planes[1].setFromCoplanarPoints(_vecTopRight, _vecFarTopRight, _vecFarDownRight); + planes[2].setFromCoplanarPoints(_vecFarDownRight, _vecFarDownLeft, _vecDownLeft); + planes[3].setFromCoplanarPoints(_vecFarDownLeft, _vecFarTopLeft, _vecTopLeft); + planes[4].setFromCoplanarPoints(_vecTopRight, _vecDownRight, _vecDownLeft); + planes[5].setFromCoplanarPoints(_vecFarDownRight, _vecFarTopRight, _vecFarTopLeft); + planes[5].normal.multiplyScalar(-1); + } else { + console.error("THREE.SelectionBox: Unsupported camera type."); + } + } + searchChildInFrustum(frustum, object) { + if (object.isMesh || object.isLine || object.isPoints) { + if (object.isInstancedMesh) { + this.instances[object.uuid] = []; + for (let instanceId = 0; instanceId < object.count; instanceId++) { + object.getMatrixAt(instanceId, _matrix2); + _matrix2.decompose(_center3, _quaternion2, _scale2); + _center3.applyMatrix4(object.matrixWorld); + if (frustum.containsPoint(_center3)) { + this.instances[object.uuid].push(instanceId); + } + } + } else { + if (object.geometry.boundingSphere === null) object.geometry.computeBoundingSphere(); + _center3.copy(object.geometry.boundingSphere.center); + _center3.applyMatrix4(object.matrixWorld); + if (frustum.containsPoint(_center3)) { + this.collection.push(object); + } + } + } + if (object.children.length > 0) { + for (let x2 = 0; x2 < object.children.length; x2++) { + this.searchChildInFrustum(frustum, object.children[x2]); + } + } + } +}; + +// node_modules/three/examples/jsm/interactive/SelectionHelper.js +var SelectionHelper = class { + constructor(renderer2, cssClassName) { + this.element = document.createElement("div"); + this.element.classList.add(cssClassName); + this.element.style.pointerEvents = "none"; + this.renderer = renderer2; + this.startPoint = new Vector2(); + this.pointTopLeft = new Vector2(); + this.pointBottomRight = new Vector2(); + this.isDown = false; + this.enabled = true; + this.onPointerDown = (function(event) { + if (this.enabled === false) return; + this.isDown = true; + this.onSelectStart(event); + }).bind(this); + this.onPointerMove = (function(event) { + if (this.enabled === false) return; + if (this.isDown) { + this.onSelectMove(event); + } + }).bind(this); + this.onPointerUp = (function() { + if (this.enabled === false) return; + this.isDown = false; + this.onSelectOver(); + }).bind(this); + this.renderer.domElement.addEventListener("pointerdown", this.onPointerDown); + this.renderer.domElement.addEventListener("pointermove", this.onPointerMove); + this.renderer.domElement.addEventListener("pointerup", this.onPointerUp); + } + dispose() { + this.renderer.domElement.removeEventListener("pointerdown", this.onPointerDown); + this.renderer.domElement.removeEventListener("pointermove", this.onPointerMove); + this.renderer.domElement.removeEventListener("pointerup", this.onPointerUp); + } + onSelectStart(event) { + this.element.style.display = "none"; + this.renderer.domElement.parentElement.appendChild(this.element); + this.element.style.left = event.clientX + "px"; + this.element.style.top = event.clientY + "px"; + this.element.style.width = "0px"; + this.element.style.height = "0px"; + this.startPoint.x = event.clientX; + this.startPoint.y = event.clientY; + } + onSelectMove(event) { + this.element.style.display = "block"; + this.pointBottomRight.x = Math.max(this.startPoint.x, event.clientX); + this.pointBottomRight.y = Math.max(this.startPoint.y, event.clientY); + this.pointTopLeft.x = Math.min(this.startPoint.x, event.clientX); + this.pointTopLeft.y = Math.min(this.startPoint.y, event.clientY); + this.element.style.left = this.pointTopLeft.x + "px"; + this.element.style.top = this.pointTopLeft.y + "px"; + this.element.style.width = this.pointBottomRight.x - this.pointTopLeft.x + "px"; + this.element.style.height = this.pointBottomRight.y - this.pointTopLeft.y + "px"; + } + onSelectOver() { + this.element.parentElement.removeChild(this.element); + } +}; + +// node_modules/three/examples/jsm/lights/LightProbeGenerator.js +var LightProbeGenerator = class { + // https://www.ppsloan.org/publications/StupidSH36.pdf + static fromCubeTexture(cubeTexture) { + let totalWeight = 0; + const coord = new Vector3(); + const dir = new Vector3(); + const color = new Color(); + const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + const sh = new SphericalHarmonics3(); + const shCoefficients = sh.coefficients; + for (let faceIndex = 0; faceIndex < 6; faceIndex++) { + const image = cubeTexture.image[faceIndex]; + const width2 = image.width; + const height2 = image.height; + const canvas = document.createElement("canvas"); + canvas.width = width2; + canvas.height = height2; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0, width2, height2); + const imageData = context.getImageData(0, 0, width2, height2); + const data2 = imageData.data; + const imageWidth = imageData.width; + const pixelSize = 2 / imageWidth; + for (let i = 0, il = data2.length; i < il; i += 4) { + color.setRGB(data2[i] / 255, data2[i + 1] / 255, data2[i + 2] / 255); + convertColorToLinear(color, cubeTexture.colorSpace); + const pixelIndex = i / 4; + const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize; + const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize; + switch (faceIndex) { + case 0: + coord.set(-1, row, -col); + break; + case 1: + coord.set(1, row, col); + break; + case 2: + coord.set(-col, 1, -row); + break; + case 3: + coord.set(-col, -1, row); + break; + case 4: + coord.set(-col, row, 1); + break; + case 5: + coord.set(col, row, -1); + break; + } + const lengthSq = coord.lengthSq(); + const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); + totalWeight += weight; + dir.copy(coord).normalize(); + SphericalHarmonics3.getBasisAt(dir, shBasis); + for (let j = 0; j < 9; j++) { + shCoefficients[j].x += shBasis[j] * color.r * weight; + shCoefficients[j].y += shBasis[j] * color.g * weight; + shCoefficients[j].z += shBasis[j] * color.b * weight; + } + } + } + const norm = 4 * Math.PI / totalWeight; + for (let j = 0; j < 9; j++) { + shCoefficients[j].x *= norm; + shCoefficients[j].y *= norm; + shCoefficients[j].z *= norm; + } + return new LightProbe(sh); + } + static fromCubeRenderTarget(renderer2, cubeRenderTarget) { + let totalWeight = 0; + const coord = new Vector3(); + const dir = new Vector3(); + const color = new Color(); + const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + const sh = new SphericalHarmonics3(); + const shCoefficients = sh.coefficients; + const dataType = cubeRenderTarget.texture.type; + for (let faceIndex = 0; faceIndex < 6; faceIndex++) { + const imageWidth = cubeRenderTarget.width; + let data2; + if (dataType === HalfFloatType) { + data2 = new Uint16Array(imageWidth * imageWidth * 4); + } else { + data2 = new Uint8Array(imageWidth * imageWidth * 4); + } + renderer2.readRenderTargetPixels(cubeRenderTarget, 0, 0, imageWidth, imageWidth, data2, faceIndex); + const pixelSize = 2 / imageWidth; + for (let i = 0, il = data2.length; i < il; i += 4) { + let r, g2, b3; + if (dataType === HalfFloatType) { + r = DataUtils.fromHalfFloat(data2[i]); + g2 = DataUtils.fromHalfFloat(data2[i + 1]); + b3 = DataUtils.fromHalfFloat(data2[i + 2]); + } else { + r = data2[i] / 255; + g2 = data2[i + 1] / 255; + b3 = data2[i + 2] / 255; + } + color.setRGB(r, g2, b3); + convertColorToLinear(color, cubeRenderTarget.texture.colorSpace); + const pixelIndex = i / 4; + const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize; + const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize; + switch (faceIndex) { + case 0: + coord.set(1, row, -col); + break; + case 1: + coord.set(-1, row, col); + break; + case 2: + coord.set(col, 1, -row); + break; + case 3: + coord.set(col, -1, row); + break; + case 4: + coord.set(col, row, 1); + break; + case 5: + coord.set(-col, row, -1); + break; + } + const lengthSq = coord.lengthSq(); + const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); + totalWeight += weight; + dir.copy(coord).normalize(); + SphericalHarmonics3.getBasisAt(dir, shBasis); + for (let j = 0; j < 9; j++) { + shCoefficients[j].x += shBasis[j] * color.r * weight; + shCoefficients[j].y += shBasis[j] * color.g * weight; + shCoefficients[j].z += shBasis[j] * color.b * weight; + } + } + } + const norm = 4 * Math.PI / totalWeight; + for (let j = 0; j < 9; j++) { + shCoefficients[j].x *= norm; + shCoefficients[j].y *= norm; + shCoefficients[j].z *= norm; + } + return new LightProbe(sh); + } +}; +function convertColorToLinear(color, colorSpace) { + switch (colorSpace) { + case SRGBColorSpace: + color.convertSRGBToLinear(); + break; + case LinearSRGBColorSpace: + case NoColorSpace: + break; + default: + console.warn("WARNING: LightProbeGenerator convertColorToLinear() encountered an unsupported color space."); + break; + } + return color; +} + +// node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js +var RectAreaLightTexturesLib = class { + static init() { + const LTC_MAT_1 = [1, 0, 0, 2e-5, 1, 0, 0, 503905e-9, 1, 0, 0, 201562e-8, 1, 0, 0, 453516e-8, 1, 0, 0, 806253e-8, 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, -448815e-12, 0.0224417, 199902e-10, 0.999495, -113079e-10, 0.0224406, 503651e-9, 0.999496, -452317e-10, 0.0224406, 201461e-8, 0.999496, -101772e-9, 0.0224406, 453287e-8, 0.999495, -180928e-9, 0.0224406, 805845e-8, 0.999497, -282702e-9, 0.0224406, 0.0125914, 0.999496, -407096e-9, 0.0224406, 0.0181319, 0.999498, -554114e-9, 0.0224406, 0.02468, 0.999499, -723768e-9, 0.0224406, 0.0322363, 0.999495, -916058e-9, 0.0224405, 0.0408009, 0.999499, -113101e-8, 0.0224408, 0.050375, 0.999494, -136863e-8, 0.0224405, 0.0609586, 0.999489, -162896e-8, 0.0224401, 0.0725537, 0.999489, -191201e-8, 0.0224414, 0.0851619, 0.999498, -221787e-8, 0.0224413, 0.0987867, 0.999492, -254642e-8, 0.0224409, 0.113426, 0.999507, -289779e-8, 0.0224417, 0.129088, 0.999494, -32716e-7, 0.0224386, 0.145767, 0.999546, -36673e-7, 0.0224424, 0.163472, 0.999543, -408166e-8, 0.0224387, 0.182182, 0.999499, -450056e-8, 0.0224338, 0.201843, 0.999503, -483661e-8, 0.0224203, 0.222198, 0.999546, -452928e-8, 0.022315, 0.241714, 0.999508, -587403e-8, 0.0224329, 0.262184, 0.999509, -638806e-8, 0.0224271, 0.285609, 0.999501, -691028e-8, 0.0224166, 0.309998, 0.999539, -741979e-8, 0.0223989, 0.335262, 0.999454, -786282e-8, 0.0223675, 0.361154, 0.999529, -811928e-8, 0.0222828, 0.387224, 0.999503, -799941e-8, 0.0221063, 0.41252, 0.999561, -952753e-8, 0.0223057, 0.438006, 0.999557, -99134e-7, 0.0222065, 0.466735, 0.999541, -0.0100935, 0.0220402, 0.495332, 0.999562, -996821e-8, 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, -979861e-8, 0.0148131, 0.917364, 0.99977, -967238e-8, 0.0140721, 0.938002, 0.999726, -869175e-8, 0.0129543, 0.957917, 0.99973, -866872e-8, 0.0122329, 0.976557, 0.999773, -731956e-8, 0.0108958, 0.994459, 0.999811, -756027e-8, 0.0102715, 1.01118, 0.999862, -583732e-8, 878781e-8, 1.02701, 0.999835, -631438e-8, 827529e-8, 1.04186, 0.999871, -450785e-8, 674583e-8, 1.05569, 0.999867, -486079e-8, 621041e-8, 1.06861, 0.999939, -322072e-8, 478301e-8, 1.08064, 0.999918, -318199e-8, 406395e-8, 1.09181, 1.00003, -193348e-8, 280682e-8, 1.10207, 0.999928, -153729e-8, 198741e-8, 1.11152, 0.999933, -623666e-9, 917714e-9, 1.12009, 1, -102387e-11, 907581e-12, 1.12813, 0.997866, -896716e-12, 0.0448334, 199584e-10, 0.997987, -225945e-10, 0.0448389, 502891e-9, 0.997987, -903781e-10, 0.0448388, 201156e-8, 0.997985, -203351e-9, 0.0448388, 452602e-8, 0.997986, -361514e-9, 0.0448388, 804629e-8, 0.997987, -56487e-8, 0.0448389, 0.0125724, 0.997988, -813423e-9, 0.0448389, 0.0181045, 0.997984, -110718e-8, 0.0448387, 0.0246427, 0.997985, -144616e-8, 0.0448388, 0.0321875, 0.997987, -183038e-8, 0.044839, 0.0407392, 0.997983, -225987e-8, 0.0448387, 0.0502986, 0.997991, -273467e-8, 0.0448389, 0.0608667, 0.997984, -325481e-8, 0.0448384, 0.0724444, 0.998002, -382043e-8, 0.044839, 0.0850348, 0.997997, -443145e-8, 0.0448396, 0.0986372, 0.998007, -508796e-8, 0.0448397, 0.113255, 0.998008, -578985e-8, 0.04484, 0.128891, 0.998003, -653683e-8, 0.0448384, 0.145548, 0.997983, -732713e-8, 0.0448358, 0.163221, 0.997985, -815454e-8, 0.0448358, 0.181899, 0.998005, -898985e-8, 0.0448286, 0.201533, 0.998026, -964404e-8, 0.0447934, 0.221821, 0.998055, -922677e-8, 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, -837456e-8, 0.0117826, 1.06852, 0.999722, -721769e-8, 983745e-8, 1.08069, 0.999817, -554067e-8, 769002e-8, 1.09176, 0.99983, -426961e-8, 5782e-6, 1.10211, 0.999964, -273904e-8, 374503e-8, 1.11152, 1.00001, -136739e-8, 187176e-8, 1.12031, 0.999946, 393227e-10, -28919e-9, 1.12804, 0.995847, -13435e-10, 0.0671785, 19916e-9, 0.995464, -338387e-10, 0.0671527, 501622e-9, 0.99547, -135355e-9, 0.0671531, 200649e-8, 0.995471, -30455e-8, 0.0671532, 451461e-8, 0.99547, -541423e-9, 0.0671531, 8026e-6, 0.995471, -84598e-8, 0.0671531, 0.0125407, 0.99547, -121823e-8, 0.0671531, 0.0180589, 0.99547, -165817e-8, 0.0671531, 0.0245806, 0.995463, -216583e-8, 0.0671526, 0.0321062, 0.995468, -274127e-8, 0.0671527, 0.0406366, 0.995474, -338447e-8, 0.0671534, 0.0501717, 0.995473, -409554e-8, 0.0671533, 0.0607131, 0.995478, -487451e-8, 0.0671531, 0.0722618, 0.995476, -572148e-8, 0.0671532, 0.0848191, 0.995477, -663658e-8, 0.0671539, 0.0983882, 0.995498, -761986e-8, 0.0671541, 0.112972, 0.995509, -867094e-8, 0.0671542, 0.128568, 0.995509, -978951e-8, 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, -845886e-8, 0.0116185, 1.09185, 0.999805, -63937e-7, 867209e-8, 1.10207, 0.99985, -414582e-8, 566823e-8, 1.1117, 0.999912, -207443e-8, 277562e-8, 1.12022, 1.00001, 870226e-10, -53766e-9, 1.12832, 0.991943, -178672e-11, 0.0893382, 198384e-10, 0.991952, -450183e-10, 0.089339, 499849e-9, 0.991956, -180074e-9, 0.0893394, 19994e-7, 0.991955, -405167e-9, 0.0893393, 449867e-8, 0.991953, -720298e-9, 0.0893391, 799764e-8, 0.991955, -112548e-8, 0.0893393, 0.0124964, 0.991957, -16207e-7, 0.0893395, 0.0179951, 0.991958, -220601e-8, 0.0893396, 0.0244939, 0.991947, -288137e-8, 0.0893385, 0.0319929, 0.991962, -364693e-8, 0.0893399, 0.0404933, 0.991965, -450264e-8, 0.0893399, 0.049995, 0.99198, -544862e-8, 0.0893411, 0.0604995, 0.99197, -648491e-8, 0.0893397, 0.0720074, 0.991976, -761164e-8, 0.089341, 0.0845207, 0.99198, -882891e-8, 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, -839065e-8, 0.0114607, 1.10213, 0.999697, -5666e-6, 763325e-8, 1.11169, 0.999869, -269902e-8, 364946e-8, 1.12042, 1.00001, 623836e-10, -319288e-10, 1.12832, 0.987221, -222675e-11, 0.111332, 197456e-10, 0.98739, -561116e-10, 0.111351, 497563e-9, 0.987448, -224453e-9, 0.111357, 199031e-8, 0.987441, -505019e-9, 0.111357, 44782e-7, 0.987442, -897816e-9, 0.111357, 796129e-8, 0.987442, -140284e-8, 0.111357, 0.0124396, 0.987444, -202012e-8, 0.111357, 0.0179132, 0.987442, -274964e-8, 0.111357, 0.0243824, 0.987446, -359147e-8, 0.111357, 0.0318474, 0.987435, -454562e-8, 0.111356, 0.0403086, 0.987461, -561225e-8, 0.111358, 0.0497678, 0.987458, -679125e-8, 0.111358, 0.0602239, 0.987443, -80828e-7, 0.111356, 0.0716792, 0.987476, -94872e-7, 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, -693474e-8, 943517e-8, 1.11175, 0.99975, -340478e-8, 464051e-8, 1.12056, 1.00001, 109172e-9, -112821e-9, 1.12853, 0.983383, -266524e-11, 0.133358, 196534e-10, 0.981942, -671009e-10, 0.133162, 494804e-9, 0.981946, -268405e-9, 0.133163, 197923e-8, 0.981944, -603912e-9, 0.133163, 445326e-8, 0.981941, -107362e-8, 0.133162, 791693e-8, 0.981946, -167755e-8, 0.133163, 0.0123703, 0.981944, -241569e-8, 0.133162, 0.0178135, 0.981945, -328807e-8, 0.133163, 0.0242466, 0.981945, -429472e-8, 0.133162, 0.03167, 0.981955, -543573e-8, 0.133164, 0.0400846, 0.981951, -671105e-8, 0.133163, 0.0494901, 0.981968, -812092e-8, 0.133165, 0.0598886, 0.981979, -966541e-8, 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, -832486e-8, 0.0113156, 1.11192, 0.999752, -410826e-8, 557892e-8, 1.12075, 1, 150957e-9, -119101e-9, 1.12885, 0.975169, -309397e-11, 0.154669, 195073e-10, 0.975439, -779608e-10, 0.154712, 491534e-9, 0.975464, -311847e-9, 0.154716, 196617e-8, 0.975464, -701656e-9, 0.154716, 442387e-8, 0.975462, -12474e-7, 0.154715, 78647e-7, 0.975461, -194906e-8, 0.154715, 0.0122886, 0.975464, -280667e-8, 0.154715, 0.0176959, 0.975468, -382025e-8, 0.154716, 0.0240867, 0.975471, -498985e-8, 0.154716, 0.0314612, 0.975472, -631541e-8, 0.154717, 0.0398199, 0.975486, -779719e-8, 0.154718, 0.0491639, 0.975489, -943505e-8, 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, -980173e-8, 0.0131944, 1.11206, 0.999652, -47426e-7, 640712e-8, 1.12104, 0.999998, 891673e-10, -10379e-8, 1.12906, 0.967868, -351885e-11, 0.175947, 193569e-10, 0.968001, -886733e-10, 0.175972, 487782e-9, 0.96801, -354697e-9, 0.175973, 195115e-8, 0.968012, -798063e-9, 0.175974, 439006e-8, 0.968011, -141879e-8, 0.175973, 780461e-8, 0.968011, -221686e-8, 0.175973, 0.0121948, 0.968016, -319231e-8, 0.175974, 0.0175607, 0.968019, -434515e-8, 0.175974, 0.0239027, 0.968018, -567538e-8, 0.175974, 0.0312208, 0.968033, -718308e-8, 0.175977, 0.0395158, 0.968049, -886836e-8, 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, -543881e-8, 740605e-8, 1.12131, 1.00003, 162239e-9, -105549e-9, 1.12946, 0.959505, -393734e-11, 0.196876, 191893e-10, 0.959599, -992157e-10, 0.196895, 483544e-9, 0.959641, -396868e-9, 0.196903, 19342e-7, 0.959599, -892948e-9, 0.196895, 435193e-8, 0.959603, -158747e-8, 0.196896, 77368e-7, 0.959604, -248042e-8, 0.196896, 0.0120888, 0.959605, -357184e-8, 0.196896, 0.0174082, 0.959605, -486169e-8, 0.196896, 0.0236949, 0.959613, -635008e-8, 0.196897, 0.0309497, 0.959619, -803696e-8, 0.196898, 0.0391725, 0.959636, -992255e-8, 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, -614003e-8, 829498e-8, 1.12151, 1.00008, 216624e-9, -146107e-9, 1.12993, 0.950129, -434955e-11, 0.217413, 190081e-10, 0.950264, -10957e-8, 0.217444, 47884e-8, 0.9503, -438299e-9, 0.217451, 191543e-8, 0.950246, -986124e-9, 0.21744, 430951e-8, 0.950246, -175311e-8, 0.21744, 766137e-8, 0.950245, -273923e-8, 0.21744, 0.011971, 0.950253, -394453e-8, 0.217441, 0.0172385, 0.950258, -536897e-8, 0.217442, 0.0234641, 0.950267, -701262e-8, 0.217444, 0.030648, 0.950277, -887551e-8, 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, -67359e-7, 9208e-6, 1.12191, 0.999967, 141846e-9, -657764e-10, 1.13024, 0.935608, -474692e-11, 0.236466, 187817e-10, 0.93996, -11971e-8, 0.237568, 473646e-9, 0.939959, -478845e-9, 0.237567, 18946e-7, 0.939954, -10774e-7, 0.237566, 426284e-8, 0.939956, -191538e-8, 0.237566, 757842e-8, 0.939954, -299277e-8, 0.237566, 0.0118413, 0.93996, -430961e-8, 0.237567, 0.0170518, 0.939969, -586589e-8, 0.237569, 0.02321, 0.939982, -766166e-8, 0.237572, 0.0303164, 0.939987, -969686e-8, 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, -744837e-8, 0.010155, 1.12237, 1.00002, 240209e-9, -752767e-10, 1.13089, 0.922948, -515351e-11, 0.255626, 186069e-10, 0.928785, -129623e-9, 0.257244, 468009e-9, 0.928761, -51849e-8, 0.257237, 187202e-8, 0.928751, -11666e-7, 0.257235, 421204e-8, 0.928751, -207395e-8, 0.257234, 74881e-7, 0.928754, -324055e-8, 0.257235, 0.0117002, 0.92876, -466639e-8, 0.257236, 0.0168486, 0.928763, -635149e-8, 0.257237, 0.0229334, 0.928774, -829584e-8, 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, -817112e-8, 0.0110647, 1.12262, 1.00003, 291686e-9, -168673e-9, 1.13139, 0.915304, -552675e-11, 0.275999, 183285e-10, 0.91668, -139285e-9, 0.276414, 461914e-9, 0.916664, -55713e-8, 0.276409, 184763e-8, 0.916653, -125354e-8, 0.276406, 415715e-8, 0.916651, -222851e-8, 0.276405, 739053e-8, 0.916655, -348205e-8, 0.276406, 0.0115478, 0.916653, -501414e-8, 0.276405, 0.0166291, 0.916667, -682478e-8, 0.276409, 0.0226346, 0.91668, -891398e-8, 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, -878063e-8, 0.0119567, 1.12319, 1.00002, 259038e-9, -108146e-9, 1.13177, 0.903945, -591681e-11, 0.295126, 181226e-10, 0.903668, -148672e-9, 0.295037, 455367e-9, 0.903677, -594683e-9, 0.29504, 182145e-8, 0.903673, -133805e-8, 0.295039, 409831e-8, 0.903666, -237872e-8, 0.295036, 728584e-8, 0.903668, -371676e-8, 0.295037, 0.0113842, 0.903679, -535212e-8, 0.29504, 0.0163936, 0.903684, -728479e-8, 0.295041, 0.0223141, 0.903698, -951473e-8, 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, -947007e-8, 0.0128731, 1.1237, 0.999978, 446316e-9, -169093e-9, 1.13253, 0.888362, -627064e-11, 0.312578, 178215e-10, 0.889988, -157791e-9, 0.313148, 448451e-9, 0.889825, -631076e-9, 0.313092, 179356e-8, 0.88984, -141994e-8, 0.313097, 403554e-8, 0.889828, -25243e-7, 0.313092, 717429e-8, 0.889831, -394421e-8, 0.313093, 0.0112099, 0.889831, -567962e-8, 0.313093, 0.0161425, 0.889844, -773051e-8, 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, 42612e-8, -193628e-9, 1.1333, 0.871555, -660007e-11, 0.329176, 174749e-10, 0.875255, -166579e-9, 0.330571, 441051e-9, 0.875644, -666394e-9, 0.330718, 176441e-8, 0.875159, -149903e-8, 0.330536, 396899e-8, 0.87516, -266493e-8, 0.330536, 7056e-6, 0.875158, -416393e-8, 0.330535, 0.0110251, 0.87516, -599598e-8, 0.330535, 0.0158764, 0.875163, -816108e-8, 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, 248678e-9, -14555e-8, 1.13413, 0.859519, -693595e-11, 0.347264, 171673e-10, 0.859843, -17503e-8, 0.347394, 433219e-9, 0.859656, -700076e-9, 0.347319, 173277e-8, 0.859671, -157517e-8, 0.347325, 389875e-8, 0.859669, -280028e-8, 0.347324, 693112e-8, 0.85967, -43754e-7, 0.347324, 0.01083, 0.859665, -630049e-8, 0.347321, 0.0155954, 0.859685, -85755e-7, 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, 339743e-9, -195763e-9, 1.13504, 0.845441, -729126e-11, 0.364305, 169208e-10, 0.843588, -183164e-9, 0.363506, 425067e-9, 0.843412, -73253e-8, 0.36343, 169999e-8, 0.843401, -164818e-8, 0.363426, 382495e-8, 0.843399, -293008e-8, 0.363425, 679993e-8, 0.843401, -457822e-8, 0.363425, 0.010625, 0.843394, -659249e-8, 0.363421, 0.0153002, 0.843398, -897282e-8, 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, 31774e-8, -169504e-9, 1.13598, 0.825551, -756799e-11, 0.378425, 165099e-10, 0.82664, -190922e-9, 0.378923, 416504e-9, 0.826323, -763495e-9, 0.378779, 16656e-7, 0.826359, -171789e-8, 0.378795, 374768e-8, 0.82636, -305402e-8, 0.378795, 666259e-8, 0.826368, -477185e-8, 0.378798, 0.0104104, 0.826364, -687131e-8, 0.378795, 0.0149912, 0.826368, -935232e-8, 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, 275604e-9, -148602e-9, 1.13674, 0.81075, -78735e-10, 0.394456, 161829e-10, 0.808692, -198293e-9, 0.393453, 407564e-9, 0.80846, -792877e-9, 0.39334, 162965e-8, 0.808595, -178416e-8, 0.393407, 366711e-8, 0.808597, -317182e-8, 0.393408, 651934e-8, 0.808598, -495589e-8, 0.393408, 0.0101866, 0.808591, -713627e-8, 0.393403, 0.0146689, 0.808592, -971285e-8, 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, 431817e-9, -198809e-9, 1.13792, 0.785886, -812608e-11, 0.405036, 157669e-10, 0.790388, -205278e-9, 0.407355, 398297e-9, 0.790145, -820824e-9, 0.407231, 159263e-8, 0.790135, -184681e-8, 0.407226, 358336e-8, 0.790119, -328316e-8, 0.407218, 637039e-8, 0.790126, -512988e-8, 0.40722, 99539e-7, 0.79013, -738684e-8, 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, 369494e-9, -145203e-9, 1.13901, 0.777662, -84153e-10, 0.423844, 154403e-10, 0.770458, -211714e-9, 0.419915, 38845e-8, 0.770716, -846888e-9, 0.420055, 155386e-8, 0.770982, -190567e-8, 0.420202, 349653e-8, 0.770981, -338782e-8, 0.420201, 621606e-8, 0.77098, -529338e-8, 0.4202, 971274e-8, 0.770983, -762223e-8, 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, 321364e-9, -149983e-9, 1.1402, 0.757901, -869074e-11, 0.436176, 151011e-10, 0.751195, -217848e-9, 0.432317, 378533e-9, 0.751178, -871373e-9, 0.432307, 15141e-7, 0.751195, -196061e-8, 0.432317, 34068e-7, 0.751198, -348552e-8, 0.432318, 605659e-8, 0.751195, -544599e-8, 0.432315, 946353e-8, 0.751207, -784203e-8, 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, 442449e-9, -231396e-9, 1.14146, 0.727498, -885074e-11, 0.441528, 145832e-10, 0.730897, -223525e-9, 0.443589, 368298e-9, 0.730796, -893996e-9, 0.443528, 147303e-8, 0.730805, -201149e-8, 0.443533, 331433e-8, 0.730814, -357596e-8, 0.443538, 589222e-8, 0.730815, -558734e-8, 0.443538, 920678e-8, 0.730822, -804544e-8, 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, 372455e-9, -200295e-9, 1.14291, 0.708622, -907597e-11, 0.45304, 141962e-10, 0.711162, -228911e-9, 0.454662, 358052e-9, 0.709812, -914446e-9, 0.453797, 143034e-8, 0.709865, -205819e-8, 0.453834, 321935e-8, 0.709864, -365894e-8, 0.453833, 572331e-8, 0.709855, -571692e-8, 0.453826, 894278e-8, 0.709862, -823201e-8, 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, 234083e-9, -108712e-9, 1.14441, 0.683895, -924677e-11, 0.46015, 137429e-10, 0.68833, -233383e-9, 0.463134, 346865e-9, 0.688368, -933547e-9, 0.463159, 138748e-8, 0.688367, -210049e-8, 0.463159, 312187e-8, 0.688369, -373415e-8, 0.463159, 555004e-8, 0.688377, -583449e-8, 0.463163, 867216e-8, 0.688386, -840128e-8, 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, 373016e-9, -235606e-9, 1.1459, 0.662251, -939016e-11, 0.468575, 132714e-10, 0.666634, -237624e-9, 0.471675, 335842e-9, 0.666411, -950385e-9, 0.471516, 134321e-8, 0.666399, -213833e-8, 0.471509, 302221e-8, 0.666386, -38014e-7, 0.471499, 537283e-8, 0.666405, -593958e-8, 0.471511, 839533e-8, 0.666406, -855253e-8, 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, 368831e-9, -211581e-9, 1.14744, 0.651047, -960845e-11, 0.484101, 12922e-9, 0.644145, -241347e-9, 0.478968, 324578e-9, 0.64396, -965142e-9, 0.478831, 129798e-8, 0.64396, -217154e-8, 0.47883, 292046e-8, 0.643968, -386049e-8, 0.478835, 519202e-8, 0.643974, -603186e-8, 0.478838, 81128e-7, 0.643977, -86854e-7, 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, 229839e-9, -188283e-9, 1.14919, 0.613867, -964198e-11, 0.479449, 123452e-10, 0.621485, -244534e-9, 0.485399, 313091e-9, 0.621429, -978202e-9, 0.485353, 125245e-8, 0.62112, -220004e-8, 0.485114, 281687e-8, 0.621119, -39111e-7, 0.485112, 500783e-8, 0.621122, -611091e-8, 0.485112, 782498e-8, 0.621133, -879922e-8, 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, 542714e-9, -282356e-9, 1.15108, 0.592656, -980249e-11, 0.486018, 119532e-10, 0.598467, -247275e-9, 0.490781, 301531e-9, 0.597934, -988317e-9, 0.490343, 120517e-8, 0.597903, -222366e-8, 0.490319, 27116e-7, 0.597913, -395315e-8, 0.490327, 482077e-8, 0.597919, -617653e-8, 0.490329, 753264e-8, 0.597936, -889375e-8, 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, 540029e-9, -194487e-9, 1.15299, 0.574483, -989066e-11, 0.494533, 114896e-10, 0.574478, -249127e-9, 0.494528, 289403e-9, 0.574607, -996811e-9, 0.494637, 115797e-8, 0.574396, -224241e-8, 0.494458, 260498e-8, 0.574377, -398632e-8, 0.49444, 463102e-8, 0.574386, -622836e-8, 0.494445, 723623e-8, 0.574401, -89683e-7, 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, 271022e-9, -12989e-8, 1.15514, 0.538716, -990918e-11, 0.486732, 109675e-10, 0.550656, -250642e-9, 0.497518, 277412e-9, 0.55057, -100265e-8, 0.497441, 110974e-8, 0.550903, -225672e-8, 0.497733, 249779e-8, 0.550568, -401046e-8, 0.497438, 443906e-8, 0.550574, -626613e-8, 0.49744, 693637e-8, 0.550591, -90226e-7, 0.497449, 998921e-8, 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, 27329e-8, -107883e-9, 1.15736, 0.525324, -999341e-11, 0.498153, 105385e-10, 0.526513, -251605e-9, 0.499277, 265329e-9, 0.526517, -100641e-8, 0.499282, 10613e-7, 0.526588, -226466e-8, 0.499337, 238823e-8, 0.526539, -40255e-7, 0.499302, 424535e-8, 0.526547, -628954e-8, 0.499306, 663364e-8, 0.526561, -905628e-8, 0.499313, 955337e-8, 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, 743097e-9, -379265e-9, 1.15955, 0.501042, -998428e-11, 0.498726, 100306e-10, 0.502992, -252112e-9, 0.500665, 253283e-9, 0.502417, -100791e-8, 0.500092, 101259e-8, 0.502965, -226919e-8, 0.500621, 227978e-8, 0.502318, -403109e-8, 0.499994, 405011e-8, 0.502333, -629832e-8, 0.500005, 632868e-8, 0.502362, -906907e-8, 0.500027, 911446e-8, 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, 605203e-9, -231013e-9, 1.16207, 0.482935, -101177e-10, 0.504695, 968142e-11, 0.477554, -251521e-9, 0.499071, 240676e-9, 0.477904, -100683e-8, 0.499436, 96342e-8, 0.478368, -226636e-8, 0.499899, 21687e-7, 0.477977, -402719e-8, 0.499513, 385384e-8, 0.477993, -629226e-8, 0.499525, 60221e-7, 0.478011, -906011e-8, 0.499536, 867289e-8, 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, 119402e-9, -208547e-10, 1.16471, 0.447827, -100414e-10, 0.491543, 914833e-11, 0.454778, -251257e-9, 0.499172, 22891e-8, 0.453519, -100342e-8, 0.497787, 914184e-9, 0.45357, -225776e-8, 0.497847, 205701e-8, 0.453578, -401371e-8, 0.497855, 365705e-8, 0.45357, -627107e-8, 0.497841, 571453e-8, 0.453598, -902968e-8, 0.497864, 823019e-8, 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, 393403e-9, -111086e-9, 1.16772, 0.396806, -971563e-11, 0.457671, 842355e-11, 0.429186, -249421e-9, 0.495017, 21625e-8, 0.429324, -998052e-9, 0.495173, 865322e-9, 0.429175, -224487e-8, 0.494999, 194637e-8, 0.429129, -399041e-8, 0.494952, 346004e-8, 0.429153, -623476e-8, 0.494974, 540684e-8, 0.429168, -89773e-7, 0.494983, 778714e-8, 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, 632388e-9, -254483e-9, 1.1706, 0.379821, -957289e-11, 0.460637, 789337e-11, 0.405188, -247483e-9, 0.491396, 204064e-9, 0.404796, -989434e-9, 0.490914, 815853e-9, 0.40483, -222607e-8, 0.490949, 183559e-8, 0.40473, -395723e-8, 0.49084, 326332e-8, 0.404731, -618287e-8, 0.490836, 509945e-8, 0.404768, -890258e-8, 0.490871, 734463e-8, 0.404791, -0.0121156, 0.490883, 999992e-8, 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, 381574e-9, -812203e-10, 1.17403, 0.367636, -961342e-11, 0.469176, 753287e-11, 0.380377, -244772e-9, 0.485434, 191797e-9, 0.380416, -978857e-9, 0.485475, 767015e-9, 0.380376, -220165e-8, 0.485435, 172522e-8, 0.380419, -391408e-8, 0.485487, 306734e-8, 0.380438, -611549e-8, 0.485505, 479332e-8, 0.380462, -880558e-8, 0.485525, 690391e-8, 0.380496, -0.0119837, 0.485551, 940039e-8, 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, -512408e-10, 112444e-9, 1.17727, 0.316912, -934977e-11, 0.425996, 695559e-11, 0.356423, -241372e-9, 0.479108, 179562e-9, 0.356272, -965292e-9, 0.478897, 71811e-8, 0.356262, -217182e-8, 0.478894, 161574e-8, 0.356265, -386092e-8, 0.478895, 287261e-8, 0.356278, -60324e-7, 0.478905, 448907e-8, 0.356293, -868565e-8, 0.478914, 646572e-8, 0.356346, -0.0118207, 0.478965, 880438e-8, 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, 461885e-9, -772859e-10, 1.18099, 0.321287, -935049e-11, 0.455413, 659662e-11, 0.332595, -237513e-9, 0.471437, 167562e-9, 0.332729, -949964e-9, 0.471618, 670192e-9, 0.332305, -213618e-8, 0.471028, 150712e-8, 0.332326, -379765e-8, 0.471055, 267959e-8, 0.332344, -593353e-8, 0.471072, 418751e-8, 0.332356, -854349e-8, 0.471077, 603172e-8, 0.332403, -0.0116268, 0.471121, 821362e-8, 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, 5762e-7, -184807e-9, 1.18519, 0.303474, -916603e-11, 0.4542, 61243e-10, 0.308894, -232869e-9, 0.462306, 155592e-9, 0.309426, -931661e-9, 0.463093, 622499e-9, 0.308643, -20949e-7, 0.461933, 139979e-8, 0.308651, -37242e-7, 0.461941, 248874e-8, 0.308662, -581873e-8, 0.46195, 388933e-8, 0.308687, -837818e-8, 0.461974, 560247e-8, 0.308728, -0.0114016, 0.462011, 762948e-8, 0.308789, -0.0148884, 0.462067, 997326e-8, 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, 617773e-9, -271268e-9, 1.18961, 0.285803, -905752e-11, 0.452348, 572272e-11, 0.284689, -22732e-8, 0.450581, 143626e-9, 0.285263, -910214e-9, 0.451482, 575099e-9, 0.285302, -204784e-8, 0.451553, 129395e-8, 0.285318, -364057e-8, 0.451574, 23006e-7, 0.28533, -568813e-8, 0.451585, 359547e-8, 0.285361, -819001e-8, 0.451618, 517934e-8, 0.285397, -0.0111458, 0.45165, 7054e-6, 0.285447, -0.0145536, 0.451688, 922167e-8, 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, -520778e-9, 289926e-9, 1.19389, 0.263546, -883274e-11, 0.441896, 526783e-11, 0.262352, -221849e-9, 0.439889, 132311e-9, 0.262325, -886683e-9, 0.439848, 528824e-9, 0.26228, -199476e-8, 0.439765, 118975e-8, 0.262372, -354671e-8, 0.439922, 211568e-8, 0.26239, -554141e-8, 0.439941, 330652e-8, 0.262412, -797888e-8, 0.439961, 476346e-8, 0.262453, -0.0108584, 0.440002, 648818e-8, 0.262528, -0.0141788, 0.440085, 84835e-7, 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, 286808e-10, 145564e-10, 1.19901, 0.227089, -841413e-11, 0.404216, 472707e-11, 0.239725, -215083e-9, 0.426708, 120833e-9, 0.239904, -860718e-9, 0.427028, 483555e-9, 0.239911, -193661e-8, 0.427039, 108806e-8, 0.239914, -344276e-8, 0.42704, 193457e-8, 0.239933, -537907e-8, 0.427064, 302363e-8, 0.239944, -774482e-8, 0.427065, 435604e-8, 0.239993, -0.01054, 0.427122, 593398e-8, 0.240052, -0.0137626, 0.427179, 775987e-8, 0.240148, -0.0174115, 0.427279, 983854e-8, 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, 804378e-9, -330876e-9, 1.20462, 0.214668, -821282e-11, 0.406619, 433582e-11, 0.218053, -208144e-9, 0.413025, 109887e-9, 0.217987, -832212e-9, 0.412901, 439362e-9, 0.217971, -187246e-8, 0.412876, 988623e-9, 0.217968, -332855e-8, 0.41286, 175772e-8, 0.217985, -520055e-8, 0.412882, 274729e-8, 0.218014, -748814e-8, 0.412916, 395842e-8, 0.218054, -0.0101901, 0.412957, 539274e-8, 0.218106, -0.0133057, 0.413005, 705348e-8, 0.218217, -0.0168342, 0.413139, 894581e-8, 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, 132758e-8, -559424e-9, 1.21058, 0.193925, -793421e-11, 0.391974, 392537e-11, 0.196746, -200315e-9, 0.397675, 991033e-10, 0.19667, -801099e-9, 0.397521, 396342e-9, 0.196633, -180246e-8, 0.397445, 891829e-9, 0.196654, -320443e-8, 0.397482, 158582e-8, 0.196659, -500647e-8, 0.39748, 247867e-8, 0.196683, -72086e-7, 0.397506, 357167e-8, 0.196728, -981001e-8, 0.397562, 486675e-8, 0.196792, -0.0128096, 0.397633, 636707e-8, 0.19689, -0.0162055, 0.397746, 807752e-8, 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, 385685e-10, -4203e-8, 1.21676, 0.178114, -766075e-11, 0.385418, 354027e-11, 0.176074, -191966e-9, 0.381002, 887135e-10, 0.17601, -767549e-9, 0.380861, 354715e-9, 0.17598, -172696e-8, 0.380798, 798168e-9, 0.175994, -307012e-8, 0.380824, 141928e-8, 0.176017, -479684e-8, 0.380858, 221859e-8, 0.176019, -690648e-8, 0.380839, 319714e-8, 0.176072, -939888e-8, 0.380913, 43572e-7, 0.176131, -0.0122726, 0.380979, 5702e-6, 0.176239, -0.0155264, 0.38112, 723689e-8, 0.176371, -0.0191551, 0.381272, 896907e-8, 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, -197169e-8, 912402e-9, 1.22338, 0.151174, -720365e-11, 0.351531, 309789e-11, 0.155594, -18279e-8, 0.361806, 78608e-9, 0.156099, -731569e-9, 0.362982, 314615e-9, 0.156053, -164578e-8, 0.362869, 707845e-9, 0.156093, -29261e-7, 0.362961, 125884e-8, 0.156099, -457155e-8, 0.362959, 196783e-8, 0.15612, -658224e-8, 0.362982, 283622e-8, 0.156168, -895774e-8, 0.363048, 386625e-8, 0.156221, -0.0116962, 0.363101, 506109e-8, 0.156324, -0.0147973, 0.363241, 642675e-8, 0.156476, -0.0182503, 0.363448, 797175e-8, 0.156731, -0.0220266, 0.36384, 971484e-8, 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, -515531e-9, 135226e-9, 1.23135, 0.137468, -686011e-11, 0.345041, 273315e-11, 0.13703, -173378e-9, 0.343936, 690761e-10, 0.136986, -693048e-9, 0.34383, 276126e-9, 0.136964, -155931e-8, 0.343761, 621337e-9, 0.137003, -277211e-8, 0.343863, 110494e-8, 0.137012, -433103e-8, 0.343868, 172744e-8, 0.137043, -623606e-8, 0.343916, 249022e-8, 0.13709, -84868e-7, 0.343986, 339559e-8, 0.137145, -0.0110814, 0.344045, 444687e-8, 0.137242, -0.0140187, 0.344177, 565007e-8, 0.137431, -0.0172713, 0.344491, 701868e-8, 0.137644, -0.0208605, 0.344805, 856042e-8, 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, 190634e-8, -10291e-7, 1.23981, 0.118493, -647439e-11, 0.32272, 23772e-10, 0.118765, -163023e-9, 0.323456, 598573e-10, 0.118772, -65212e-8, 0.323477, 239447e-9, 0.118843, -146741e-8, 0.323657, 538881e-9, 0.118804, -260846e-8, 0.323553, 95826e-8, 0.118826, -407576e-8, 0.323595, 149845e-8, 0.118846, -586826e-8, 0.323617, 216047e-8, 0.118886, -798578e-8, 0.32367, 294679e-8, 0.118947, -0.0104273, 0.323753, 386124e-8, 0.119055, -0.0131909, 0.323922, 490999e-8, 0.119241, -0.0162444, 0.324251, 610804e-8, 0.11944, -0.0196339, 0.324544, 745805e-8, 0.119739, -0.0233378, 0.325026, 897805e-8, 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, 298198e-8, -151801e-8, 1.24959, 0.10097, -602574e-11, 0.300277, 202619e-11, 0.101577, -152164e-9, 0.302077, 511662e-10, 0.101572, -608889e-9, 0.302066, 204751e-9, 0.101566, -136997e-8, 0.302047, 460753e-9, 0.101592, -243557e-8, 0.302114, 819497e-9, 0.101608, -38053e-7, 0.30214, 128154e-8, 0.101627, -547906e-8, 0.30216, 18483e-7, 0.101669, -745647e-8, 0.302224, 252223e-8, 0.101732, -973615e-8, 0.302318, 330716e-8, 0.101844, -0.0123097, 0.302513, 421061e-8, 0.102025, -0.0151681, 0.30285, 524481e-8, 0.102224, -0.0183334, 0.303166, 64154e-7, 0.102515, -0.0217819, 0.303654, 774063e-8, 0.102886, -0.0255067, 0.304243, 92398e-7, 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, 239052e-8, -126861e-8, 1.25987, 0.0852715, -560067e-11, 0.279021, 171162e-11, 0.0854143, -140871e-9, 0.279483, 430516e-10, 0.0854191, -563385e-9, 0.2795, 172184e-9, 0.0854188, -126753e-8, 0.279493, 387464e-9, 0.0854229, -225337e-8, 0.279501, 68918e-8, 0.0854443, -352086e-8, 0.279549, 107803e-8, 0.0854697, -506962e-8, 0.279591, 155536e-8, 0.0855093, -689873e-8, 0.279652, 212354e-8, 0.0855724, -900821e-8, 0.279752, 278703e-8, 0.0856991, -0.0113799, 0.280011, 35551e-7, 0.085855, -0.0140314, 0.280297, 443449e-8, 0.0860682, -0.016963, 0.280682, 543636e-8, 0.086344, -0.0201438, 0.281159, 65788e-7, 0.0867426, -0.0235999, 0.281886, 787977e-8, 0.087239, -0.0273069, 0.282745, 93606e-7, 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, -575153e-9, 110644e-9, 1.27133, 0.0702429, -512222e-11, 0.255273, 140947e-11, 0.0702981, -128826e-9, 0.255469, 354488e-10, 0.0703691, -515562e-9, 0.255727, 141874e-9, 0.0703805, -116e-5, 0.255754, 31929e-8, 0.0703961, -206224e-8, 0.255813, 567999e-9, 0.0704102, -322223e-8, 0.255839, 88871e-8, 0.0704298, -463928e-8, 0.255863, 128272e-8, 0.0704759, -631375e-8, 0.255953, 175283e-8, 0.0705434, -824317e-8, 0.256079, 230342e-8, 0.0706693, -0.010412, 0.25636, 29443e-7, 0.0708189, -0.0128439, 0.256647, 368031e-8, 0.0710364, -0.0155177, 0.257084, 452614e-8, 0.0713223, -0.0184374, 0.257637, 549706e-8, 0.0717182, -0.0216002, 0.258416, 661246e-8, 0.072321, -0.0249966, 0.259699, 790147e-8, 0.0731446, -0.0286566, 0.261475, 93884e-7, 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, -70087e-7, 315668e-8, 1.28428, 0.0556653, -459654e-11, 0.227325, 112556e-11, 0.0565238, -116382e-9, 0.230826, 284985e-10, 0.0565717, -465666e-9, 0.231026, 114036e-9, 0.0565859, -104773e-8, 0.231079, 256656e-9, 0.0565761, -186255e-8, 0.231025, 45663e-8, 0.0565913, -291002e-8, 0.231058, 714664e-9, 0.0566108, -418998e-8, 0.231085, 103224e-8, 0.0566532, -570206e-8, 0.231169, 141202e-8, 0.0567473, -743666e-8, 0.231417, 186018e-8, 0.0568567, -940298e-8, 0.231661, 238264e-8, 0.0569859, -0.0115991, 0.231895, 298699e-8, 0.0572221, -0.0140096, 0.232456, 368957e-8, 0.057519, -0.0166508, 0.233096, 450303e-8, 0.0579534, -0.01951, 0.234094, 544945e-8, 0.0585922, -0.0225991, 0.235629, 655564e-8, 0.0595647, -0.0259416, 0.238106, 785724e-8, 0.0609109, -0.0295661, 0.241557, 939127e-8, 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, 598668e-8, 1.29873, 0.0437928, -409594e-11, 0.204012, 879224e-12, 0.0440166, -103395e-9, 0.205049, 221946e-10, 0.0440529, -413633e-9, 0.205225, 887981e-10, 0.0440493, -930594e-9, 0.2052, 199858e-9, 0.0439884, -165352e-8, 0.204901, 355495e-9, 0.0440716, -25849e-7, 0.205255, 556983e-9, 0.0440968, -372222e-8, 0.205311, 805326e-9, 0.0441359, -506478e-8, 0.205391, 110333e-8, 0.0442231, -660384e-8, 0.205638, 145768e-8, 0.0443254, -835246e-8, 0.205877, 187275e-8, 0.0444832, -0.0102992, 0.20627, 235938e-8, 0.0447001, -0.0124449, 0.206796, 29299e-7, 0.0450168, -0.0147935, 0.207593, 36005e-7, 0.0454816, -0.017336, 0.208819, 439246e-8, 0.0462446, -0.0201156, 0.211036, 533864e-8, 0.0473694, -0.0231568, 0.214388, 646984e-8, 0.0490191, -0.0264941, 0.219357, 783856e-8, 0.0512776, -0.030184, 0.226061, 950182e-8, 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, 70019e-8, -20039e-8, 1.31656, 0.0325964, -355447e-11, 0.176706, 655682e-12, 0.0329333, -899174e-10, 0.178527, 165869e-10, 0.0329181, -359637e-9, 0.178453, 663498e-10, 0.0329085, -808991e-9, 0.178383, 149332e-9, 0.0329181, -143826e-8, 0.178394, 265873e-9, 0.0329425, -224678e-8, 0.178517, 416597e-9, 0.0329511, -323575e-8, 0.17849, 603299e-9, 0.033011, -439875e-8, 0.178695, 829422e-9, 0.0330733, -574059e-8, 0.178843, 109908e-8, 0.0331857, -725896e-8, 0.179176, 141933e-8, 0.0333445, -895289e-8, 0.179618, 17999e-7, 0.0335674, -0.0108219, 0.180238, 225316e-8, 0.033939, -0.0128687, 0.181417, 279765e-8, 0.0345239, -0.015114, 0.183395, 34564e-7, 0.0354458, -0.017596, 0.186616, 425864e-8, 0.0368313, -0.0203524, 0.191547, 524936e-8, 0.0386115, -0.0234105, 0.197508, 647033e-8, 0.0410303, -0.0268509, 0.205395, 798121e-8, 0.0442245, -0.0307481, 0.215365, 98557e-7, 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, -726867e-8, 1.3382, 0.0229227, -299799e-11, 0.148623, 462391e-12, 0.0232194, -758796e-10, 0.15054, 117033e-10, 0.0232315, -303636e-9, 0.15063, 468397e-10, 0.0232354, -683189e-9, 0.150624, 105472e-9, 0.0232092, -12136e-7, 0.150445, 187744e-9, 0.0232523, -189765e-8, 0.150679, 294847e-9, 0.0232828, -273247e-8, 0.150789, 428013e-9, 0.0233371, -371287e-8, 0.150995, 591134e-9, 0.0234015, -484794e-8, 0.15118, 787642e-9, 0.023514, -612877e-8, 0.151562, 102547e-8, 0.023679, -756125e-8, 0.152116, 131351e-8, 0.0239559, -914651e-8, 0.153162, 166594e-8, 0.0244334, -0.010904, 0.155133, 210182e-8, 0.025139, -0.0128615, 0.158035, 264406e-8, 0.0262598, -0.0150628, 0.162751, 332923e-8, 0.0277875, -0.0175532, 0.168944, 419773e-8, 0.0298472, -0.0203981, 0.176835, 530034e-8, 0.0325444, -0.023655, 0.186686, 669777e-8, 0.0355581, -0.0272982, 0.196248, 842661e-8, 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, -730117e-8, 0.0283133, 1.33252, 0.999713, 0.0234648, -0.0121785, 1.36397, 0.0152135, -245447e-11, 0.122795, 304092e-12, 0.0151652, -615778e-10, 0.122399, 76292e-10, 0.0151181, -245948e-9, 0.122023, 304802e-10, 0.0151203, -553394e-9, 0.12203, 686634e-10, 0.015125, -983841e-9, 0.122037, 122463e-9, 0.0151427, -153774e-8, 0.12214, 192706e-9, 0.0151708, -22103e-7, 0.122237, 281219e-9, 0.0152115, -300741e-8, 0.12238, 390804e-9, 0.0152877, -392494e-8, 0.1227, 526317e-9, 0.015412, -496597e-8, 0.123244, 69443e-8, 0.0156201, -613314e-8, 0.124228, 90547e-8, 0.0159658, -744113e-8, 0.125945, 11732e-7, 0.0165674, -892546e-8, 0.129098, 151888e-8, 0.017487, -0.010627, 0.133865, 197007e-8, 0.018839, -0.0126043, 0.140682, 25637e-7, 0.020554, -0.0148814, 0.148534, 333637e-8, 0.0226727, -0.0175123, 0.157381, 433738e-8, 0.0251879, -0.0205266, 0.166685, 561664e-8, 0.0283635, -0.0240319, 0.177796, 725563e-8, 0.0318694, -0.0279432, 0.188251, 928811e-8, 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, -605712e-8, 0.0273966, 1.36158, 0.99994, 0.0263276, -0.0138124, 1.3943, 867437e-8, -186005e-11, 0.0928979, 173682e-12, 864003e-8, -466389e-10, 0.0925237, 435505e-11, 864593e-8, -186594e-9, 0.0925806, 174322e-10, 864095e-8, -419639e-9, 0.0924903, 392862e-10, 863851e-8, -746272e-9, 0.0924589, 702598e-10, 868531e-8, -116456e-8, 0.0929, 111188e-9, 869667e-8, -167711e-8, 0.0928529, 163867e-9, 874332e-8, -228051e-8, 0.0930914, 23104e-8, 882709e-8, -297864e-8, 0.0935679, 31741e-8, 898874e-8, -377557e-8, 0.0946165, 430186e-9, 929346e-8, -469247e-8, 0.0967406, 580383e-9, 978271e-8, -575491e-8, 0.100084, 783529e-9, 0.0105746, -701514e-8, 0.105447, 106304e-8, 0.0116949, -851797e-8, 0.112494, 144685e-8, 0.0130419, -0.0102757, 0.119876, 196439e-8, 0.0148375, -0.012381, 0.129034, 266433e-8, 0.0168725, -0.01482, 0.137812, 358364e-8, 0.0193689, -0.0176563, 0.147696, 478132e-8, 0.0222691, -0.0209211, 0.157795, 631721e-8, 0.0256891, -0.0246655, 0.168431, 826346e-8, 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, -95256e-7, 1.43312, 384146e-8, -124311e-11, 0.0613583, 778271e-13, 390023e-8, -314043e-10, 0.0622919, 196626e-11, 389971e-8, -125622e-9, 0.0622632, 787379e-11, 389491e-8, -282352e-9, 0.0620659, 1778e-8, 391618e-8, -502512e-9, 0.0624687, 320918e-10, 392662e-8, -784458e-9, 0.0625113, 515573e-10, 396053e-8, -112907e-8, 0.0628175, 778668e-10, 401911e-8, -153821e-8, 0.0633286, 113811e-9, 414994e-8, -20208e-7, 0.0646443, 16445e-8, 441223e-8, -260007e-8, 0.0673886, 237734e-9, 484427e-8, -33097e-7, 0.0716528, 345929e-9, 549109e-8, -418966e-8, 0.0774998, 505987e-9, 636293e-8, -527331e-8, 0.0844758, 739208e-9, 746566e-8, -660428e-8, 0.0921325, 107347e-8, 876625e-8, -818826e-8, 0.0997067, 153691e-8, 0.0103125, -0.0100811, 0.107433, 217153e-8, 0.0123309, -0.0123643, 0.117088, 303427e-8, 0.0146274, -0.0150007, 0.126438, 416018e-8, 0.0172295, -0.0180531, 0.135672, 561513e-8, 0.0204248, -0.0215962, 0.146244, 7478e-6, 0.0241597, -0.0256234, 0.157481, 981046e-8, 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, -102222e-8, 678929e-9, 1.48398, 965494e-9, -627338e-12, 0.0306409, 197672e-13, 99168e-8, -158573e-10, 0.0314638, 499803e-12, 991068e-9, -634012e-10, 0.031363, 200682e-11, 974567e-9, -14144e-8, 0.03036, 457312e-11, 998079e-9, -252812e-9, 0.031496, 860131e-11, 102243e-8, -396506e-9, 0.0319955, 148288e-10, 107877e-8, -577593e-9, 0.0331376, 249141e-10, 121622e-8, -816816e-9, 0.0359396, 423011e-10, 14455e-7, -113761e-8, 0.0399652, 724613e-10, 178791e-8, -156959e-8, 0.0450556, 123929e-9, 225668e-8, -214064e-8, 0.0508025, 208531e-9, 285627e-8, -287655e-8, 0.0568443, 341969e-9, 35991e-7, -380271e-8, 0.0630892, 544158e-9, 455524e-8, -496264e-8, 0.0702204, 842423e-9, 569143e-8, -63793e-7, 0.0773426, 126704e-8, 716928e-8, -813531e-8, 0.0860839, 186642e-8, 885307e-8, -0.0101946, 0.0944079, 267014e-8, 0.0109316, -0.0126386, 0.103951, 374033e-8, 0.0133704, -0.0154876, 0.113786, 51304e-7, 0.0161525, -0.0187317, 0.123477, 688858e-8, 0.0194267, -0.0224652, 0.133986, 910557e-8, 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, 619747e-11, -1e-7, 778326e-8, 796756e-16, 237499e-13, -999999e-13, 282592e-10, 114596e-15, 100292e-11, -166369e-11, 250354e-9, 677492e-14, 350752e-11, -637769e-11, 357289e-9, 631655e-13, 826445e-11, -174689e-10, 516179e-9, 31851e-11, 242481e-10, -450868e-10, 10223e-7, 130577e-11, 455631e-10, -89044e-9, 144302e-8, 374587e-11, 971222e-10, -178311e-9, 241912e-8, 102584e-10, 171403e-9, -313976e-9, 354938e-8, 236481e-10, 292747e-9, -520026e-9, 513765e-8, 496014e-10, 789827e-9, -118187e-8, 0.0238621, 139056e-9, 114093e-8, -171827e-8, 0.0286691, 244093e-9, 176119e-8, -249667e-8, 0.0368565, 420623e-9, 22233e-7, -333742e-8, 0.0400469, 65673e-8, 343382e-8, -481976e-8, 0.0535751, 109323e-8, 427602e-8, -600755e-8, 0.057099, 155268e-8, 461435e-8, -737637e-8, 0.0551084, 215031e-8, 695698e-8, -971401e-8, 0.0715767, 316529e-8, 867619e-8, -0.0120943, 0.0793314, 436995e-8, 0.0106694, -0.0148202, 0.0869391, 58959e-7, 0.0140351, -0.0183501, 0.101572, 798757e-8, 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]; + const LTC_MAT_2 = [1, 0, 0, 0, 1, 791421e-36, 0, 0, 1, 104392e-29, 0, 0, 1, 349405e-26, 0, 0, 1, 109923e-23, 0, 0, 1, 947414e-22, 0, 0, 1, 359627e-20, 0, 0, 1, 772053e-19, 0, 0, 1, 108799e-17, 0, 0, 1, 110655e-16, 0, 0, 1, 865818e-16, 0, 0, 0.999998, 545037e-15, 0, 0, 0.999994, 285095e-14, 0, 0, 0.999989, 126931e-13, 0, 0, 0.999973, 489938e-13, 0, 0, 0.999947, 166347e-12, 0, 0, 0.999894, 502694e-12, 0, 0, 0.999798, 136532e-11, 0, 0, 0.999617, 335898e-11, 0, 0, 0.999234, 752126e-11, 0, 0, 0.998258, 152586e-10, 0, 0, 0.99504, 266207e-10, 0, 0, 0.980816, 236802e-10, 0, 0, 0.967553, 207684e-11, 0, 0, 0.966877, 403733e-11, 0, 0, 0.965752, 741174e-11, 0, 0, 0.96382, 127746e-10, 0, 0, 0.960306, 202792e-10, 0, 0, 0.953619, 280232e-10, 0, 0, 0.941103, 278816e-10, 0, 0, 0.926619, 160221e-10, 0, 0, 0.920983, 235164e-10, 0, 0, 0.912293, 311924e-10, 0, 0.0158731, 0.899277, 348118e-10, 0, 0.0476191, 0.880884, 26041e-9, 0, 0.0793651, 0.870399, 338726e-10, 0, 0.111111, 0.856138, 392906e-10, 0, 0.142857, 0.837436, 372874e-10, 0, 0.174603, 0.820973, 392558e-10, 0, 0.206349, 0.803583, 434658e-10, 0, 0.238095, 0.782168, 40256e-9, 0, 0.269841, 0.764107, 448159e-10, 0, 0.301587, 0.743092, 457627e-10, 0, 0.333333, 0.721626, 455314e-10, 0, 0.365079, 0.700375, 477335e-10, 0, 0.396825, 0.677334, 461072e-10, 0, 0.428571, 0.655702, 484393e-10, 0, 0.460317, 0.632059, 464583e-10, 0, 0.492064, 0.610125, 483923e-10, 0, 0.52381, 0.58653, 464342e-10, 0, 0.555556, 0.564508, 477033e-10, 0, 0.587302, 0.541405, 459263e-10, 0, 0.619048, 0.519556, 46412e-9, 0, 0.650794, 0.497292, 448913e-10, 0, 0.68254, 0.475898, 445789e-10, 0, 0.714286, 0.454722, 433496e-10, 0, 0.746032, 0.434042, 423054e-10, 0, 0.777778, 0.414126, 413737e-10, 0, 0.809524, 0.394387, 397265e-10, 0, 0.84127, 0.375841, 390709e-10, 0, 0.873016, 0.357219, 369938e-10, 0, 0.904762, 0.340084, 365618e-10, 0, 0.936508, 0.322714, 342533e-10, 0, 0.968254, 0.306974, 339596e-10, 0, 1, 1, 101524e-23, 0, 0, 1, 10292e-22, 0, 0, 1, 130908e-23, 0, 0, 1, 473331e-23, 0, 0, 1, 625319e-22, 0, 0, 1, 107932e-20, 0, 0, 1, 163779e-19, 0, 0, 1, 203198e-18, 0, 0, 1, 204717e-17, 0, 0, 0.999999, 168995e-16, 0, 0, 0.999998, 115855e-15, 0, 0, 0.999996, 66947e-14, 0, 0, 0.999991, 330863e-14, 0, 0, 0.999983, 141737e-13, 0, 0, 0.999968, 532626e-13, 0, 0, 0.99994, 177431e-12, 0, 0, 0.999891, 528835e-12, 0, 0, 0.999797, 142169e-11, 0, 0, 0.999617, 347057e-11, 0, 0, 0.999227, 77231e-10, 0, 0, 0.998239, 155753e-10, 0, 0, 0.994937, 268495e-10, 0, 0, 0.980225, 213742e-10, 0, 0, 0.967549, 21631e-10, 0, 0, 0.966865, 417989e-11, 0, 0, 0.965739, 763341e-11, 0, 0, 0.963794, 130892e-10, 0, 0, 0.960244, 206456e-10, 0, 0, 0.953495, 282016e-10, 0, 148105e-9, 0.940876, 271581e-10, 0, 2454e-6, 0.926569, 164159e-10, 0, 867491e-8, 0.920905, 239521e-10, 0, 0.01956, 0.912169, 315127e-10, 0, 0.035433, 0.899095, 346626e-10, 0, 0.056294, 0.882209, 290223e-10, 0, 0.0818191, 0.870272, 342992e-10, 0, 0.111259, 0.855977, 394164e-10, 0, 0.142857, 0.837431, 372343e-10, 0, 0.174603, 0.820826, 396691e-10, 0, 0.206349, 0.803408, 435395e-10, 0, 0.238095, 0.782838, 419579e-10, 0, 0.269841, 0.763941, 450953e-10, 0, 0.301587, 0.742904, 455847e-10, 0, 0.333333, 0.721463, 458833e-10, 0, 0.365079, 0.700197, 477159e-10, 0, 0.396825, 0.677501, 470641e-10, 0, 0.428571, 0.655527, 484732e-10, 0, 0.460317, 0.6324, 476834e-10, 0, 0.492064, 0.609964, 484213e-10, 0, 0.52381, 0.586839, 475541e-10, 0, 0.555556, 0.564353, 476951e-10, 0, 0.587302, 0.541589, 467611e-10, 0, 0.619048, 0.519413, 463493e-10, 0, 0.650794, 0.497337, 453994e-10, 0, 0.68254, 0.475797, 445308e-10, 0, 0.714286, 0.454659, 435787e-10, 0, 0.746032, 0.434065, 424839e-10, 0, 0.777778, 0.414018, 41436e-9, 0, 0.809524, 0.39455, 401902e-10, 0, 0.84127, 0.375742, 390813e-10, 0, 0.873016, 0.357501, 377116e-10, 0, 0.904762, 0.339996, 36535e-9, 0, 0.936508, 0.323069, 351265e-10, 0, 0.968254, 0.306897, 339112e-10, 0, 1, 1, 10396e-19, 0, 0, 1, 104326e-20, 0, 0, 1, 110153e-20, 0, 0, 1, 144668e-20, 0, 0, 1, 34528e-19, 0, 0, 1, 175958e-19, 0, 0, 1, 12627e-17, 0, 0, 1, 936074e-18, 0, 0, 1, 645742e-17, 0, 0, 0.999998, 401228e-16, 0, 0, 0.999997, 222338e-15, 0, 0, 0.999995, 10967e-13, 0, 0, 0.999991, 482132e-14, 0, 0, 0.999981, 189434e-13, 0, 0, 0.999967, 667716e-13, 0, 0, 0.999938, 212066e-12, 0, 0, 0.999886, 60977e-11, 0, 0, 0.999792, 159504e-11, 0, 0, 0.999608, 381191e-11, 0, 0, 0.999209, 833727e-11, 0, 0, 0.998179, 165288e-10, 0, 0, 0.994605, 274387e-10, 0, 0, 0.979468, 167316e-10, 0, 0, 0.967529, 242877e-11, 0, 0, 0.966836, 461696e-11, 0, 0, 0.96569, 830977e-11, 0, 0, 0.963706, 140427e-10, 0, 244659e-11, 0.960063, 217353e-10, 0, 760774e-9, 0.953113, 286606e-10, 0, 367261e-8, 0.940192, 247691e-10, 0, 940263e-8, 0.927731, 195814e-10, 0, 0.018333, 0.920669, 252531e-10, 0, 0.0306825, 0.911799, 324277e-10, 0, 0.0465556, 0.89857, 340982e-10, 0, 0.0659521, 0.883283, 319622e-10, 0, 0.0887677, 0.86989, 35548e-9, 0, 0.114784, 0.855483, 397143e-10, 0, 0.143618, 0.837987, 391665e-10, 0, 0.174606, 0.820546, 411306e-10, 0, 0.206349, 0.802878, 436753e-10, 0, 0.238095, 0.783402, 444e-7, 0, 0.269841, 0.763439, 458726e-10, 0, 0.301587, 0.742925, 467097e-10, 0, 0.333333, 0.721633, 478887e-10, 0, 0.365079, 0.69985, 481251e-10, 0, 0.396825, 0.67783, 491811e-10, 0, 0.428571, 0.655126, 488199e-10, 0, 0.460318, 0.632697, 496025e-10, 0, 0.492064, 0.609613, 48829e-9, 0, 0.52381, 0.587098, 492754e-10, 0, 0.555556, 0.564119, 482625e-10, 0, 0.587302, 0.541813, 482807e-10, 0, 0.619048, 0.519342, 471552e-10, 0, 0.650794, 0.497514, 466765e-10, 0, 0.68254, 0.475879, 455582e-10, 0, 0.714286, 0.454789, 446007e-10, 0, 0.746032, 0.434217, 435382e-10, 0, 0.777778, 0.414086, 421753e-10, 0, 0.809524, 0.394744, 412093e-10, 0, 0.84127, 0.375782, 396634e-10, 0, 0.873016, 0.357707, 386419e-10, 0, 0.904762, 0.340038, 370345e-10, 0, 0.936508, 0.323284, 359725e-10, 0, 0.968254, 0.306954, 3436e-8, 0, 1, 1, 599567e-19, 0, 0, 1, 600497e-19, 0, 0, 1, 614839e-19, 0, 0, 1, 686641e-19, 0, 0, 1, 972658e-19, 0, 0, 1, 221271e-18, 0, 0, 1, 833195e-18, 0, 0, 1, 403601e-17, 0, 0, 0.999999, 206001e-16, 0, 0, 0.999998, 101739e-15, 0, 0, 0.999997, 470132e-15, 0, 0, 0.999993, 200436e-14, 0, 0, 0.999988, 783682e-14, 0, 0, 0.999979, 280338e-13, 0, 0, 0.999962, 917033e-13, 0, 0, 0.999933, 274514e-12, 0, 0, 0.999881, 753201e-12, 0, 0, 0.999783, 189826e-11, 0, 0, 0.999594, 440279e-11, 0, 0, 0.999178, 93898e-10, 0, 0, 0.998073, 181265e-10, 0, 0, 0.993993, 280487e-10, 0, 0, 0.979982, 149422e-10, 0, 0, 0.968145, 378481e-11, 0, 0, 0.966786, 53771e-10, 0, 0, 0.965611, 947508e-11, 0, 388934e-10, 0.963557, 156616e-10, 0, 9693e-7, 0.959752, 235144e-10, 0, 370329e-8, 0.952461, 291568e-10, 0, 868428e-8, 0.940193, 240102e-10, 0, 0.0161889, 0.929042, 231235e-10, 0, 0.0263948, 0.920266, 273968e-10, 0, 0.0394088, 0.911178, 337915e-10, 0, 0.0552818, 0.897873, 333629e-10, 0, 0.0740138, 0.884053, 351405e-10, 0, 0.0955539, 0.869455, 378034e-10, 0, 0.119795, 0.854655, 399378e-10, 0, 0.14656, 0.838347, 419108e-10, 0, 0.175573, 0.820693, 440831e-10, 0, 0.206388, 0.802277, 445599e-10, 0, 0.238095, 0.783634, 472691e-10, 0, 0.269841, 0.763159, 476984e-10, 0, 0.301587, 0.742914, 491487e-10, 0, 0.333333, 0.721662, 502312e-10, 0, 0.365079, 0.699668, 502817e-10, 0, 0.396825, 0.677839, 51406e-9, 0, 0.428571, 0.655091, 511095e-10, 0, 0.460317, 0.632665, 516067e-10, 0, 0.492064, 0.609734, 512255e-10, 0, 0.52381, 0.587043, 510263e-10, 0, 0.555556, 0.564298, 50565e-9, 0, 0.587302, 0.541769, 497951e-10, 0, 0.619048, 0.519529, 492698e-10, 0, 0.650794, 0.497574, 482066e-10, 0, 0.68254, 0.476028, 473689e-10, 0, 0.714286, 0.454961, 461941e-10, 0, 0.746032, 0.434341, 450618e-10, 0, 0.777778, 0.414364, 438355e-10, 0, 0.809524, 0.394832, 424196e-10, 0, 0.84127, 0.376109, 412563e-10, 0, 0.873016, 0.35779, 396226e-10, 0, 0.904762, 0.340379, 384886e-10, 0, 0.936508, 0.323385, 368214e-10, 0, 0.968254, 0.307295, 356636e-10, 0, 1, 1, 106465e-17, 0, 0, 1, 106555e-17, 0, 0, 1, 107966e-17, 0, 0, 1, 114601e-17, 0, 0, 1, 137123e-17, 0, 0, 1, 21243e-16, 0, 0, 0.999999, 489653e-17, 0, 0, 0.999999, 160283e-16, 0, 0, 0.999998, 62269e-15, 0, 0, 0.999997, 251859e-15, 0, 0, 0.999996, 996192e-15, 0, 0, 0.999992, 374531e-14, 0, 0, 0.999986, 132022e-13, 0, 0, 0.999975, 433315e-13, 0, 0, 0.999959, 131956e-12, 0, 0, 0.999927, 372249e-12, 0, 0, 0.999871, 972461e-12, 0, 0, 0.999771, 235343e-11, 0, 0, 0.999572, 52768e-10, 0, 0, 0.999133, 109237e-10, 0, 0, 0.997912, 203675e-10, 0, 0, 0.993008, 279396e-10, 0, 0, 0.980645, 139604e-10, 0, 0, 0.970057, 646596e-11, 0, 0, 0.966717, 65089e-10, 0, 474145e-10, 0.965497, 111863e-10, 0, 89544e-8, 0.96334, 179857e-10, 0, 32647e-7, 0.959294, 259045e-10, 0, 75144e-7, 0.951519, 292327e-10, 0, 0.0138734, 0.940517, 249769e-10, 0, 0.0224952, 0.93014, 26803e-9, 0, 0.0334828, 0.91972, 303656e-10, 0, 0.0468973, 0.910294, 353323e-10, 0, 0.0627703, 0.897701, 351002e-10, 0, 0.0811019, 0.884522, 388104e-10, 0, 0.10186, 0.869489, 412932e-10, 0, 0.124985, 0.853983, 415781e-10, 0, 0.150372, 0.838425, 454066e-10, 0, 0.177868, 0.820656, 471624e-10, 0, 0.207245, 0.801875, 475243e-10, 0, 0.238143, 0.783521, 505621e-10, 0, 0.269841, 0.763131, 50721e-9, 0, 0.301587, 0.74261, 523293e-10, 0, 0.333333, 0.72148, 528699e-10, 0, 0.365079, 0.699696, 538677e-10, 0, 0.396825, 0.677592, 539255e-10, 0, 0.428571, 0.65525, 546367e-10, 0, 0.460317, 0.632452, 541348e-10, 0, 0.492064, 0.609903, 544976e-10, 0, 0.52381, 0.586928, 536201e-10, 0, 0.555556, 0.564464, 535185e-10, 0, 0.587302, 0.541801, 524949e-10, 0, 0.619048, 0.519681, 51812e-9, 0, 0.650794, 0.497685, 507687e-10, 0, 0.68254, 0.47622, 496243e-10, 0, 0.714286, 0.455135, 485714e-10, 0, 0.746032, 0.4346, 471847e-10, 0, 0.777778, 0.414564, 459294e-10, 0, 0.809524, 0.395165, 444705e-10, 0, 0.84127, 0.376333, 430772e-10, 0, 0.873016, 0.358197, 416229e-10, 0, 0.904762, 0.34064, 401019e-10, 0, 0.936508, 0.323816, 386623e-10, 0, 0.968254, 0.307581, 370933e-10, 0, 1, 1, 991541e-17, 0, 0, 1, 992077e-17, 0, 0, 1, 100041e-16, 0, 0, 1, 10385e-15, 0, 0, 1, 115777e-16, 0, 0, 1, 150215e-16, 0, 0, 0.999999, 254738e-16, 0, 0, 0.999999, 598822e-16, 0, 0, 0.999998, 179597e-15, 0, 0, 0.999997, 602367e-15, 0, 0, 0.999994, 206835e-14, 0, 0, 0.99999, 694952e-14, 0, 0, 0.999984, 223363e-13, 0, 0, 0.999972, 678578e-13, 0, 0, 0.999952, 193571e-12, 0, 0, 0.999919, 516594e-12, 0, 0, 0.99986, 128739e-11, 0, 0, 0.999753, 299298e-11, 0, 0, 0.999546, 648258e-11, 0, 0, 0.999074, 129985e-10, 0, 0, 0.997671, 232176e-10, 0, 0, 0.991504, 256701e-10, 0, 0, 0.981148, 131141e-10, 0, 0, 0.971965, 869048e-11, 0, 280182e-10, 0.966624, 808301e-11, 0, 695475e-9, 0.965344, 135235e-10, 0, 265522e-8, 0.963048, 210592e-10, 0, 622975e-8, 0.958673, 287473e-10, 0, 0.0116234, 0.950262, 281379e-10, 0, 0.018976, 0.940836, 271089e-10, 0, 0.0283844, 0.930996, 30926e-9, 0, 0.0399151, 0.919848, 348359e-10, 0, 0.0536063, 0.909136, 366092e-10, 0, 0.0694793, 0.897554, 384162e-10, 0, 0.0875342, 0.884691, 430971e-10, 0, 0.107749, 0.869414, 447803e-10, 0, 0.130087, 0.853462, 452858e-10, 0, 0.154481, 0.838187, 495769e-10, 0, 0.180833, 0.820381, 502709e-10, 0, 0.209005, 0.801844, 522713e-10, 0, 0.238791, 0.783061, 541505e-10, 0, 0.269869, 0.763205, 553712e-10, 0, 0.301587, 0.742362, 564909e-10, 0, 0.333333, 0.721393, 572646e-10, 0, 0.365079, 0.699676, 581012e-10, 0, 0.396825, 0.677395, 58096e-9, 0, 0.428571, 0.655208, 585766e-10, 0, 0.460317, 0.632451, 583602e-10, 0, 0.492064, 0.609839, 580234e-10, 0, 0.52381, 0.587093, 577161e-10, 0, 0.555556, 0.564467, 568447e-10, 0, 0.587302, 0.542043, 563166e-10, 0, 0.619048, 0.519826, 55156e-9, 0, 0.650794, 0.497952, 541682e-10, 0, 0.68254, 0.476477, 528971e-10, 0, 0.714286, 0.455412, 514952e-10, 0, 0.746032, 0.434926, 502222e-10, 0, 0.777778, 0.4149, 485779e-10, 0, 0.809524, 0.395552, 472242e-10, 0, 0.84127, 0.376712, 454891e-10, 0, 0.873016, 0.358622, 440924e-10, 0, 0.904762, 0.341048, 422984e-10, 0, 0.936508, 0.324262, 408582e-10, 0, 0.968254, 0.308013, 390839e-10, 0, 1, 1, 613913e-16, 0, 0, 1, 614145e-16, 0, 0, 1, 617708e-16, 0, 0, 1, 633717e-16, 0, 0, 1, 681648e-16, 0, 0, 1, 808291e-16, 0, 0, 1, 114608e-15, 0, 0, 0.999998, 210507e-15, 0, 0, 0.999997, 499595e-15, 0, 0, 0.999995, 139897e-14, 0, 0, 0.999994, 419818e-14, 0, 0, 0.999988, 127042e-13, 0, 0, 0.999979, 375153e-13, 0, 0, 0.999965, 106206e-12, 0, 0, 0.999945, 285381e-12, 0, 0, 0.999908, 723611e-12, 0, 0, 0.999846, 17255e-10, 0, 0, 0.999733, 386104e-11, 0, 0, 0.999511, 808493e-11, 0, 0, 0.998993, 156884e-10, 0, 0, 0.997326, 265538e-10, 0, 0, 0.989706, 206466e-10, 0, 0, 0.981713, 130756e-10, 0, 70005e-10, 0.973636, 106473e-10, 0, 464797e-9, 0.966509, 10194e-9, 0, 201743e-8, 0.965149, 165881e-10, 0, 497549e-8, 0.962669, 249147e-10, 0, 953262e-8, 0.95786, 317449e-10, 0, 0.0158211, 0.949334, 281045e-10, 0, 0.0239343, 0.941041, 303263e-10, 0, 0.0339372, 0.931575, 356754e-10, 0, 0.0458738, 0.920102, 397075e-10, 0, 0.059772, 0.908002, 384886e-10, 0, 0.075645, 0.897269, 43027e-9, 0, 0.0934929, 0.884559, 479925e-10, 0, 0.113302, 0.869161, 48246e-9, 0, 0.135045, 0.853342, 509505e-10, 0, 0.158678, 0.837633, 542846e-10, 0, 0.184136, 0.820252, 554139e-10, 0, 0.211325, 0.801872, 581412e-10, 0, 0.240113, 0.782418, 585535e-10, 0, 0.270306, 0.7631, 610923e-10, 0, 0.301594, 0.742183, 613678e-10, 0, 0.333333, 0.721098, 627275e-10, 0, 0.365079, 0.699512, 629413e-10, 0, 0.396825, 0.677372, 636351e-10, 0, 0.428571, 0.655059, 633555e-10, 0, 0.460317, 0.632567, 636513e-10, 0, 0.492064, 0.609784, 628965e-10, 0, 0.52381, 0.587237, 625546e-10, 0, 0.555556, 0.564525, 615825e-10, 0, 0.587302, 0.542181, 605048e-10, 0, 0.619048, 0.520017, 596329e-10, 0, 0.650794, 0.498204, 581516e-10, 0, 0.68254, 0.476742, 569186e-10, 0, 0.714286, 0.455803, 553833e-10, 0, 0.746032, 0.435251, 537807e-10, 0, 0.777778, 0.415374, 522025e-10, 0, 0.809524, 0.395921, 503421e-10, 0, 0.84127, 0.377253, 488211e-10, 0, 0.873016, 0.359021, 468234e-10, 0, 0.904762, 0.341637, 453269e-10, 0, 0.936508, 0.3247, 433014e-10, 0, 0.968254, 0.308625, 418007e-10, 0, 1, 1, 286798e-15, 0, 0, 1, 286877e-15, 0, 0, 1, 288094e-15, 0, 0, 1, 293506e-15, 0, 0, 1, 309262e-15, 0, 0, 0.999999, 348593e-15, 0, 0, 0.999999, 444582e-15, 0, 0, 0.999998, 688591e-15, 0, 0, 0.999996, 134391e-14, 0, 0, 0.999993, 317438e-14, 0, 0, 0.999989, 835609e-14, 0, 0, 0.999983, 228677e-13, 0, 0, 0.999974, 623361e-13, 0, 0, 0.999959, 165225e-12, 0, 0, 0.999936, 419983e-12, 0, 0, 0.999896, 101546e-11, 0, 0, 0.99983, 232376e-11, 0, 0, 0.999709, 50156e-10, 0, 0, 0.999469, 10167e-9, 0, 0, 0.998886, 190775e-10, 0, 0, 0.996819, 300511e-10, 0, 0, 0.988837, 185092e-10, 0, 168222e-12, 0.982178, 134622e-10, 0, 259622e-9, 0.975017, 125961e-10, 0, 142595e-8, 0.967101, 13507e-9, 0, 382273e-8, 0.964905, 205003e-10, 0, 764164e-8, 0.96218, 29546e-9, 0, 0.0130121, 0.956821, 343738e-10, 0, 0.0200253, 0.948829, 305063e-10, 0, 0.0287452, 0.941092, 346487e-10, 0, 0.039218, 0.931883, 412061e-10, 0, 0.0514748, 0.920211, 444651e-10, 0, 0.0655351, 0.907307, 431252e-10, 0, 0.0814082, 0.89684, 490382e-10, 0, 0.0990939, 0.884119, 53334e-9, 0, 0.118583, 0.869148, 54114e-9, 0, 0.139856, 0.853377, 578536e-10, 0, 0.162882, 0.836753, 592285e-10, 0, 0.187615, 0.820063, 622787e-10, 0, 0.213991, 0.801694, 645492e-10, 0, 0.241918, 0.782116, 65353e-9, 0, 0.271267, 0.762673, 674344e-10, 0, 0.301847, 0.742133, 682788e-10, 0, 0.333333, 0.720779, 691959e-10, 0, 0.365079, 0.699386, 696817e-10, 0, 0.396826, 0.67732, 699583e-10, 0, 0.428572, 0.654888, 698447e-10, 0, 0.460318, 0.632499, 694063e-10, 0, 0.492064, 0.609825, 691612e-10, 0, 0.52381, 0.587287, 681576e-10, 0, 0.555556, 0.564743, 674138e-10, 0, 0.587302, 0.542409, 661617e-10, 0, 0.619048, 0.520282, 647785e-10, 0, 0.650794, 0.498506, 633836e-10, 0, 0.68254, 0.477102, 615905e-10, 0, 0.714286, 0.456167, 601013e-10, 0, 0.746032, 0.435728, 581457e-10, 0, 0.777778, 0.415809, 564215e-10, 0, 0.809524, 0.396517, 544997e-10, 0, 0.84127, 0.377737, 525061e-10, 0, 0.873016, 0.359698, 506831e-10, 0, 0.904762, 0.342164, 48568e-9, 0, 0.936508, 0.325417, 467826e-10, 0, 0.968254, 0.309186, 446736e-10, 0, 1, 1, 109018e-14, 0, 0, 1, 10904e-13, 0, 0, 1, 109393e-14, 0, 0, 1, 11095e-13, 0, 0, 1, 1154e-12, 0, 0, 1, 126089e-14, 0, 0, 0.999999, 15059e-13, 0, 0, 0.999997, 207899e-14, 0, 0, 0.999994, 348164e-14, 0, 0, 0.999993, 705728e-14, 0, 0, 0.999987, 163692e-13, 0, 0, 0.999981, 406033e-13, 0, 0, 0.999969, 10245e-11, 0, 0, 0.999953, 255023e-12, 0, 0, 0.999925, 61511e-11, 0, 0, 0.999881, 142218e-11, 0, 0, 0.99981, 313086e-11, 0, 0, 0.99968, 653119e-11, 0, 0, 0.999418, 12832e-9, 0, 0, 0.998748, 232497e-10, 0, 0, 0.996066, 329522e-10, 0, 0, 0.988379, 179613e-10, 0, 108799e-9, 0.982567, 143715e-10, 0, 921302e-9, 0.976097, 148096e-10, 0, 280738e-8, 0.968475, 178905e-10, 0, 596622e-8, 0.964606, 253921e-10, 0, 0.0105284, 0.961564, 348623e-10, 0, 0.0165848, 0.955517, 357612e-10, 0, 0.0242, 0.948381, 343493e-10, 0, 0.03342, 0.941095, 405849e-10, 0, 0.0442777, 0.931923, 475394e-10, 0, 0.0567958, 0.91996, 484328e-10, 0, 0.0709879, 0.907419, 502146e-10, 0, 0.086861, 0.89618, 561654e-10, 0, 0.104415, 0.88337, 587612e-10, 0, 0.123643, 0.869046, 618057e-10, 0, 0.144531, 0.853278, 657392e-10, 0, 0.167057, 0.836091, 66303e-9, 0, 0.191188, 0.819644, 704445e-10, 0, 0.216878, 0.801246, 714071e-10, 0, 0.244062, 0.782031, 740093e-10, 0, 0.272649, 0.762066, 74685e-9, 0, 0.302509, 0.741964, 766647e-10, 0, 0.333442, 0.720554, 766328e-10, 0, 0.365079, 0.699098, 777857e-10, 0, 0.396826, 0.677189, 774633e-10, 0, 0.428572, 0.65484, 776235e-10, 0, 0.460318, 0.632496, 770316e-10, 0, 0.492064, 0.609908, 762669e-10, 0, 0.52381, 0.587312, 753972e-10, 0, 0.555556, 0.564938, 739994e-10, 0, 0.587302, 0.542577, 728382e-10, 0, 0.619048, 0.52062, 71112e-9, 0, 0.650794, 0.498819, 694004e-10, 0, 0.68254, 0.477555, 675575e-10, 0, 0.714286, 0.456568, 653449e-10, 0, 0.746032, 0.436278, 636068e-10, 0, 0.777778, 0.41637, 613466e-10, 0, 0.809524, 0.397144, 594177e-10, 0, 0.84127, 0.378412, 570987e-10, 0, 0.873016, 0.360376, 550419e-10, 0, 0.904762, 0.342906, 527422e-10, 0, 0.936508, 0.326136, 506544e-10, 0, 0.968254, 0.30997, 484307e-10, 0, 1, 1, 354014e-14, 0, 0, 1, 354073e-14, 0, 0, 1, 354972e-14, 0, 0, 1, 358929e-14, 0, 0, 1, 370093e-14, 0, 0, 0.999999, 396194e-14, 0, 0, 0.999998, 453352e-14, 0, 0, 0.999997, 578828e-14, 0, 0, 0.999994, 863812e-14, 0, 0, 0.999991, 153622e-13, 0, 0, 0.999985, 316356e-13, 0, 0, 0.999977, 712781e-13, 0, 0, 0.999964, 166725e-12, 0, 0, 0.999945, 390501e-12, 0, 0, 0.999912, 895622e-12, 0, 0, 0.999866, 198428e-11, 0, 0, 0.999786, 421038e-11, 0, 0, 0.999647, 850239e-11, 0, 0, 0.999356, 162059e-10, 0, 0, 0.998563, 282652e-10, 0, 0, 0.994928, 336309e-10, 0, 244244e-10, 0.987999, 178458e-10, 0, 523891e-9, 0.982893, 159162e-10, 0, 194729e-8, 0.977044, 178056e-10, 0, 451099e-8, 0.969972, 230624e-10, 0, 835132e-8, 0.964237, 313922e-10, 0, 0.013561, 0.960791, 406145e-10, 0, 0.0202056, 0.954292, 372796e-10, 0, 0.0283321, 0.948052, 403199e-10, 0, 0.0379739, 0.940938, 479537e-10, 0, 0.0491551, 0.931689, 545292e-10, 0, 0.0618918, 0.91987, 54038e-9, 0, 0.0761941, 0.907665, 589909e-10, 0, 0.0920672, 0.895281, 642651e-10, 0, 0.109511, 0.882621, 659707e-10, 0, 0.12852, 0.86873, 709973e-10, 0, 0.149085, 0.853008, 742221e-10, 0, 0.171189, 0.835944, 761754e-10, 0, 0.194809, 0.818949, 797052e-10, 0, 0.21991, 0.800951, 812434e-10, 0, 0.246447, 0.781847, 838075e-10, 0, 0.274352, 0.761649, 84501e-9, 0, 0.303535, 0.74152, 860258e-10, 0, 0.333857, 0.720495, 866233e-10, 0, 0.365104, 0.698742, 868326e-10, 0, 0.396826, 0.677096, 87133e-9, 0, 0.428572, 0.654782, 863497e-10, 0, 0.460318, 0.632335, 860206e-10, 0, 0.492064, 0.610031, 849337e-10, 0, 0.52381, 0.587457, 838279e-10, 0, 0.555556, 0.56513, 82309e-9, 0, 0.587302, 0.542877, 803542e-10, 0, 0.619048, 0.5209, 786928e-10, 0, 0.650794, 0.499291, 765171e-10, 0, 0.68254, 0.477971, 744753e-10, 0, 0.714286, 0.457221, 72209e-9, 0, 0.746032, 0.436803, 697448e-10, 0, 0.777778, 0.417083, 675333e-10, 0, 0.809524, 0.397749, 648058e-10, 0, 0.84127, 0.379177, 625759e-10, 0, 0.873016, 0.361061, 598584e-10, 0, 0.904762, 0.343713, 575797e-10, 0, 0.936508, 0.326894, 549999e-10, 0, 0.968254, 0.310816, 527482e-10, 0, 1, 1, 10153e-12, 0, 0, 1, 101544e-13, 0, 0, 1, 101751e-13, 0, 0, 1, 102662e-13, 0, 0, 1, 10521e-12, 0, 0, 0.999999, 111049e-13, 0, 0, 0.999999, 123408e-13, 0, 0, 0.999996, 14924e-12, 0, 0, 0.999992, 204471e-13, 0, 0, 0.999989, 326539e-13, 0, 0, 0.99998, 603559e-13, 0, 0, 0.999971, 123936e-12, 0, 0, 0.999955, 269058e-12, 0, 0, 0.999933, 593604e-12, 0, 0, 0.999901, 129633e-11, 0, 0, 0.999847, 275621e-11, 0, 0, 0.999761, 564494e-11, 0, 0, 0.999607, 110485e-10, 0, 0, 0.999282, 204388e-10, 0, 0, 0.99831, 341084e-10, 0, 22038e-11, 0.993288, 294949e-10, 0, 242388e-9, 0.987855, 192736e-10, 0, 12503e-7, 0.983167, 182383e-10, 0, 32745e-7, 0.977908, 218633e-10, 0, 646321e-8, 0.971194, 290662e-10, 0, 0.0109133, 0.963867, 386401e-10, 0, 0.0166927, 0.95982, 462827e-10, 0, 0.0238494, 0.953497, 420705e-10, 0, 0.0324178, 0.947621, 477743e-10, 0, 0.0424225, 0.940611, 568258e-10, 0, 0.0538808, 0.931174, 618061e-10, 0, 0.0668047, 0.919919, 627098e-10, 0, 0.0812014, 0.907856, 694714e-10, 0, 0.0970745, 0.894509, 735008e-10, 0, 0.114424, 0.881954, 763369e-10, 0, 0.133246, 0.868309, 821896e-10, 0, 0.153534, 0.852511, 83769e-9, 0, 0.175275, 0.835821, 881615e-10, 0, 0.198453, 0.817981, 896368e-10, 0, 0.223042, 0.800504, 930906e-10, 0, 0.249009, 0.78141, 945056e-10, 0, 0.276304, 0.761427, 963605e-10, 0, 0.304862, 0.74094, 968088e-10, 0, 0.334584, 0.720233, 981481e-10, 0, 0.365322, 0.698592, 979122e-10, 0, 0.396826, 0.676763, 981057e-10, 0, 0.428571, 0.654808, 973956e-10, 0, 0.460318, 0.632326, 962619e-10, 0, 0.492064, 0.610049, 952996e-10, 0, 0.52381, 0.58763, 933334e-10, 0, 0.555556, 0.565261, 917573e-10, 0, 0.587302, 0.543244, 896636e-10, 0, 0.619048, 0.521273, 873304e-10, 0, 0.650794, 0.499818, 852648e-10, 0, 0.68254, 0.478536, 823961e-10, 0, 0.714286, 0.457826, 79939e-9, 0, 0.746032, 0.437549, 77126e-9, 0, 0.777778, 0.41776, 743043e-10, 0, 0.809524, 0.39863, 716426e-10, 0, 0.84127, 0.379954, 686456e-10, 0, 0.873016, 0.362025, 660514e-10, 0, 0.904762, 0.344581, 630755e-10, 0, 0.936508, 0.327909, 605439e-10, 0, 0.968254, 0.311736, 576345e-10, 0, 1, 1, 263344e-13, 0, 0, 1, 263373e-13, 0, 0, 1, 263815e-13, 0, 0, 1, 265753e-13, 0, 0, 1, 271132e-13, 0, 0, 0.999999, 283279e-13, 0, 0, 0.999997, 30833e-12, 0, 0, 0.999995, 358711e-13, 0, 0, 0.999992, 461266e-13, 0, 0, 0.999985, 67574e-12, 0, 0, 0.999977, 11358e-11, 0, 0, 0.999966, 213657e-12, 0, 0, 0.999948, 431151e-12, 0, 0, 0.999923, 896656e-12, 0, 0, 0.999884, 186603e-11, 0, 0, 0.999826, 381115e-11, 0, 0, 0.999732, 754184e-11, 0, 0, 0.999561, 143192e-10, 0, 0, 0.999191, 257061e-10, 0, 0, 0.997955, 405724e-10, 0, 744132e-10, 0.992228, 276537e-10, 0, 716477e-9, 0.987638, 208885e-10, 0, 22524e-7, 0.983395, 215226e-10, 0, 484816e-8, 0.978614, 270795e-10, 0, 860962e-8, 0.972389, 365282e-10, 0, 0.0136083, 0.964392, 474747e-10, 0, 0.0198941, 0.95861, 509141e-10, 0, 0.0275023, 0.952806, 48963e-9, 0, 0.0364584, 0.94712, 571119e-10, 0, 0.04678, 0.940104, 671704e-10, 0, 0.0584799, 0.930398, 687586e-10, 0, 0.0715665, 0.919866, 738161e-10, 0, 0.086045, 0.907853, 813235e-10, 0, 0.101918, 0.894078, 834582e-10, 0, 0.119186, 0.881177, 892093e-10, 0, 0.137845, 0.867575, 944548e-10, 0, 0.157891, 0.852107, 969607e-10, 0, 0.179316, 0.835502, 101456e-9, 0, 0.202106, 0.81756, 103256e-9, 0, 0.226243, 0.79984, 106954e-9, 0, 0.251704, 0.780998, 108066e-9, 0, 0.278451, 0.761132, 110111e-9, 0, 0.306436, 0.740429, 110459e-9, 0, 0.335586, 0.719836, 111219e-9, 0, 0.365796, 0.698467, 11145e-8, 0, 0.3969, 0.676446, 110393e-9, 0, 0.428571, 0.654635, 110035e-9, 0, 0.460318, 0.632411, 108548e-9, 0, 0.492064, 0.609986, 106963e-9, 0, 0.52381, 0.587872, 105238e-9, 0, 0.555556, 0.565528, 102665e-9, 0, 0.587302, 0.543563, 100543e-9, 0, 0.619048, 0.52176, 976182e-10, 0, 0.650794, 0.500188, 947099e-10, 0, 0.68254, 0.479204, 919929e-10, 0, 0.714286, 0.458413, 886139e-10, 0, 0.746032, 0.438314, 857839e-10, 0, 0.777778, 0.418573, 82411e-9, 0, 0.809524, 0.39947, 792211e-10, 0, 0.84127, 0.380892, 759546e-10, 0, 0.873016, 0.362953, 727571e-10, 0, 0.904762, 0.345601, 695738e-10, 0, 0.936508, 0.328895, 664907e-10, 0, 0.968254, 0.312808, 634277e-10, 0, 1, 1, 628647e-13, 0, 0, 1, 628705e-13, 0, 0, 1, 629587e-13, 0, 0, 1, 633441e-13, 0, 0, 0.999999, 644087e-13, 0, 0, 0.999998, 667856e-13, 0, 0, 0.999997, 715889e-13, 0, 0, 0.999995, 809577e-13, 0, 0, 0.999989, 992764e-13, 0, 0, 0.999983, 135834e-12, 0, 0, 0.999974, 210482e-12, 0, 0, 0.999959, 365215e-12, 0, 0, 0.999939, 686693e-12, 0, 0, 0.999911, 13472e-10, 0, 0, 0.999868, 26731e-10, 0, 0, 0.999804, 524756e-11, 0, 0, 0.9997, 100403e-10, 0, 0, 0.99951, 185019e-10, 0, 0, 0.999078, 322036e-10, 0, 620676e-11, 0.997428, 470002e-10, 0, 341552e-9, 0.99162, 287123e-10, 0, 143727e-8, 0.987479, 234706e-10, 0, 349201e-8, 0.983582, 260083e-10, 0, 66242e-7, 0.979186, 337927e-10, 0, 0.0109113, 0.97325, 454689e-10, 0, 0.0164064, 0.965221, 573759e-10, 0, 0.0231463, 0.957262, 544114e-10, 0, 0.0311571, 0.952211, 587006e-10, 0, 0.0404572, 0.946631, 692256e-10, 0, 0.0510592, 0.939391, 787819e-10, 0, 0.0629723, 0.929795, 792368e-10, 0, 0.0762025, 0.91965, 875075e-10, 0, 0.090753, 0.907737, 950903e-10, 0, 0.106626, 0.893899, 972963e-10, 0, 0.123822, 0.880239, 10459e-8, 0, 0.142337, 0.866562, 107689e-9, 0, 0.16217, 0.85164, 113081e-9, 0, 0.183314, 0.835021, 116636e-9, 0, 0.20576, 0.817311, 120074e-9, 0, 0.229496, 0.798845, 121921e-9, 0, 0.254502, 0.780479, 12475e-8, 0, 0.280753, 0.760694, 125255e-9, 0, 0.308212, 0.740142, 126719e-9, 0, 0.336825, 0.719248, 12636e-8, 0, 0.366517, 0.698209, 126712e-9, 0, 0.397167, 0.676398, 125769e-9, 0, 0.428578, 0.654378, 124432e-9, 0, 0.460318, 0.632484, 123272e-9, 0, 0.492064, 0.610113, 12085e-8, 0, 0.52381, 0.587931, 118411e-9, 0, 0.555556, 0.565872, 11569e-8, 0, 0.587302, 0.543814, 112521e-9, 0, 0.619048, 0.522265, 109737e-9, 0, 0.650794, 0.500835, 106228e-9, 0, 0.68254, 0.479818, 102591e-9, 0, 0.714286, 0.459258, 991288e-10, 0, 0.746032, 0.439061, 952325e-10, 0, 0.777778, 0.419552, 91895e-9, 0, 0.809524, 0.400399, 879051e-10, 0, 0.84127, 0.381976, 844775e-10, 0, 0.873016, 0.364009, 806316e-10, 0, 0.904762, 0.346761, 771848e-10, 0, 0.936508, 0.330049, 735429e-10, 0, 0.968254, 0.314018, 702103e-10, 0, 1, 1, 139968e-12, 0, 0, 1, 139979e-12, 0, 0, 1, 140145e-12, 0, 0, 1, 14087e-11, 0, 0, 0.999999, 142865e-12, 0, 0, 0.999998, 147279e-12, 0, 0, 0.999997, 156057e-12, 0, 0, 0.999992, 17276e-11, 0, 0, 0.999989, 204352e-12, 0, 0, 0.99998, 26494e-11, 0, 0, 0.999969, 383435e-12, 0, 0, 0.999953, 618641e-12, 0, 0, 0.999929, 108755e-11, 0, 0, 0.999898, 201497e-11, 0, 0, 0.999849, 381346e-11, 0, 0, 0.999778, 719815e-11, 0, 0, 0.999661, 133215e-10, 0, 0, 0.999451, 238313e-10, 0, 0, 0.998936, 401343e-10, 0, 113724e-9, 0.99662, 517346e-10, 0, 820171e-9, 0.991094, 304323e-10, 0, 238143e-8, 0.987487, 281757e-10, 0, 493527e-8, 0.983731, 320048e-10, 0, 856859e-8, 0.979647, 423905e-10, 0, 0.0133393, 0.973837, 562935e-10, 0, 0.0192863, 0.96584, 677442e-10, 0, 0.0264369, 0.956309, 623073e-10, 0, 0.03481, 0.951523, 704131e-10, 0, 0.0444184, 0.946003, 836594e-10, 0, 0.0552713, 0.938454, 911736e-10, 0, 0.0673749, 0.929279, 938264e-10, 0, 0.0807329, 0.919239, 103754e-9, 0, 0.0953479, 0.907293, 109928e-9, 0, 0.111221, 0.893936, 115257e-9, 0, 0.128352, 0.879674, 122265e-9, 0, 0.14674, 0.865668, 125733e-9, 0, 0.166382, 0.850998, 132305e-9, 0, 0.187276, 0.834498, 134844e-9, 0, 0.209413, 0.816903, 139276e-9, 0, 0.232786, 0.798235, 140984e-9, 0, 0.257382, 0.779724, 14378e-8, 0, 0.283181, 0.760251, 144623e-9, 0, 0.310156, 0.739808, 145228e-9, 0, 0.338269, 0.718762, 14539e-8, 0, 0.367461, 0.697815, 144432e-9, 0, 0.397646, 0.67631, 143893e-9, 0, 0.428685, 0.654278, 141846e-9, 0, 0.460318, 0.632347, 13935e-8, 0, 0.492064, 0.610296, 137138e-9, 0, 0.52381, 0.588039, 133806e-9, 0, 0.555556, 0.566218, 130755e-9, 0, 0.587302, 0.544346, 127128e-9, 0, 0.619048, 0.522701, 123002e-9, 0, 0.650794, 0.501542, 119443e-9, 0, 0.68254, 0.480508, 115055e-9, 0, 0.714286, 0.460092, 111032e-9, 0, 0.746032, 0.440021, 106635e-9, 0, 0.777778, 0.420446, 102162e-9, 0, 0.809524, 0.401512, 98184e-9, 0, 0.84127, 0.38299, 936497e-10, 0, 0.873016, 0.365232, 89813e-9, 0, 0.904762, 0.347865, 853073e-10, 0, 0.936508, 0.331342, 817068e-10, 0, 0.968254, 0.315202, 773818e-10, 0, 1, 1, 29368e-11, 0, 0, 1, 2937e-10, 0, 0, 1, 293998e-12, 0, 0, 1, 295298e-12, 0, 0, 0.999999, 298865e-12, 0, 0, 0.999998, 3067e-10, 0, 0, 0.999995, 322082e-12, 0, 0, 0.999992, 350767e-12, 0, 0, 0.999986, 403538e-12, 0, 0, 0.999976, 501372e-12, 0, 0, 0.999964, 68562e-11, 0, 0, 0.999945, 10374e-10, 0, 0, 0.999919, 171269e-11, 0, 0, 0.999882, 300175e-11, 0, 0, 0.999829, 542144e-11, 0, 0, 0.999749, 984182e-11, 0, 0, 0.99962, 176213e-10, 0, 0, 0.999382, 305995e-10, 0, 138418e-10, 0.998751, 496686e-10, 0, 389844e-9, 0.995344, 510733e-10, 0, 150343e-8, 0.990768, 345829e-10, 0, 352451e-8, 0.987464, 342841e-10, 0, 655379e-8, 0.983846, 399072e-10, 0, 0.0106554, 0.980007, 533219e-10, 0, 0.0158723, 0.974494, 696992e-10, 0, 0.0222333, 0.96622, 776754e-10, 0, 0.029758, 0.956273, 747718e-10, 0, 0.0384596, 0.950952, 864611e-10, 0, 0.0483473, 0.945215, 100464e-9, 0, 0.0594266, 0.937287, 103729e-9, 0, 0.0717019, 0.928649, 111665e-9, 0, 0.0851752, 0.918791, 12353e-8, 0, 0.0998479, 0.906685, 127115e-9, 0, 0.115721, 0.893706, 13628e-8, 0, 0.132794, 0.879248, 142427e-9, 0, 0.151067, 0.864685, 148091e-9, 0, 0.170538, 0.850032, 153517e-9, 0, 0.191204, 0.833853, 157322e-9, 0, 0.213063, 0.816353, 161086e-9, 0, 0.236107, 0.797834, 164111e-9, 0, 0.260329, 0.778831, 165446e-9, 0, 0.285714, 0.759756, 167492e-9, 0, 0.312243, 0.739419, 166928e-9, 0, 0.339887, 0.718491, 167e-6, 0, 0.368604, 0.697392, 165674e-9, 0, 0.398329, 0.676102, 163815e-9, 0, 0.428961, 0.654243, 162003e-9, 0, 0.460331, 0.632176, 158831e-9, 0, 0.492064, 0.610407, 155463e-9, 0, 0.52381, 0.588394, 152062e-9, 0, 0.555556, 0.56645, 147665e-9, 0, 0.587302, 0.5449, 14375e-8, 0, 0.619048, 0.523276, 138905e-9, 0, 0.650794, 0.502179, 134189e-9, 0, 0.68254, 0.481359, 129392e-9, 0, 0.714286, 0.46092, 124556e-9, 0, 0.746032, 0.441084, 11957e-8, 0, 0.777778, 0.421517, 114652e-9, 0, 0.809524, 0.402721, 109688e-9, 0, 0.84127, 0.384222, 104667e-9, 0, 0.873016, 0.366534, 999633e-10, 0, 0.904762, 0.349205, 950177e-10, 0, 0.936508, 0.332702, 907301e-10, 0, 0.968254, 0.316599, 859769e-10, 0, 1, 1, 585473e-12, 0, 0, 1, 585507e-12, 0, 0, 1, 58602e-11, 0, 0, 0.999999, 588259e-12, 0, 0, 0.999999, 594381e-12, 0, 0, 0.999998, 607754e-12, 0, 0, 0.999995, 633729e-12, 0, 0, 0.99999, 68137e-11, 0, 0, 0.999984, 767003e-12, 0, 0, 0.999973, 921212e-12, 0, 0, 0.999959, 120218e-11, 0, 0, 0.999936, 172024e-11, 0, 0, 0.999907, 268088e-11, 0, 0, 0.999866, 445512e-11, 0, 0, 0.999806, 768481e-11, 0, 0, 0.999716, 1342e-8, 0, 0, 0.999576, 232473e-10, 0, 0, 0.9993, 391694e-10, 0, 129917e-9, 0.998498, 608429e-10, 0, 845035e-9, 0.994132, 489743e-10, 0, 237616e-8, 0.99031, 384644e-10, 0, 484456e-8, 0.987409, 421768e-10, 0, 832472e-8, 0.983981, 504854e-10, 0, 0.0128643, 0.980268, 671028e-10, 0, 0.0184947, 0.974875, 852749e-10, 0, 0.025237, 0.966063, 85531e-9, 0, 0.0331046, 0.956779, 900588e-10, 0, 0.0421067, 0.950259, 10577e-8, 0, 0.0522487, 0.944239, 119458e-9, 0, 0.0635343, 0.936341, 122164e-9, 0, 0.0759654, 0.928047, 134929e-9, 0, 0.0895434, 0.918065, 145544e-9, 0, 0.104269, 0.906267, 150531e-9, 0, 0.120142, 0.893419, 161652e-9, 0, 0.137163, 0.878758, 16593e-8, 0, 0.15533, 0.863699, 174014e-9, 0, 0.174645, 0.848876, 177877e-9, 0, 0.195106, 0.833032, 184049e-9, 0, 0.21671, 0.815557, 186088e-9, 0, 0.239454, 0.797323, 19054e-8, 0, 0.263332, 0.778124, 191765e-9, 0, 0.288336, 0.758929, 192535e-9, 0, 0.314451, 0.738979, 192688e-9, 0, 0.341658, 0.718213, 191522e-9, 0, 0.369924, 0.696947, 190491e-9, 0, 0.399202, 0.675807, 187913e-9, 0, 0.429416, 0.654147, 184451e-9, 0, 0.460447, 0.63229, 181442e-9, 0, 0.492064, 0.610499, 177139e-9, 0, 0.523809, 0.588747, 172596e-9, 0, 0.555555, 0.566783, 167457e-9, 0, 0.587301, 0.545359, 162518e-9, 0, 0.619048, 0.523984, 156818e-9, 0, 0.650794, 0.502917, 151884e-9, 0, 0.68254, 0.482294, 145514e-9, 0, 0.714286, 0.461945, 140199e-9, 0, 0.746032, 0.442133, 134101e-9, 0, 0.777778, 0.422705, 128374e-9, 0, 0.809524, 0.403916, 122996e-9, 0, 0.84127, 0.38554, 116808e-9, 0, 0.873016, 0.367909, 111973e-9, 0, 0.904762, 0.350651, 105938e-9, 0, 0.936508, 0.334208, 101355e-9, 0, 0.968254, 0.318123, 957629e-10, 0, 1, 1, 111633e-11, 0, 0, 1, 111639e-11, 0, 0, 1, 111725e-11, 0, 0, 1, 112096e-11, 0, 0, 0.999999, 11311e-10, 0, 0, 0.999997, 115315e-11, 0, 0, 0.999995, 11956e-10, 0, 0, 0.999989, 127239e-11, 0, 0, 0.999981, 140772e-11, 0, 0, 0.999969, 164541e-11, 0, 0, 0.999952, 206607e-11, 0, 0, 0.999928, 281783e-11, 0, 0, 0.999895, 416835e-11, 0, 0, 0.999848, 658728e-11, 0, 0, 0.999781, 108648e-10, 0, 0, 0.999682, 182579e-10, 0, 0, 0.999523, 306003e-10, 0, 159122e-10, 0.999205, 499862e-10, 0, 391184e-9, 0.998131, 73306e-9, 0, 147534e-8, 0.993334, 513229e-10, 0, 34227e-7, 0.99016, 467783e-10, 0, 632232e-8, 0.987321, 523413e-10, 0, 0.0102295, 0.984099, 64267e-9, 0, 0.0151794, 0.980432, 843042e-10, 0, 0.0211947, 0.974976, 102819e-9, 0, 0.0282899, 0.966429, 996234e-10, 0, 0.0364739, 0.957633, 111074e-9, 0, 0.0457522, 0.949422, 128644e-9, 0, 0.0561278, 0.943045, 140076e-9, 0, 0.0676023, 0.935448, 146349e-9, 0, 0.0801762, 0.927225, 161854e-9, 0, 0.0938499, 0.917033, 169135e-9, 0, 0.108623, 0.905762, 179987e-9, 0, 0.124496, 0.892879, 189832e-9, 0, 0.141469, 0.878435, 195881e-9, 0, 0.159541, 0.863114, 20466e-8, 0, 0.178713, 0.84776, 209473e-9, 0, 0.198985, 0.832084, 214861e-9, 0, 0.220355, 0.814915, 217695e-9, 0, 0.242823, 0.796711, 220313e-9, 0, 0.266385, 0.777603, 22313e-8, 0, 0.291036, 0.757991, 222471e-9, 0, 0.316767, 0.738371, 222869e-9, 0, 0.343563, 0.717872, 221243e-9, 0, 0.371402, 0.696619, 218089e-9, 0, 0.400248, 0.675379, 21562e-8, 0, 0.430047, 0.65411, 21169e-8, 0, 0.460709, 0.63241, 206947e-9, 0, 0.492079, 0.61046, 201709e-9, 0, 0.52381, 0.58903, 196753e-9, 0, 0.555556, 0.567267, 189637e-9, 0, 0.587302, 0.545886, 184735e-9, 0, 0.619048, 0.524714, 177257e-9, 0, 0.650794, 0.503789, 171424e-9, 0, 0.68254, 0.483204, 164688e-9, 0, 0.714286, 0.462976, 157172e-9, 0, 0.746032, 0.443294, 151341e-9, 0, 0.777778, 0.423988, 143737e-9, 0, 0.809524, 0.405325, 138098e-9, 0, 0.84127, 0.386981, 130698e-9, 0, 0.873016, 0.369436, 125276e-9, 0, 0.904762, 0.35219, 118349e-9, 0, 0.936508, 0.335804, 11312e-8, 0, 0.968254, 0.319749, 106687e-9, 0, 1, 1, 204685e-11, 0, 0, 1, 204694e-11, 0, 0, 1, 204831e-11, 0, 0, 0.999999, 205428e-11, 0, 0, 0.999999, 207056e-11, 0, 0, 0.999997, 210581e-11, 0, 0, 0.999993, 21732e-10, 0, 0, 0.999987, 229365e-11, 0, 0, 0.999979, 250243e-11, 0, 0, 0.999965, 286127e-11, 0, 0, 0.999947, 348028e-11, 0, 0, 0.999918, 455588e-11, 0, 0, 0.999881, 643303e-11, 0, 0, 0.999828, 970064e-11, 0, 0, 0.999753, 153233e-10, 0, 0, 0.999642, 24793e-9, 0, 0, 0.999464, 402032e-10, 0, 122947e-9, 0.999089, 635852e-10, 0, 807414e-9, 0.997567, 857026e-10, 0, 227206e-8, 0.992903, 594912e-10, 0, 462812e-8, 0.990011, 578515e-10, 0, 794162e-8, 0.987192, 65399e-9, 0, 0.0122534, 0.98418, 819675e-10, 0, 0.0175888, 0.980491, 105514e-9, 0, 0.0239635, 0.974779, 121532e-9, 0, 0.031387, 0.96675, 119144e-9, 0, 0.0398644, 0.958248, 136125e-9, 0, 0.0493982, 0.948884, 155408e-9, 0, 0.0599896, 0.941673, 162281e-9, 0, 0.0716382, 0.934521, 176754e-9, 0, 0.0843437, 0.926205, 192873e-9, 0, 0.0981056, 0.916089, 200038e-9, 0, 0.112923, 0.904963, 213624e-9, 0, 0.128796, 0.892089, 221834e-9, 0, 0.145725, 0.878028, 232619e-9, 0, 0.163709, 0.86249, 238632e-9, 0, 0.182749, 0.846587, 247002e-9, 0, 0.202847, 0.830988, 250702e-9, 0, 0.224001, 0.814165, 255562e-9, 0, 0.246214, 0.796135, 257505e-9, 0, 0.269482, 0.777052, 258625e-9, 0, 0.293805, 0.757201, 258398e-9, 0, 0.319176, 0.737655, 256714e-9, 0, 0.345587, 0.717477, 255187e-9, 0, 0.373021, 0.696433, 251792e-9, 0, 0.401454, 0.675084, 247223e-9, 0, 0.430844, 0.653907, 242213e-9, 0, 0.461125, 0.632561, 237397e-9, 0, 0.492187, 0.610658, 229313e-9, 0, 0.52381, 0.589322, 224402e-9, 0, 0.555556, 0.567857, 216116e-9, 0, 0.587302, 0.54652, 209124e-9, 0, 0.619048, 0.525433, 201601e-9, 0, 0.650794, 0.504679, 192957e-9, 0, 0.68254, 0.484203, 186052e-9, 0, 0.714286, 0.464203, 177672e-9, 0, 0.746032, 0.444549, 170005e-9, 0, 0.777778, 0.425346, 162401e-9, 0, 0.809524, 0.406706, 1544e-7, 0, 0.84127, 0.388576, 147437e-9, 0, 0.873016, 0.37094, 139493e-9, 0, 0.904762, 0.353996, 133219e-9, 0, 0.936508, 0.337391, 125573e-9, 0, 0.968254, 0.321648, 119867e-9, 0, 1, 1, 362511e-11, 0, 0, 1, 362525e-11, 0, 0, 1, 362739e-11, 0, 0, 0.999999, 363673e-11, 0, 0, 0.999998, 366214e-11, 0, 0, 0.999996, 371698e-11, 0, 0, 0.999992, 382116e-11, 0, 0, 0.999986, 400554e-11, 0, 0, 0.999976, 432058e-11, 0, 0, 0.999961, 485194e-11, 0, 0, 0.999938, 574808e-11, 0, 0, 0.999908, 726643e-11, 0, 0, 0.999865, 984707e-11, 0, 0, 0.999807, 142217e-10, 0, 0, 0.999723, 215581e-10, 0, 0, 0.999602, 336114e-10, 0, 119113e-10, 0.999398, 527353e-10, 0, 355813e-9, 0.998946, 805809e-10, 0, 137768e-8, 0.996647, 942908e-10, 0, 322469e-8, 0.992298, 668733e-10, 0, 597897e-8, 0.989802, 716564e-10, 0, 968903e-8, 0.987019, 821355e-10, 0, 0.0143845, 0.984219, 104555e-9, 0, 0.0200831, 0.980425, 131245e-9, 0, 0.0267948, 0.974241, 139613e-9, 0, 0.034525, 0.967006, 145931e-9, 0, 0.0432757, 0.95893, 167153e-9, 0, 0.0530471, 0.949157, 188146e-9, 0, 0.0638386, 0.94062, 194625e-9, 0, 0.0756487, 0.933509, 213721e-9, 0, 0.0884762, 0.925088, 229616e-9, 0, 0.10232, 0.915178, 239638e-9, 0, 0.117178, 0.904093, 254814e-9, 0, 0.133051, 0.891337, 263685e-9, 0, 0.149939, 0.877326, 274789e-9, 0, 0.167841, 0.861794, 280534e-9, 0, 0.18676, 0.845758, 289534e-9, 0, 0.206696, 0.829792, 294446e-9, 0, 0.22765, 0.813037, 296877e-9, 0, 0.249625, 0.795285, 300217e-9, 0, 0.27262, 0.776323, 299826e-9, 0, 0.296636, 0.756673, 299787e-9, 0, 0.321671, 0.736856, 297867e-9, 0, 0.347718, 0.716883, 294052e-9, 0, 0.374768, 0.696089, 289462e-9, 0, 0.402804, 0.67505, 285212e-9, 0, 0.431796, 0.653509, 27653e-8, 0, 0.461695, 0.63258, 271759e-9, 0, 0.49242, 0.61104, 262811e-9, 0, 0.523822, 0.589567, 255151e-9, 0, 0.555556, 0.568322, 246434e-9, 0, 0.587302, 0.547235, 237061e-9, 0, 0.619048, 0.52616, 228343e-9, 0, 0.650794, 0.505716, 219236e-9, 0, 0.68254, 0.485274, 209595e-9, 0, 0.714286, 0.465411, 201011e-9, 0, 0.746032, 0.445854, 19109e-8, 0, 0.777778, 0.426911, 182897e-9, 0, 0.809524, 0.408222, 173569e-9, 0, 0.84127, 0.390307, 165496e-9, 0, 0.873016, 0.372624, 156799e-9, 0, 0.904762, 0.355804, 14917e-8, 0, 0.936508, 0.33924, 140907e-9, 0, 0.968254, 0.323534, 134062e-9, 0, 1, 1, 622487e-11, 0, 0, 1, 62251e-10, 0, 0, 1, 622837e-11, 0, 0, 0.999999, 624259e-11, 0, 0, 0.999998, 628127e-11, 0, 0, 0.999996, 636451e-11, 0, 0, 0.999991, 65218e-10, 0, 0, 0.999984, 679782e-11, 0, 0, 0.999973, 726361e-11, 0, 0, 0.999955, 803644e-11, 0, 0, 0.999931, 931397e-11, 0, 0, 0.999896, 114299e-10, 0, 0, 0.999847, 149402e-10, 0, 0, 0.999784, 207461e-10, 0, 0, 0.999692, 302493e-10, 0, 0, 0.999554, 454957e-10, 0, 997275e-10, 0.999326, 690762e-10, 0, 724813e-9, 0.998757, 101605e-9, 0, 20972e-7, 0.995367, 958745e-10, 0, 432324e-8, 0.99209, 832808e-10, 0, 746347e-8, 0.989517, 887601e-10, 0, 0.0115534, 0.987008, 10564e-8, 0, 0.0166134, 0.98421, 133179e-9, 0, 0.0226552, 0.98021, 161746e-9, 0, 0.0296838, 0.973676, 161821e-9, 0, 0.0377016, 0.967052, 178635e-9, 0, 0.0467079, 0.959385, 206765e-9, 0, 0.0567013, 0.949461, 22476e-8, 0, 0.0676796, 0.939578, 23574e-8, 0, 0.0796403, 0.932416, 25893e-8, 0, 0.0925812, 0.923759, 271228e-9, 0, 0.106501, 0.914223, 289165e-9, 0, 0.121397, 0.902942, 301156e-9, 0, 0.13727, 0.890419, 313852e-9, 0, 0.15412, 0.876639, 324408e-9, 0, 0.171946, 0.861316, 33249e-8, 0, 0.190751, 0.84496, 338497e-9, 0, 0.210537, 0.828427, 345861e-9, 0, 0.231305, 0.811871, 347863e-9, 0, 0.253057, 0.794397, 350225e-9, 0, 0.275797, 0.775726, 349915e-9, 0, 0.299525, 0.75617, 347297e-9, 0, 0.324242, 0.736091, 344232e-9, 0, 0.349947, 0.716213, 340835e-9, 0, 0.376633, 0.695736, 332369e-9, 0, 0.404289, 0.674961, 327943e-9, 0, 0.432895, 0.653518, 318533e-9, 0, 0.462415, 0.632574, 310391e-9, 0, 0.492788, 0.61134, 300755e-9, 0, 0.523909, 0.590017, 290506e-9, 0, 0.555556, 0.568752, 280446e-9, 0, 0.587302, 0.548061, 269902e-9, 0, 0.619048, 0.52711, 258815e-9, 0, 0.650794, 0.506682, 248481e-9, 0, 0.68254, 0.486524, 237141e-9, 0, 0.714286, 0.466812, 226872e-9, 0, 0.746032, 0.44732, 216037e-9, 0, 0.777778, 0.428473, 205629e-9, 0, 0.809524, 0.409921, 195691e-9, 0, 0.84127, 0.392028, 185457e-9, 0, 0.873016, 0.374606, 176436e-9, 0, 0.904762, 0.357601, 166508e-9, 0, 0.936508, 0.341348, 158385e-9, 0, 0.968254, 0.32542, 149203e-9, 0, 1, 1, 103967e-10, 0, 0, 1, 10397e-9, 0, 0, 1, 104019e-10, 0, 0, 0.999999, 104231e-10, 0, 0, 0.999998, 104806e-10, 0, 0, 0.999995, 106042e-10, 0, 0, 0.999991, 108366e-10, 0, 0, 0.999982, 112415e-10, 0, 0, 0.999968, 119174e-10, 0, 0, 0.99995, 130227e-10, 0, 0, 0.999922, 148176e-10, 0, 0, 0.999884, 177303e-10, 0, 0, 0.99983, 224564e-10, 0, 0, 0.999758, 300966e-10, 0, 0, 0.999654, 423193e-10, 0, 549083e-11, 0.999503, 614848e-10, 0, 296087e-9, 0.999237, 903576e-10, 0, 123144e-8, 0.998491, 1271e-7, 0, 295954e-8, 0.994594, 107754e-9, 0, 555829e-8, 0.99178, 103025e-9, 0, 907209e-8, 0.989265, 11154e-8, 0, 0.0135257, 0.986998, 136296e-9, 0, 0.0189327, 0.984137, 169154e-9, 0, 0.0252993, 0.979798, 196671e-9, 0, 0.0326272, 0.97337, 196678e-9, 0, 0.0409157, 0.967239, 223121e-9, 0, 0.0501623, 0.959543, 253809e-9, 0, 0.0603638, 0.949466, 265972e-9, 0, 0.0715171, 0.939074, 288372e-9, 0, 0.0836187, 0.931118, 310983e-9, 0, 0.0966657, 0.922525, 325561e-9, 0, 0.110656, 0.912983, 345725e-9, 0, 0.125588, 0.901617, 3556e-7, 0, 0.141461, 0.889487, 374012e-9, 0, 0.158275, 0.875787, 383445e-9, 0, 0.176031, 0.860654, 393972e-9, 0, 0.19473, 0.844417, 400311e-9, 0, 0.214374, 0.82741, 405004e-9, 0, 0.234967, 0.810545, 407378e-9, 0, 0.256512, 0.793312, 407351e-9, 0, 0.279011, 0.774847, 406563e-9, 0, 0.302468, 0.755621, 404903e-9, 0, 0.326887, 0.735511, 397486e-9, 0, 0.352266, 0.715435, 39357e-8, 0, 0.378605, 0.695403, 384739e-9, 0, 0.405897, 0.674681, 376108e-9, 0, 0.43413, 0.65359, 365997e-9, 0, 0.463277, 0.632471, 354957e-9, 0, 0.493295, 0.61151, 343593e-9, 0, 0.524106, 0.59064, 331841e-9, 0, 0.555561, 0.569386, 318891e-9, 0, 0.587302, 0.548785, 3072e-7, 0, 0.619048, 0.528146, 29361e-8, 0, 0.650794, 0.507872, 281709e-9, 0, 0.68254, 0.487805, 268627e-9, 0, 0.714286, 0.468196, 255887e-9, 0, 0.746032, 0.448922, 243997e-9, 0, 0.777778, 0.430093, 231662e-9, 0, 0.809524, 0.411845, 220339e-9, 0, 0.84127, 0.393808, 208694e-9, 0, 0.873016, 0.376615, 198045e-9, 0, 0.904762, 0.359655, 187375e-9, 0, 0.936508, 0.343452, 177371e-9, 0, 0.968254, 0.32765, 167525e-9, 0, 1, 1, 169351e-10, 0, 0, 1, 169356e-10, 0, 0, 1, 169427e-10, 0, 0, 0.999999, 169736e-10, 0, 0, 0.999998, 170575e-10, 0, 0, 0.999995, 172372e-10, 0, 0, 0.99999, 175739e-10, 0, 0, 0.999979, 181568e-10, 0, 0, 0.999966, 191206e-10, 0, 0, 0.999944, 20677e-9, 0, 0, 0.999912, 231644e-10, 0, 0, 0.999869, 271268e-10, 0, 0, 0.999811, 334272e-10, 0, 0, 0.99973, 433979e-10, 0, 0, 0.999617, 590083e-10, 0, 680315e-10, 0.999445, 829497e-10, 0, 612796e-9, 0.999138, 118019e-9, 0, 187408e-8, 0.998095, 156712e-9, 0, 395791e-8, 0.993919, 125054e-9, 0, 692144e-8, 0.991333, 126091e-9, 0, 0.0107962, 0.989226, 144912e-9, 0, 0.0155986, 0.986954, 175737e-9, 0, 0.0213364, 0.983982, 213883e-9, 0, 0.0280114, 0.979128, 234526e-9, 0, 0.0356226, 0.973327, 243725e-9, 0, 0.0441668, 0.967416, 2773e-7, 0, 0.0536399, 0.959729, 308799e-9, 0, 0.0640376, 0.949758, 322447e-9, 0, 0.0753554, 0.939173, 350021e-9, 0, 0.0875893, 0.9296, 370089e-9, 0, 0.100736, 0.921181, 391365e-9, 0, 0.114793, 0.91164, 413636e-9, 0, 0.129759, 0.900435, 427068e-9, 0, 0.145632, 0.888183, 441046e-9, 0, 0.162412, 0.874772, 454968e-9, 0, 0.180101, 0.859566, 461882e-9, 0, 0.1987, 0.843579, 471556e-9, 0, 0.218213, 0.826453, 474335e-9, 0, 0.238641, 0.809164, 477078e-9, 0, 0.259989, 0.792179, 47755e-8, 0, 0.282262, 0.773866, 472573e-9, 0, 0.305464, 0.754944, 469765e-9, 0, 0.329599, 0.735133, 462371e-9, 0, 0.35467, 0.714858, 453674e-9, 0, 0.380678, 0.694829, 443888e-9, 0, 0.407622, 0.674453, 432052e-9, 0, 0.435493, 0.653685, 420315e-9, 0, 0.464275, 0.632666, 406829e-9, 0, 0.493938, 0.611676, 392234e-9, 0, 0.524422, 0.591193, 379208e-9, 0, 0.555624, 0.570145, 36319e-8, 0, 0.587302, 0.549566, 349111e-9, 0, 0.619048, 0.529278, 334166e-9, 0, 0.650794, 0.509026, 318456e-9, 0, 0.68254, 0.489186, 30449e-8, 0, 0.714286, 0.469662, 289051e-9, 0, 0.746032, 0.450691, 275494e-9, 0, 0.777778, 0.431841, 261437e-9, 0, 0.809524, 0.413752, 247846e-9, 0, 0.84127, 0.395951, 235085e-9, 0, 0.873016, 0.378633, 222245e-9, 0, 0.904762, 0.36194, 210533e-9, 0, 0.936508, 0.345599, 198494e-9, 0, 0.968254, 0.329999, 188133e-9, 0, 1, 1, 269663e-10, 0, 0, 1, 26967e-9, 0, 0, 1, 269772e-10, 0, 0, 0.999999, 270214e-10, 0, 0, 0.999998, 271415e-10, 0, 0, 0.999994, 27398e-9, 0, 0, 0.999988, 278771e-10, 0, 0, 0.999977, 287019e-10, 0, 0, 0.999961, 300544e-10, 0, 0, 0.999937, 322138e-10, 0, 0, 0.999904, 356163e-10, 0, 0, 0.999854, 409465e-10, 0, 0, 0.99979, 492651e-10, 0, 0, 0.999699, 621722e-10, 0, 88288e-11, 0.999572, 819715e-10, 0, 223369e-9, 0.999381, 111689e-9, 0, 105414e-8, 0.999016, 153862e-9, 0, 26493e-7, 0.997437, 187667e-9, 0, 508608e-8, 0.993545, 155672e-9, 0, 840554e-8, 0.991135, 161455e-9, 0, 0.012629, 0.989157, 188241e-9, 0, 0.0177661, 0.986874, 226229e-9, 0, 0.0238198, 0.983714, 268668e-9, 0, 0.0307887, 0.978301, 277109e-9, 0, 0.0386688, 0.973227, 303446e-9, 0, 0.0474554, 0.967317, 341851e-9, 0, 0.0571428, 0.959477, 370885e-9, 0, 0.0677256, 0.950012, 392753e-9, 0, 0.0791988, 0.939484, 42781e-8, 0, 0.0915576, 0.928135, 443866e-9, 0, 0.104798, 0.919819, 472959e-9, 0, 0.118918, 0.910049, 491551e-9, 0, 0.133915, 0.899181, 512616e-9, 0, 0.149788, 0.886881, 523563e-9, 0, 0.166537, 0.87359, 540183e-9, 0, 0.184164, 0.858613, 547386e-9, 0, 0.202669, 0.842809, 554809e-9, 0, 0.222056, 0.825727, 558316e-9, 0, 0.242329, 0.808086, 557824e-9, 0, 0.263492, 0.790728, 556346e-9, 0, 0.285551, 0.772987, 552672e-9, 0, 0.30851, 0.7541, 543738e-9, 0, 0.332376, 0.734669, 536107e-9, 0, 0.357153, 0.714411, 523342e-9, 0, 0.382845, 0.694196, 512238e-9, 0, 0.409454, 0.674252, 497465e-9, 0, 0.436977, 0.65357, 481096e-9, 0, 0.465404, 0.632999, 467054e-9, 0, 0.494713, 0.611994, 448771e-9, 0, 0.524864, 0.591604, 431889e-9, 0, 0.555779, 0.571134, 415238e-9, 0, 0.587302, 0.550528, 396369e-9, 0, 0.619048, 0.530292, 379477e-9, 0, 0.650794, 0.510364, 361488e-9, 0, 0.68254, 0.490749, 343787e-9, 0, 0.714286, 0.471266, 327822e-9, 0, 0.746032, 0.452462, 310626e-9, 0, 0.777778, 0.433907, 295352e-9, 0, 0.809524, 0.415659, 279179e-9, 0, 0.84127, 0.398138, 264685e-9, 0, 0.873016, 0.380833, 249905e-9, 0, 0.904762, 0.364247, 236282e-9, 0, 0.936508, 0.348041, 222905e-9, 0, 0.968254, 0.332389, 210522e-9, 0, 1, 1, 420604e-10, 0, 0, 1, 420614e-10, 0, 0, 1, 420757e-10, 0, 0, 0.999999, 42138e-9, 0, 0, 0.999997, 423067e-10, 0, 0, 0.999993, 426668e-10, 0, 0, 0.999986, 433372e-10, 0, 0, 0.999974, 444857e-10, 0, 0, 0.999956, 463554e-10, 0, 0, 0.99993, 493105e-10, 0, 0, 0.999892, 539077e-10, 0, 0, 0.999838, 610005e-10, 0, 0, 0.999767, 718822e-10, 0, 0, 0.999666, 884581e-10, 0, 365471e-10, 0.999525, 113398e-9, 0, 485623e-9, 0.999311, 150043e-9, 0, 162096e-8, 0.998865, 200063e-9, 0, 355319e-8, 0.996278, 211014e-9, 0, 633818e-8, 0.992956, 189672e-9, 0, 0.0100043, 0.991017, 210262e-9, 0, 0.0145648, 0.989055, 244292e-9, 0, 0.0200237, 0.986741, 290481e-9, 0, 0.0263798, 0.983288, 334303e-9, 0, 0.033629, 0.977784, 340307e-9, 0, 0.0417652, 0.973037, 377864e-9, 0, 0.0507821, 0.967181, 4239e-7, 0, 0.060673, 0.958971, 443854e-9, 0, 0.0714314, 0.950093, 483039e-9, 0, 0.0830518, 0.939552, 517934e-9, 0, 0.0955288, 0.927678, 539449e-9, 0, 0.108859, 0.918278, 568604e-9, 0, 0.123038, 0.908449, 588505e-9, 0, 0.138065, 0.897713, 612473e-9, 0, 0.153938, 0.885533, 625575e-9, 0, 0.170657, 0.872131, 63854e-8, 0, 0.188224, 0.857517, 647034e-9, 0, 0.20664, 0.841796, 65209e-8, 0, 0.225909, 0.824726, 6544e-7, 0, 0.246035, 0.807297, 655744e-9, 0, 0.267022, 0.789058, 646716e-9, 0, 0.288878, 0.77189, 643898e-9, 0, 0.311607, 0.753082, 629973e-9, 0, 0.335216, 0.7341, 621564e-9, 0, 0.359713, 0.714094, 605171e-9, 0, 0.385103, 0.693839, 588752e-9, 0, 0.41139, 0.673891, 573294e-9, 0, 0.438576, 0.653565, 552682e-9, 0, 0.466656, 0.633326, 533446e-9, 0, 0.495617, 0.612582, 514635e-9, 0, 0.525431, 0.59205, 49303e-8, 0, 0.556041, 0.571918, 471842e-9, 0, 0.587338, 0.551572, 451713e-9, 0, 0.619048, 0.531553, 430049e-9, 0, 0.650794, 0.51175, 410445e-9, 0, 0.68254, 0.49238, 390098e-9, 0, 0.714286, 0.473143, 370033e-9, 0, 0.746032, 0.45423, 351205e-9, 0, 0.777778, 0.435963, 332049e-9, 0, 0.809524, 0.41787, 315021e-9, 0, 0.84127, 0.400387, 297315e-9, 0, 0.873016, 0.383332, 281385e-9, 0, 0.904762, 0.366665, 265397e-9, 0, 0.936508, 0.350633, 250601e-9, 0, 0.968254, 0.334964, 23589e-8, 0, 1, 1, 643736e-10, 0, 0, 1, 64375e-9, 0, 0, 1, 643947e-10, 0, 0, 0.999999, 64481e-9, 0, 0, 0.999997, 647143e-10, 0, 0, 0.999994, 652119e-10, 0, 0, 0.999985, 661359e-10, 0, 0, 0.999972, 677116e-10, 0, 0, 0.999952, 702599e-10, 0, 0, 0.999922, 742517e-10, 0, 0, 0.99988, 803906e-10, 0, 0, 0.99982, 897315e-10, 0, 0, 0.999741, 103838e-9, 0, 0, 0.999629, 12496e-8, 0, 149024e-9, 0.999474, 156161e-9, 0, 861027e-9, 0.999229, 201034e-9, 0, 231198e-8, 0.998662, 259069e-9, 0, 458147e-8, 0.995299, 245439e-9, 0, 770895e-8, 0.992732, 24498e-8, 0, 0.0117126, 0.990847, 273211e-9, 0, 0.0165989, 0.988911, 316492e-9, 0, 0.0223674, 0.98654, 37161e-8, 0, 0.0290135, 0.982636, 410352e-9, 0, 0.0365309, 0.977346, 421756e-9, 0, 0.0449117, 0.972909, 475578e-9, 0, 0.0541481, 0.966821, 522482e-9, 0, 0.0642326, 0.958686, 545008e-9, 0, 0.075158, 0.949754, 589286e-9, 0, 0.0869181, 0.939184, 619995e-9, 0, 0.0995074, 0.927505, 654266e-9, 0, 0.112922, 0.916606, 682362e-9, 0, 0.127157, 0.906707, 704286e-9, 0, 0.142212, 0.895937, 725909e-9, 0, 0.158085, 0.883913, 743939e-9, 0, 0.174776, 0.870642, 755157e-9, 0, 0.192287, 0.856241, 764387e-9, 0, 0.210619, 0.84069, 771032e-9, 0, 0.229775, 0.823728, 765906e-9, 0, 0.249761, 0.806481, 767604e-9, 0, 0.270582, 0.787924, 754385e-9, 0, 0.292243, 0.770588, 749668e-9, 0, 0.314753, 0.751991, 731613e-9, 0, 0.338118, 0.733407, 717655e-9, 0, 0.362347, 0.713688, 700604e-9, 0, 0.387447, 0.693595, 678765e-9, 0, 0.413424, 0.673426, 657042e-9, 0, 0.440284, 0.65359, 635892e-9, 0, 0.468027, 0.633576, 611569e-9, 0, 0.496645, 0.613144, 586011e-9, 0, 0.526122, 0.592711, 563111e-9, 0, 0.556417, 0.572722, 537699e-9, 0, 0.587451, 0.552762, 512556e-9, 0, 0.619048, 0.532985, 489757e-9, 0, 0.650794, 0.513219, 464139e-9, 0, 0.68254, 0.493992, 442193e-9, 0, 0.714286, 0.47509, 418629e-9, 0, 0.746032, 0.456287, 397045e-9, 0, 0.777778, 0.438152, 375504e-9, 0, 0.809524, 0.420294, 35492e-8, 0, 0.84127, 0.402749, 335327e-9, 0, 0.873016, 0.385879, 316422e-9, 0, 0.904762, 0.369352, 298333e-9, 0, 0.936508, 0.353301, 281417e-9, 0, 0.968254, 0.337781, 265203e-9, 0, 1, 1, 968267e-10, 0, 0, 1, 968284e-10, 0, 0, 1, 968556e-10, 0, 0, 0.999999, 969733e-10, 0, 0, 0.999997, 972913e-10, 0, 0, 0.999993, 979688e-10, 0, 0, 0.999984, 992239e-10, 0, 0, 0.999969, 101356e-9, 0, 0, 0.999946, 104784e-9, 0, 0, 0.999913, 110111e-9, 0, 0, 0.999868, 118217e-9, 0, 0, 0.999801, 130396e-9, 0, 0, 0.999712, 148523e-9, 0, 124907e-10, 0.999589, 175233e-9, 0, 355405e-9, 0.999416, 213999e-9, 0, 13528e-7, 0.999136, 268529e-9, 0, 312557e-8, 0.998367, 333088e-9, 0, 573045e-8, 0.994701, 304757e-9, 0, 919397e-8, 0.992497, 318031e-9, 0, 0.0135261, 0.990608, 353863e-9, 0, 0.0187278, 0.988715, 409044e-9, 0, 0.0247947, 0.986241, 472967e-9, 0, 0.0317196, 0.981696, 495104e-9, 0, 0.039494, 0.977097, 532873e-9, 0, 0.0481087, 0.972583, 594447e-9, 0, 0.0575549, 0.966142, 636867e-9, 0, 0.0678242, 0.95823, 669899e-9, 0, 0.0789089, 0.949677, 719499e-9, 0, 0.0908023, 0.939226, 750584e-9, 0, 0.103499, 0.927501, 793183e-9, 0, 0.116993, 0.915199, 81995e-8, 0, 0.131282, 0.90498, 847654e-9, 0, 0.146364, 0.894243, 868929e-9, 0, 0.162237, 0.882154, 884278e-9, 0, 0.178902, 0.869161, 898108e-9, 0, 0.196358, 0.854751, 901254e-9, 0, 0.21461, 0.839368, 90679e-8, 0, 0.23366, 0.822874, 901541e-9, 0, 0.253512, 0.805514, 897297e-9, 0, 0.274174, 0.78716, 881856e-9, 0, 0.29565, 0.769061, 870032e-9, 0, 0.31795, 0.751, 851719e-9, 0, 0.341081, 0.732614, 830671e-9, 0, 0.365053, 0.713171, 806569e-9, 0, 0.389874, 0.693472, 78338e-8, 0, 0.415553, 0.673528, 756404e-9, 0, 0.442098, 0.653397, 726872e-9, 0, 0.469512, 0.633781, 700494e-9, 0, 0.497794, 0.613877, 67105e-8, 0, 0.526935, 0.593506, 640361e-9, 0, 0.556908, 0.573667, 613502e-9, 0, 0.587657, 0.553932, 583177e-9, 0, 0.61906, 0.534345, 554375e-9, 0, 0.650794, 0.515042, 527811e-9, 0, 0.68254, 0.495674, 499367e-9, 0, 0.714286, 0.477132, 47429e-8, 0, 0.746032, 0.458609, 447726e-9, 0, 0.777778, 0.440354, 424205e-9, 0, 0.809524, 0.422765, 399549e-9, 0, 0.84127, 0.405472, 378315e-9, 0, 0.873016, 0.388482, 355327e-9, 0, 0.904762, 0.372191, 336122e-9, 0, 0.936508, 0.356099, 315247e-9, 0, 0.968254, 0.340737, 29794e-8, 0, 1, 1, 143327e-9, 0, 0, 1, 14333e-8, 0, 0, 1, 143366e-9, 0, 0, 0.999999, 143524e-9, 0, 0, 0.999996, 143952e-9, 0, 0, 0.999991, 144862e-9, 0, 0, 0.999981, 146544e-9, 0, 0, 0.999966, 149391e-9, 0, 0, 0.999941, 153946e-9, 0, 0, 0.999905, 160971e-9, 0, 0, 0.999852, 171562e-9, 0, 0, 0.99978, 18729e-8, 0, 0, 0.999681, 210386e-9, 0, 826239e-10, 0.999546, 243906e-9, 0, 664807e-9, 0.999352, 291739e-9, 0, 196192e-8, 0.999027, 357419e-9, 0, 405941e-8, 0.997886, 422349e-9, 0, 699664e-8, 0.99419, 385008e-9, 0, 0.0107896, 0.99214, 409775e-9, 0, 0.0154415, 0.990274, 456418e-9, 0, 0.0209488, 0.988455, 527008e-9, 0, 0.0273037, 0.985804, 597685e-9, 0, 0.0344969, 0.98103, 613124e-9, 0, 0.0425183, 0.976674, 668321e-9, 0, 0.0513575, 0.972021, 736985e-9, 0, 0.0610046, 0.965274, 773789e-9, 0, 0.0714508, 0.958046, 830852e-9, 0, 0.0826877, 0.949333, 875766e-9, 0, 0.0947085, 0.939135, 917088e-9, 0, 0.107507, 0.927119, 952244e-9, 0, 0.121078, 0.91469, 990626e-9, 0, 0.135419, 0.903006, 101304e-8, 0, 0.150526, 0.892368, 103834e-8, 0, 0.166399, 0.880231, 105002e-8, 0, 0.183038, 0.867432, 106331e-8, 0, 0.200443, 0.853208, 106783e-8, 0, 0.218618, 0.837956, 106458e-8, 0, 0.237566, 0.821772, 105945e-8, 0, 0.257291, 0.804328, 104685e-8, 0, 0.2778, 0.786465, 103178e-8, 0, 0.2991, 0.768004, 101077e-8, 0, 0.321199, 0.74972, 985504e-9, 0, 0.344106, 0.731682, 962893e-9, 0, 0.36783, 0.712813, 932146e-9, 0, 0.392383, 0.693139, 89871e-8, 0, 0.417774, 0.673566, 869678e-9, 0, 0.444013, 0.653483, 835525e-9, 0, 0.471107, 0.633891, 799853e-9, 0, 0.49906, 0.614433, 766838e-9, 0, 0.527869, 0.594586, 732227e-9, 0, 0.557517, 0.574769, 696442e-9, 0, 0.587966, 0.555149, 663935e-9, 0, 0.61913, 0.535898, 629826e-9, 0, 0.650794, 0.516753, 596486e-9, 0, 0.68254, 0.497816, 567078e-9, 0, 0.714286, 0.479034, 534399e-9, 0, 0.746032, 0.460975, 507013e-9, 0, 0.777778, 0.442935, 477421e-9, 0, 0.809524, 0.425263, 451101e-9, 0, 0.84127, 0.408248, 424964e-9, 0, 0.873016, 0.391339, 39993e-8, 0, 0.904762, 0.37513, 377619e-9, 0, 0.936508, 0.359172, 354418e-9, 0, 0.968254, 0.343876, 334823e-9, 0, 1, 1, 209042e-9, 0, 0, 1, 209045e-9, 0, 0, 1, 209093e-9, 0, 0, 0.999999, 209304e-9, 0, 0, 0.999996, 209871e-9, 0, 0, 0.999991, 211078e-9, 0, 0, 0.999979, 213304e-9, 0, 0, 0.999963, 217061e-9, 0, 0, 0.999933, 223042e-9, 0, 0, 0.999894, 232206e-9, 0, 0, 0.999837, 245901e-9, 0, 0, 0.999756, 266023e-9, 0, 102927e-11, 0.999648, 295204e-9, 0, 233468e-9, 0.999499, 336958e-9, 0, 108237e-8, 0.999283, 395563e-9, 0, 268832e-8, 0.998896, 473785e-9, 0, 511138e-8, 0.997006, 520008e-9, 0, 837705e-8, 0.993819, 497261e-9, 0, 0.0124928, 0.991632, 523722e-9, 0, 0.0174561, 0.989875, 587258e-9, 0, 0.0232596, 0.988109, 676329e-9, 0, 0.0298932, 0.985155, 747701e-9, 0, 0.0373453, 0.980479, 768803e-9, 0, 0.0456045, 0.976271, 841054e-9, 0, 0.0546593, 0.971347, 911469e-9, 0, 0.0644994, 0.964528, 953057e-9, 0, 0.0751152, 0.957632, 102221e-8, 0, 0.0864981, 0.948681, 106122e-8, 0, 0.0986407, 0.938716, 111857e-8, 0, 0.111537, 0.926629, 114762e-8, 0, 0.125182, 0.914025, 118995e-8, 0, 0.139571, 0.901026, 121228e-8, 0, 0.154703, 0.890358, 123946e-8, 0, 0.170576, 0.878283, 12527e-7, 0, 0.18719, 0.865459, 125536e-8, 0, 0.204547, 0.851407, 126134e-8, 0, 0.222648, 0.836276, 124759e-8, 0, 0.241498, 0.820436, 124443e-8, 0, 0.261101, 0.803253, 122071e-8, 0, 0.281465, 0.785562, 120107e-8, 0, 0.302595, 0.76718, 117762e-8, 0, 0.324501, 0.748551, 114289e-8, 0, 0.347192, 0.730564, 110872e-8, 0, 0.370679, 0.712253, 107636e-8, 0, 0.394973, 0.692867, 103646e-8, 0, 0.420085, 0.673695, 996793e-9, 0, 0.446027, 0.653912, 95675e-8, 0, 0.47281, 0.634129, 916739e-9, 0, 0.500441, 0.615004, 874401e-9, 0, 0.528921, 0.595587, 833411e-9, 0, 0.558244, 0.575965, 794556e-9, 0, 0.588384, 0.5566, 75196e-8, 0, 0.619281, 0.537428, 716381e-9, 0, 0.650795, 0.518623, 676558e-9, 0, 0.68254, 0.499964, 64074e-8, 0, 0.714286, 0.481356, 605984e-9, 0, 0.746032, 0.463279, 570256e-9, 0, 0.777778, 0.445673, 540138e-9, 0, 0.809524, 0.428032, 507299e-9, 0, 0.84127, 0.411112, 479553e-9, 0, 0.873016, 0.394444, 450737e-9, 0, 0.904762, 0.378247, 424269e-9, 0, 0.936508, 0.362415, 399111e-9, 0, 0.968254, 0.347103, 375274e-9, 0, 1, 1, 300729e-9, 0, 0, 1, 300733e-9, 0, 0, 1, 300797e-9, 0, 0, 0.999998, 301072e-9, 0, 0, 0.999996, 301817e-9, 0, 0, 0.999989, 303398e-9, 0, 0, 0.999977, 306309e-9, 0, 0, 0.999958, 311209e-9, 0, 0, 0.999927, 318975e-9, 0, 0, 0.999884, 330804e-9, 0, 0, 0.99982, 34834e-8, 0, 0, 0.999733, 373854e-9, 0, 326995e-10, 0.999613, 410424e-9, 0, 477174e-9, 0.999447, 462047e-9, 0, 161099e-8, 0.999204, 533322e-9, 0, 353153e-8, 0.998725, 624964e-9, 0, 627965e-8, 0.995871, 631786e-9, 0, 98693e-7, 0.993194, 632017e-9, 0, 0.0143011, 0.991541, 68923e-8, 0, 0.019568, 0.989773, 766892e-9, 0, 0.0256593, 0.987647, 863668e-9, 0, 0.0325625, 0.984193, 922089e-9, 0, 0.0402647, 0.980016, 970749e-9, 0, 0.0487532, 0.975859, 106027e-8, 0, 0.058016, 0.970514, 112239e-8, 0, 0.0680419, 0.963625, 117212e-8, 0, 0.0788208, 0.956959, 125211e-8, 0, 0.0903439, 0.947956, 129411e-8, 0, 0.102604, 0.93809, 135879e-8, 0, 0.115594, 0.92659, 139309e-8, 0, 0.129309, 0.913829, 143253e-8, 0, 0.143745, 0.90005, 145809e-8, 0, 0.158901, 0.888129, 14748e-7, 0, 0.174774, 0.87607, 148756e-8, 0, 0.191365, 0.863461, 148714e-8, 0, 0.208674, 0.849594, 148892e-8, 0, 0.226705, 0.834531, 146496e-8, 0, 0.245461, 0.81903, 14579e-7, 0, 0.264947, 0.802122, 143039e-8, 0, 0.28517, 0.78445, 139717e-8, 0, 0.306137, 0.766434, 136312e-8, 0, 0.327857, 0.747816, 132597e-8, 0, 0.350341, 0.729519, 128323e-8, 0, 0.373598, 0.711454, 123803e-8, 0, 0.397642, 0.692699, 119097e-8, 0, 0.422485, 0.673723, 114565e-8, 0, 0.448139, 0.654386, 109552e-8, 0, 0.474619, 0.634673, 104553e-8, 0, 0.501933, 0.615554, 99985e-8, 0, 0.530089, 0.596462, 948207e-9, 0, 0.559087, 0.577385, 902299e-9, 0, 0.588913, 0.558257, 856448e-9, 0, 0.619525, 0.5392, 810395e-9, 0, 0.650826, 0.520543, 768558e-9, 0, 0.68254, 0.502206, 7239e-7, 0, 0.714286, 0.48402, 685794e-9, 0, 0.746032, 0.465779, 64471e-8, 0, 0.777778, 0.448455, 609583e-9, 0, 0.809524, 0.431091, 57227e-8, 0, 0.84127, 0.414147, 54042e-8, 0, 0.873016, 0.39765, 506545e-9, 0, 0.904762, 0.381576, 477635e-9, 0, 0.936508, 0.365881, 448446e-9, 0, 0.968254, 0.350582, 421424e-9, 0, 1, 1, 427144e-9, 0, 0, 1, 427151e-9, 0, 0, 1, 427232e-9, 0, 0, 0.999998, 42759e-8, 0, 0, 0.999995, 428555e-9, 0, 0, 0.999988, 430603e-9, 0, 0, 0.999976, 434368e-9, 0, 0, 0.999952, 440688e-9, 0, 0, 0.999919, 450667e-9, 0, 0, 0.999871, 46578e-8, 0, 0, 0.999801, 488024e-9, 0, 0, 0.999704, 520092e-9, 0, 129791e-9, 0.999572, 565553e-9, 0, 821056e-9, 0.999389, 628906e-9, 0, 225241e-8, 0.999114, 714911e-9, 0, 449109e-8, 0.998488, 819218e-9, 0, 756249e-8, 0.995234, 80415e-8, 0, 0.0114716, 0.993021, 830181e-9, 0, 0.0162131, 0.991407, 902645e-9, 0, 0.021776, 0.989625, 996934e-9, 0, 0.0281471, 0.987064, 109707e-8, 0, 0.0353118, 0.983265, 114353e-8, 0, 0.0432562, 0.979535, 12272e-7, 0, 0.0519665, 0.975224, 132642e-8, 0, 0.0614298, 0.969574, 138092e-8, 0, 0.0716348, 0.963021, 145896e-8, 0, 0.0825709, 0.956046, 152834e-8, 0, 0.094229, 0.947136, 158217e-8, 0, 0.106602, 0.937313, 16347e-7, 0, 0.119682, 0.926073, 168383e-8, 0, 0.133465, 0.913121, 171627e-8, 0, 0.147947, 0.899165, 174229e-8, 0, 0.163125, 0.885891, 176137e-8, 0, 0.178998, 0.873783, 176406e-8, 0, 0.195566, 0.861331, 176156e-8, 0, 0.21283, 0.847569, 175346e-8, 0, 0.230793, 0.832785, 172753e-8, 0, 0.249459, 0.817442, 170204e-8, 0, 0.268832, 0.800613, 166576e-8, 0, 0.28892, 0.783597, 162909e-8, 0, 0.30973, 0.76571, 15826e-7, 0, 0.331271, 0.747021, 153106e-8, 0, 0.353554, 0.728593, 148036e-8, 0, 0.37659, 0.710661, 142808e-8, 0, 0.400391, 0.692426, 136906e-8, 0, 0.424973, 0.673623, 131066e-8, 0, 0.450347, 0.65494, 125569e-8, 0, 0.476531, 0.635448, 119517e-8, 0, 0.503535, 0.616221, 113828e-8, 0, 0.531372, 0.597531, 10816e-7, 0, 0.560047, 0.578795, 102673e-8, 0, 0.589554, 0.559892, 970985e-9, 0, 0.619869, 0.541307, 919773e-9, 0, 0.650923, 0.522608, 868479e-9, 0, 0.68254, 0.504484, 82137e-8, 0, 0.714286, 0.486603, 772916e-9, 0, 0.746032, 0.468802, 730353e-9, 0, 0.777778, 0.451172, 684955e-9, 0, 0.809524, 0.434348, 647565e-9, 0, 0.84127, 0.417445, 605863e-9, 0, 0.873016, 0.401077, 571885e-9, 0, 0.904762, 0.385039, 536034e-9, 0, 0.936508, 0.369483, 504227e-9, 0, 0.968254, 0.354272, 473165e-9, 0, 1, 1, 599525e-9, 0, 0, 1, 599533e-9, 0, 0, 1, 599639e-9, 0, 0, 0.999998, 600097e-9, 0, 0, 0.999994, 601336e-9, 0, 0, 0.999987, 603958e-9, 0, 0, 0.999972, 608775e-9, 0, 0, 0.999949, 616842e-9, 0, 0, 0.999912, 629534e-9, 0, 0, 0.999857, 648658e-9, 0, 0, 0.999781, 676615e-9, 0, 538873e-11, 0.999674, 716574e-9, 0, 308602e-9, 0.999528, 772641e-9, 0, 127003e-8, 0.999326, 849806e-9, 0, 300783e-8, 0.999009, 952682e-9, 0, 556637e-8, 0.998112, 106394e-8, 0, 895889e-8, 0.994496, 102228e-8, 0, 0.0131827, 0.992806, 108586e-8, 0, 0.0182277, 0.991211, 11759e-7, 0, 0.0240795, 0.989415, 128955e-8, 0, 0.030723, 0.986499, 139038e-8, 0, 0.0381418, 0.982679, 144539e-8, 0, 0.046321, 0.978839, 153954e-8, 0, 0.0552459, 0.974295, 164417e-8, 0, 0.0649034, 0.968784, 171517e-8, 0, 0.0752814, 0.962324, 180282e-8, 0, 0.0863693, 0.954956, 186387e-8, 0, 0.0981578, 0.94624, 193817e-8, 0, 0.110639, 0.936517, 198156e-8, 0, 0.123806, 0.925186, 203042e-8, 0, 0.137655, 0.91252, 20664e-7, 0, 0.15218, 0.898441, 207822e-8, 0, 0.16738, 0.884394, 20992e-7, 0, 0.183253, 0.871273, 208748e-8, 0, 0.199799, 0.859057, 208686e-8, 0, 0.21702, 0.845243, 205519e-8, 0, 0.234918, 0.830723, 202868e-8, 0, 0.253496, 0.815801, 199501e-8, 0, 0.272761, 0.79914, 194193e-8, 0, 0.292719, 0.782372, 188824e-8, 0, 0.313377, 0.76482, 183695e-8, 0, 0.334745, 0.746586, 177418e-8, 0, 0.356833, 0.7281, 170628e-8, 0, 0.379654, 0.709842, 164063e-8, 0, 0.403221, 0.692019, 157355e-8, 0, 0.427548, 0.67364, 150262e-8, 0, 0.452651, 0.655277, 143473e-8, 0, 0.478545, 0.636438, 136371e-8, 0, 0.505246, 0.617364, 129911e-8, 0, 0.532768, 0.598603, 123014e-8, 0, 0.561122, 0.580195, 116587e-8, 0, 0.590309, 0.561786, 110398e-8, 0, 0.620318, 0.543377, 104148e-8, 0, 0.651102, 0.525093, 983984e-9, 0, 0.682545, 0.506791, 92667e-8, 0, 0.714286, 0.489291, 874326e-9, 0, 0.746032, 0.471811, 821734e-9, 0, 0.777778, 0.454435, 774698e-9, 0, 0.809524, 0.437493, 727302e-9, 0, 0.84127, 0.420977, 684039e-9, 0, 0.873016, 0.404729, 64373e-8, 0, 0.904762, 0.388756, 60285e-8, 0, 0.936508, 0.373344, 56765e-8, 0, 0.968254, 0.358191, 531929e-9, 0, 1, 1, 832169e-9, 0, 0, 1, 832178e-9, 0, 0, 1, 83231e-8, 0, 0, 0.999998, 832893e-9, 0, 0, 0.999995, 834465e-9, 0, 0, 0.999985, 837791e-9, 0, 0, 0.999969, 843893e-9, 0, 0, 0.999944, 854086e-9, 0, 0, 0.999903, 870071e-9, 0, 0, 0.999843, 894042e-9, 0, 0, 0.999759, 928865e-9, 0, 531805e-10, 0.999643, 978242e-9, 0, 579365e-9, 0.99948, 104684e-8, 0, 182774e-8, 0.999255, 114012e-8, 0, 387804e-8, 0.998885, 126188e-8, 0, 675709e-8, 0.997405, 135888e-8, 0, 0.010468, 0.99424, 133626e-8, 0, 0.0150018, 0.992458, 140905e-8, 0, 0.0203443, 0.990929, 152305e-8, 0, 0.0264786, 0.989116, 165882e-8, 0, 0.0333875, 0.985624, 174128e-8, 0, 0.0410536, 0.982003, 182108e-8, 0, 0.0494609, 0.978336, 194498e-8, 0, 0.0585941, 0.973184, 202708e-8, 0, 0.0684396, 0.9678, 212166e-8, 0, 0.0789851, 0.961348, 221366e-8, 0, 0.0902199, 0.953841, 228219e-8, 0, 0.102134, 0.94534, 235662e-8, 0, 0.114721, 0.935552, 240572e-8, 0, 0.127972, 0.924064, 244405e-8, 0, 0.141884, 0.911827, 247557e-8, 0, 0.156451, 0.897731, 248374e-8, 0, 0.171672, 0.883409, 249863e-8, 0, 0.187545, 0.868625, 246688e-8, 0, 0.20407, 0.856529, 246523e-8, 0, 0.221249, 0.842999, 242368e-8, 0, 0.239083, 0.828505, 237354e-8, 0, 0.257578, 0.813825, 232588e-8, 0, 0.276738, 0.797813, 226731e-8, 0, 0.296569, 0.781097, 219704e-8, 0, 0.31708, 0.764038, 212394e-8, 0, 0.338281, 0.746067, 204786e-8, 0, 0.360181, 0.727687, 196728e-8, 0, 0.382794, 0.709571, 188779e-8, 0, 0.406133, 0.691503, 180532e-8, 0, 0.430213, 0.673673, 171849e-8, 0, 0.45505, 0.655732, 164147e-8, 0, 0.480662, 0.637399, 155858e-8, 0, 0.507065, 0.618616, 147641e-8, 0, 0.534278, 0.60005, 140125e-8, 0, 0.562313, 0.581713, 132441e-8, 0, 0.59118, 0.563546, 125014e-8, 0, 0.620875, 0.545605, 118249e-8, 0, 0.651373, 0.527559, 11116e-7, 0, 0.682593, 0.509764, 104979e-8, 0, 0.714286, 0.49193, 985977e-9, 0, 0.746032, 0.475011, 928592e-9, 0, 0.777778, 0.457878, 873466e-9, 0, 0.809524, 0.440979, 819585e-9, 0, 0.84127, 0.424613, 772365e-9, 0, 0.873016, 0.408549, 722195e-9, 0, 0.904762, 0.392771, 680014e-9, 0, 0.936508, 0.377317, 636797e-9, 0, 0.968254, 0.362352, 598318e-9, 0, 1, 1, 114313e-8, 0, 0, 1, 114314e-8, 0, 0, 0.999999, 114331e-8, 0, 0, 0.999998, 114404e-8, 0, 0, 0.999994, 114601e-8, 0, 0, 0.999984, 115019e-8, 0, 0, 0.999967, 115784e-8, 0, 0, 0.999937, 11706e-7, 0, 0, 0.999894, 119054e-8, 0, 0, 0.999828, 122031e-8, 0, 0, 0.999735, 126331e-8, 0, 169263e-9, 0.999606, 132382e-8, 0, 949167e-9, 0.999426, 14071e-7, 0, 249668e-8, 0.999173, 151895e-8, 0, 486392e-8, 0.99873, 166102e-8, 0, 806323e-8, 0.996243, 17023e-7, 0, 0.0120895, 0.993779, 172782e-8, 0, 0.0169288, 0.9919, 18108e-7, 0, 0.0225633, 0.990524, 196028e-8, 0, 0.028974, 0.98868, 212014e-8, 0, 0.036142, 0.984663, 217598e-8, 0, 0.044049, 0.981457, 230563e-8, 0, 0.0526781, 0.977608, 243966e-8, 0, 0.0620137, 0.972215, 251336e-8, 0, 0.0720418, 0.966798, 26285e-7, 0, 0.0827499, 0.960241, 271409e-8, 0, 0.0941271, 0.952489, 278381e-8, 0, 0.106164, 0.944127, 285399e-8, 0, 0.118852, 0.934282, 290994e-8, 0, 0.132185, 0.923271, 294558e-8, 0, 0.146157, 0.910803, 296269e-8, 0, 0.160766, 0.896705, 296803e-8, 0, 0.176007, 0.88238, 296637e-8, 0, 0.19188, 0.867116, 293163e-8, 0, 0.208385, 0.853636, 289418e-8, 0, 0.225523, 0.840469, 284663e-8, 0, 0.243296, 0.82639, 278594e-8, 0, 0.261709, 0.811759, 271618e-8, 0, 0.280767, 0.796113, 263187e-8, 0, 0.300476, 0.779518, 254589e-8, 0, 0.320845, 0.763142, 246003e-8, 0, 0.341883, 0.745464, 236529e-8, 0, 0.363601, 0.727491, 226536e-8, 0, 0.386011, 0.709414, 216375e-8, 0, 0.409128, 0.691396, 207127e-8, 0, 0.432967, 0.67368, 197106e-8, 0, 0.457545, 0.656049, 187022e-8, 0, 0.482881, 0.638188, 177605e-8, 0, 0.508992, 0.620177, 168482e-8, 0, 0.535899, 0.601506, 158909e-8, 0, 0.563619, 0.58362, 150583e-8, 0, 0.592165, 0.565496, 141791e-8, 0, 0.621544, 0.54789, 133693e-8, 0, 0.651743, 0.530323, 126038e-8, 0, 0.682709, 0.512795, 118556e-8, 0, 0.714286, 0.495199, 111527e-8, 0, 0.746032, 0.478101, 10489e-7, 0, 0.777778, 0.461511, 984264e-9, 0, 0.809524, 0.444879, 92591e-8, 0, 0.84127, 0.428424, 866582e-9, 0, 0.873016, 0.412495, 814463e-9, 0, 0.904762, 0.396975, 764498e-9, 0, 0.936508, 0.381614, 715967e-9, 0, 0.968254, 0.366732, 672483e-9, 0, 1, 1, 155501e-8, 0, 0, 1, 155503e-8, 0, 0, 1, 155524e-8, 0, 0, 0.999998, 155615e-8, 0, 0, 0.999994, 15586e-7, 0, 0, 0.999983, 156379e-8, 0, 0, 0.999963, 15733e-7, 0, 0, 0.999932, 158911e-8, 0, 0, 0.999882, 161376e-8, 0, 0, 0.99981, 165041e-8, 0, 100875e-10, 0.999708, 170304e-8, 0, 367658e-9, 0.999565, 177658e-8, 0, 14234e-7, 0.999368, 187688e-8, 0, 327939e-8, 0.999081, 200989e-8, 0, 596629e-8, 0.99852, 217177e-8, 0, 94852e-7, 0.99549, 21745e-7, 0, 0.013824, 0.993252, 222357e-8, 0, 0.0189642, 0.991727, 235022e-8, 0, 0.0248856, 0.989951, 250561e-8, 0, 0.0315669, 0.988029, 268829e-8, 0, 0.0389882, 0.984029, 27496e-7, 0, 0.0471302, 0.980683, 289793e-8, 0, 0.0559754, 0.976554, 303315e-8, 0, 0.0655081, 0.97139, 313257e-8, 0, 0.0757138, 0.965544, 323656e-8, 0, 0.08658, 0.95912, 333432e-8, 0, 0.0980954, 0.951183, 34039e-7, 0, 0.110251, 0.942974, 347515e-8, 0, 0.123038, 0.932642, 350381e-8, 0, 0.13645, 0.922158, 354519e-8, 0, 0.150482, 0.909404, 353851e-8, 0, 0.165129, 0.896071, 35435e-7, 0, 0.18039, 0.881206, 349936e-8, 0, 0.196263, 0.866077, 347256e-8, 0, 0.212748, 0.85093, 3415e-6, 0, 0.229847, 0.837703, 333367e-8, 0, 0.247561, 0.823878, 3249e-6, 0, 0.265895, 0.809449, 316347e-8, 0, 0.284854, 0.794379, 306351e-8, 0, 0.304445, 0.778138, 29499e-7, 0, 0.324675, 0.761997, 284099e-8, 0, 0.345555, 0.744938, 272104e-8, 0, 0.367095, 0.727212, 260715e-8, 0, 0.389309, 0.709549, 248855e-8, 0, 0.41221, 0.691704, 236783e-8, 0, 0.435814, 0.673689, 225178e-8, 0, 0.460138, 0.656453, 213765e-8, 0, 0.485203, 0.639128, 202178e-8, 0, 0.511028, 0.621512, 191443e-8, 0, 0.537634, 0.603598, 180977e-8, 0, 0.565041, 0.58559, 170456e-8, 0, 0.593268, 0.567852, 160927e-8, 0, 0.622327, 0.5503, 151395e-8, 0, 0.652217, 0.533033, 142499e-8, 0, 0.682907, 0.515942, 133955e-8, 0, 0.714296, 0.498814, 12602e-7, 0, 0.746032, 0.481595, 118188e-8, 0, 0.777778, 0.465117, 111171e-8, 0, 0.809524, 0.448865, 104091e-8, 0, 0.84127, 0.432711, 976618e-9, 0, 0.873016, 0.416822, 91859e-8, 0, 0.904762, 0.401272, 857704e-9, 0, 0.936508, 0.386226, 807172e-9, 0, 0.968254, 0.371321, 75464e-8, 0, 1, 1, 209596e-8, 0, 0, 1, 209598e-8, 0, 0, 1, 209624e-8, 0, 0, 0.999997, 209736e-8, 0, 0, 0.999991, 210039e-8, 0, 0, 0.999979, 210678e-8, 0, 0, 0.999959, 211847e-8, 0, 0, 0.999925, 21379e-7, 0, 0, 0.99987, 216809e-8, 0, 0, 0.999791, 221281e-8, 0, 681487e-10, 0.999677, 227669e-8, 0, 658161e-9, 0.999521, 236533e-8, 0, 200635e-8, 0.999301, 248514e-8, 0, 41779e-7, 0.998977, 264185e-8, 0, 718648e-8, 0.998191, 281695e-8, 0, 0.0110239, 0.994801, 278518e-8, 0, 0.015672, 0.993091, 288774e-8, 0, 0.0211091, 0.991571, 303931e-8, 0, 0.0273123, 0.9897, 321643e-8, 0, 0.034259, 0.987023, 337332e-8, 0, 0.0419282, 0.983289, 346146e-8, 0, 0.0502998, 0.979892, 363704e-8, 0, 0.0593562, 0.975111, 373601e-8, 0, 0.069081, 0.970351, 38842e-7, 0, 0.0794598, 0.964131, 397053e-8, 0, 0.0904798, 0.957747, 408078e-8, 0, 0.10213, 0.949536, 413533e-8, 0, 0.1144, 0.941372, 420305e-8, 0, 0.127284, 0.931049, 422815e-8, 0, 0.140772, 0.920647, 425048e-8, 0, 0.154862, 0.908033, 42281e-7, 0, 0.169548, 0.895028, 422026e-8, 0, 0.184828, 0.879968, 415042e-8, 0, 0.200701, 0.864875, 408821e-8, 0, 0.217167, 0.84918, 400909e-8, 0, 0.234227, 0.834934, 391178e-8, 0, 0.251884, 0.821397, 380066e-8, 0, 0.270141, 0.807135, 367974e-8, 0, 0.289004, 0.792363, 355172e-8, 0, 0.308479, 0.776661, 3411e-6, 0, 0.328575, 0.760705, 328123e-8, 0, 0.349301, 0.744408, 314003e-8, 0, 0.370668, 0.726994, 29906e-7, 0, 0.392689, 0.709598, 285034e-8, 0, 0.415379, 0.692112, 271179e-8, 0, 0.438754, 0.674435, 257185e-8, 0, 0.46283, 0.65676, 243425e-8, 0, 0.48763, 0.639982, 230351e-8, 0, 0.513173, 0.622983, 21777e-7, 0, 0.539482, 0.605471, 204991e-8, 0, 0.566579, 0.58796, 193759e-8, 0, 0.594488, 0.570463, 181976e-8, 0, 0.623226, 0.553058, 171497e-8, 0, 0.6528, 0.535894, 161109e-8, 0, 0.683198, 0.519089, 151394e-8, 0, 0.714354, 0.502454, 142122e-8, 0, 0.746032, 0.485681, 133488e-8, 0, 0.777778, 0.468935, 124975e-8, 0, 0.809524, 0.452951, 117309e-8, 0, 0.84127, 0.437139, 110155e-8, 0, 0.873016, 0.421446, 103124e-8, 0, 0.904762, 0.405951, 966387e-9, 0, 0.936508, 0.391003, 908119e-9, 0, 0.968254, 0.376198, 848057e-9, 0, 1, 1, 280076e-8, 0, 0, 1, 280078e-8, 0, 0, 0.999999, 280109e-8, 0, 0, 0.999997, 280246e-8, 0, 0, 0.999992, 280616e-8, 0, 0, 0.999979, 281396e-8, 0, 0, 0.999956, 282822e-8, 0, 0, 0.999916, 285186e-8, 0, 0, 0.999857, 28885e-7, 0, 0, 0.999768, 294259e-8, 0, 196026e-9, 0.999645, 301946e-8, 0, 104842e-8, 0.99947, 312541e-8, 0, 270199e-8, 0.999229, 326733e-8, 0, 519449e-8, 0.998852, 344992e-8, 0, 852602e-8, 0.997558, 361052e-8, 0, 0.0126804, 0.994417, 35898e-7, 0, 0.017635, 0.992824, 372393e-8, 0, 0.023365, 0.991344, 390695e-8, 0, 0.0298456, 0.989337, 410392e-8, 0, 0.0370529, 0.985811, 420987e-8, 0, 0.0449651, 0.982772, 437488e-8, 0, 0.0535615, 0.979001, 455069e-8, 0, 0.0628243, 0.974102, 464462e-8, 0, 0.0727368, 0.969197, 480577e-8, 0, 0.0832844, 0.962759, 487818e-8, 0, 0.0944545, 0.956207, 498176e-8, 0, 0.106236, 0.947909, 503392e-8, 0, 0.118619, 0.939596, 507474e-8, 0, 0.131595, 0.929642, 509798e-8, 0, 0.145159, 0.918807, 508476e-8, 0, 0.159305, 0.906921, 505634e-8, 0, 0.174028, 0.893312, 498845e-8, 0, 0.189327, 0.878933, 49133e-7, 0, 0.2052, 0.863986, 48259e-7, 0, 0.221647, 0.847936, 470848e-8, 0, 0.23867, 0.832253, 456889e-8, 0, 0.25627, 0.818619, 442726e-8, 0, 0.274453, 0.804788, 427677e-8, 0, 0.293222, 0.790241, 411906e-8, 0, 0.312585, 0.775162, 394833e-8, 0, 0.33255, 0.759463, 377366e-8, 0, 0.353126, 0.743598, 361026e-8, 0, 0.374324, 0.72697, 343627e-8, 0, 0.396158, 0.709646, 326422e-8, 0, 0.418641, 0.69277, 309717e-8, 0, 0.44179, 0.675371, 29356e-7, 0, 0.465624, 0.657863, 277712e-8, 0, 0.490163, 0.640772, 261738e-8, 0, 0.515429, 0.624441, 24737e-7, 0, 0.541445, 0.607497, 233125e-8, 0, 0.568236, 0.590438, 218994e-8, 0, 0.595828, 0.573224, 20664e-7, 0, 0.624242, 0.556168, 193526e-8, 0, 0.653496, 0.539232, 182463e-8, 0, 0.683588, 0.522352, 170735e-8, 0, 0.714482, 0.506172, 160555e-8, 0, 0.746032, 0.489842, 150451e-8, 0, 0.777778, 0.473463, 140938e-8, 0, 0.809524, 0.457266, 132568e-8, 0, 0.84127, 0.441609, 12376e-7, 0, 0.873016, 0.426348, 116265e-8, 0, 0.904762, 0.411002, 108935e-8, 0, 0.936508, 0.396045, 101946e-8, 0, 0.968254, 0.381448, 955665e-9, 0, 1, 1, 37121e-7, 0, 0, 1, 371213e-8, 0, 0, 1, 371251e-8, 0, 0, 0.999997, 371417e-8, 0, 0, 0.99999, 371863e-8, 0, 0, 0.999977, 372807e-8, 0, 0, 0.99995, 374529e-8, 0, 0, 0.999908, 37738e-7, 0, 0, 0.999843, 381789e-8, 0, 123596e-10, 0.999745, 388273e-8, 0, 407442e-9, 0.999608, 397443e-8, 0, 15447e-7, 0.999415, 409998e-8, 0, 351385e-8, 0.999143, 426662e-8, 0, 63316e-7, 0.9987, 447625e-8, 0, 998679e-8, 0.996363, 455323e-8, 0, 0.0144569, 0.994021, 461052e-8, 0, 0.0197151, 0.992372, 476359e-8, 0, 0.0257344, 0.991007, 499101e-8, 0, 0.0324882, 0.988767, 51972e-7, 0, 0.0399517, 0.984872, 528407e-8, 0, 0.0481022, 0.982004, 548926e-8, 0, 0.0569191, 0.977714, 564385e-8, 0, 0.0663839, 0.973076, 57693e-7, 0, 0.0764801, 0.967565, 58924e-7, 0, 0.0871928, 0.961384, 599629e-8, 0, 0.0985095, 0.954435, 605998e-8, 0, 0.110419, 0.946303, 61133e-7, 0, 0.122912, 0.937662, 612028e-8, 0, 0.13598, 0.927867, 612209e-8, 0, 0.149617, 0.916475, 604813e-8, 0, 0.163817, 0.90541, 603088e-8, 0, 0.178577, 0.891591, 592218e-8, 0, 0.193894, 0.877573, 578854e-8, 0, 0.209767, 0.862511, 566648e-8, 0, 0.226196, 0.846861, 551481e-8, 0, 0.243182, 0.83068, 533754e-8, 0, 0.260728, 0.815725, 515487e-8, 0, 0.278837, 0.802321, 49655e-7, 0, 0.297515, 0.787826, 475421e-8, 0, 0.316768, 0.773454, 456002e-8, 0, 0.336605, 0.758224, 434727e-8, 0, 0.357034, 0.74265, 414444e-8, 0, 0.378067, 0.726729, 393738e-8, 0, 0.399717, 0.710155, 373575e-8, 0, 0.421998, 0.693312, 353736e-8, 0, 0.444928, 0.67653, 334368e-8, 0, 0.468523, 0.659444, 315981e-8, 0, 0.492806, 0.642051, 297809e-8, 0, 0.517798, 0.625758, 280592e-8, 0, 0.543525, 0.609615, 264254e-8, 0, 0.570012, 0.592919, 248459e-8, 0, 0.597288, 0.576298, 233327e-8, 0, 0.625379, 0.559489, 219519e-8, 0, 0.654307, 0.542891, 205441e-8, 0, 0.684084, 0.526255, 193385e-8, 0, 0.714693, 0.509853, 180745e-8, 0, 0.746044, 0.494131, 169817e-8, 0, 0.777778, 0.478114, 15913e-7, 0, 0.809524, 0.462274, 148981e-8, 0, 0.84127, 0.446412, 139537e-8, 0, 0.873016, 0.431274, 130984e-8, 0, 0.904762, 0.41635, 122403e-8, 0, 0.936508, 0.401476, 114809e-8, 0, 0.968254, 0.386993, 107563e-8, 0, 1, 1, 488216e-8, 0, 0, 1, 48822e-7, 0, 0, 1, 488265e-8, 0, 0, 0.999997, 488463e-8, 0, 0, 0.999988, 488999e-8, 0, 0, 0.999974, 490129e-8, 0, 0, 0.999946, 492191e-8, 0, 0, 0.999897, 495598e-8, 0, 0, 0.999825, 500855e-8, 0, 744791e-10, 0.999718, 508559e-8, 0, 712744e-9, 0.999565, 5194e-6, 0, 215249e-8, 0.999352, 534147e-8, 0, 444576e-8, 0.999046, 553523e-8, 0, 759218e-8, 0.998492, 577016e-8, 0, 0.0115714, 0.995564, 578487e-8, 0, 0.0163557, 0.993339, 586414e-8, 0, 0.021915, 0.991834, 606002e-8, 0, 0.0282201, 0.990496, 633312e-8, 0, 0.0352433, 0.987826, 651941e-8, 0, 0.042959, 0.98383, 660842e-8, 0, 0.0513439, 0.98109, 685523e-8, 0, 0.0603772, 0.976131, 695778e-8, 0, 0.0700402, 0.971922, 714236e-8, 0, 0.0803163, 0.965901, 721437e-8, 0, 0.0911908, 0.959606, 732017e-8, 0, 0.102651, 0.952504, 735788e-8, 0, 0.114686, 0.944365, 738493e-8, 0, 0.127286, 0.935652, 737969e-8, 0, 0.140443, 0.925813, 733612e-8, 0, 0.154151, 0.914397, 723094e-8, 0, 0.168405, 0.903257, 714002e-8, 0, 0.183201, 0.890015, 700149e-8, 0, 0.198536, 0.876014, 682813e-8, 0, 0.214409, 0.861436, 665567e-8, 0, 0.23082, 0.845752, 644526e-8, 0, 0.24777, 0.829169, 621635e-8, 0, 0.265263, 0.813435, 597789e-8, 0, 0.283301, 0.799701, 575694e-8, 0, 0.301889, 0.785726, 549866e-8, 0, 0.321035, 0.77152, 52503e-7, 0, 0.340746, 0.75683, 499619e-8, 0, 0.361032, 0.741951, 47543e-7, 0, 0.381904, 0.726367, 45084e-7, 0, 0.403374, 0.710537, 426784e-8, 0, 0.425457, 0.693965, 403487e-8, 0, 0.448169, 0.677724, 38075e-7, 0, 0.47153, 0.66117, 359431e-8, 0, 0.495561, 0.644274, 338354e-8, 0, 0.520284, 0.627449, 318163e-8, 0, 0.545725, 0.611645, 299672e-8, 0, 0.571911, 0.595614, 281016e-8, 0, 0.598873, 0.579426, 264252e-8, 0, 0.62664, 0.563016, 247509e-8, 0, 0.655239, 0.546728, 232647e-8, 0, 0.684692, 0.530539, 217803e-8, 0, 0.714999, 0.514164, 204216e-8, 0, 0.746106, 0.498344, 191403e-8, 0, 0.777778, 0.482957, 179203e-8, 0, 0.809524, 0.467336, 167695e-8, 0, 0.84127, 0.451994, 157567e-8, 0, 0.873016, 0.436514, 147113e-8, 0, 0.904762, 0.42178, 138034e-8, 0, 0.936508, 0.407271, 129219e-8, 0, 0.968254, 0.392822, 12098e-7, 0, 1, 1, 637427e-8, 0, 0, 1, 637431e-8, 0, 0, 0.999999, 637485e-8, 0, 0, 0.999996, 637721e-8, 0, 0, 0.999987, 638357e-8, 0, 0, 0.999971, 6397e-6, 0, 0, 0.999939, 642142e-8, 0, 0, 0.999888, 646177e-8, 0, 0, 0.999807, 652387e-8, 0, 207916e-9, 0.999689, 661454e-8, 0, 112051e-8, 0.99952, 674155e-8, 0, 287719e-8, 0.999283, 691313e-8, 0, 550145e-8, 0.998936, 713598e-8, 0, 897928e-8, 0.998165, 738501e-8, 0, 0.0132829, 0.994847, 734388e-8, 0, 0.01838, 0.993182, 749991e-8, 0, 0.0242381, 0.991665, 77246e-7, 0, 0.030826, 0.989708, 797579e-8, 0, 0.0381152, 0.986663, 813011e-8, 0, 0.0460794, 0.983288, 830365e-8, 0, 0.0546951, 0.980104, 853496e-8, 0, 0.0639411, 0.974855, 861045e-8, 0, 0.0737988, 0.97045, 879133e-8, 0, 0.0842516, 0.964509, 886377e-8, 0, 0.0952848, 0.957594, 890346e-8, 0, 0.106886, 0.950546, 893289e-8, 0, 0.119044, 0.942225, 890074e-8, 0, 0.131749, 0.933365, 886826e-8, 0, 0.144994, 0.923202, 87316e-7, 0, 0.158772, 0.912605, 863082e-8, 0, 0.173078, 0.901099, 847403e-8, 0, 0.187908, 0.888177, 825838e-8, 0, 0.203261, 0.873955, 801834e-8, 0, 0.219134, 0.860091, 779026e-8, 0, 0.235527, 0.84434, 752478e-8, 0, 0.252443, 0.828517, 724074e-8, 0, 0.269883, 0.81239, 693769e-8, 0, 0.287851, 0.79721, 664817e-8, 0, 0.306352, 0.783489, 634763e-8, 0, 0.325393, 0.769514, 604221e-8, 0, 0.344981, 0.755419, 573568e-8, 0, 0.365126, 0.741083, 544359e-8, 0, 0.385839, 0.726059, 515515e-8, 0, 0.407132, 0.710809, 487139e-8, 0, 0.42902, 0.695052, 459846e-8, 0, 0.45152, 0.678886, 433412e-8, 0, 0.474651, 0.663042, 407981e-8, 0, 0.498433, 0.646634, 384264e-8, 0, 0.52289, 0.630117, 360897e-8, 0, 0.548048, 0.613804, 338863e-8, 0, 0.573936, 0.598338, 318486e-8, 0, 0.600584, 0.582687, 298377e-8, 0, 0.628027, 0.566809, 280082e-8, 0, 0.656295, 0.550817, 262255e-8, 0, 0.685417, 0.534937, 245835e-8, 0, 0.715406, 0.519151, 230574e-8, 0, 0.74624, 0.503118, 21549e-7, 0, 0.777778, 0.487723, 202008e-8, 0, 0.809524, 0.472725, 189355e-8, 0, 0.84127, 0.457599, 177108e-8, 0, 0.873016, 0.442558, 165843e-8, 0, 0.904762, 0.427624, 155494e-8, 0, 0.936508, 0.413171, 145273e-8, 0, 0.968254, 0.399122, 136454e-8, 0, 1, 1, 826496e-8, 0, 0, 1, 826499e-8, 0, 0, 1, 826564e-8, 0, 0, 0.999996, 826842e-8, 0, 0, 0.999987, 827589e-8, 0, 0, 0.999967, 829167e-8, 0, 0, 0.999933, 832037e-8, 0, 0, 0.999876, 836768e-8, 0, 109338e-10, 0.999786, 844031e-8, 0, 427145e-9, 0.999655, 854603e-8, 0, 16384e-7, 0.999468, 869337e-8, 0, 372392e-8, 0.999203, 8891e-6, 0, 668513e-8, 0.998803, 914387e-8, 0, 0.0104968, 0.99748, 935838e-8, 0, 0.015125, 0.994446, 933309e-8, 0, 0.0205338, 0.99292, 953084e-8, 0, 0.0266884, 0.991414, 97893e-7, 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, 971928e-8, 0, 0.208077, 0.872204, 940747e-8, 0, 0.22395, 0.858436, 91085e-7, 0, 0.240326, 0.843454, 876595e-8, 0, 0.257208, 0.827437, 839794e-8, 0, 0.274596, 0.811488, 803692e-8, 0, 0.292496, 0.796039, 767352e-8, 0, 0.310911, 0.781083, 73097e-7, 0, 0.329849, 0.767642, 694032e-8, 0, 0.349316, 0.753901, 657476e-8, 0, 0.369323, 0.740131, 622699e-8, 0, 0.38988, 0.725845, 58838e-7, 0, 0.410999, 0.710991, 555586e-8, 0, 0.432696, 0.696002, 523089e-8, 0, 0.454987, 0.680461, 492494e-8, 0, 0.47789, 0.664875, 463464e-8, 0, 0.501426, 0.649273, 435422e-8, 0, 0.52562, 0.63302, 40875e-7, 0, 0.550498, 0.61705, 384075e-8, 0, 0.576089, 0.601154, 359557e-8, 0, 0.602427, 0.586008, 337636e-8, 0, 0.629544, 0.570699, 316019e-8, 0, 0.657479, 0.555166, 296033e-8, 0, 0.686264, 0.539645, 277552e-8, 0, 0.715924, 0.524159, 259499e-8, 0, 0.746459, 0.508682, 243257e-8, 0, 0.777789, 0.493163, 227851e-8, 0, 0.809524, 0.478004, 213083e-8, 0, 0.84127, 0.46347, 199502e-8, 0, 0.873016, 0.448778, 186967e-8, 0, 0.904762, 0.434105, 174732e-8, 0, 0.936508, 0.419576, 163861e-8, 0, 0.968254, 0.405541, 153341e-8, 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, 712986e-10, 0.999763, 0.0108497, 0, 743959e-9, 0.999616, 0.0109716, 0, 227361e-8, 0.999408, 0.0111408, 0, 46983e-7, 0.999112, 0.0113659, 0, 800158e-8, 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, 973254e-8, 0, 0.279412, 0.810859, 92846e-7, 0, 0.297244, 0.795051, 883304e-8, 0, 0.315575, 0.780053, 840272e-8, 0, 0.334412, 0.76575, 796438e-8, 0, 0.35376, 0.752298, 752526e-8, 0, 0.373631, 0.739153, 711486e-8, 0, 0.394034, 0.725514, 670361e-8, 0, 0.414983, 0.711473, 632656e-8, 0, 0.436491, 0.696936, 595206e-8, 0, 0.458575, 0.682126, 559191e-8, 0, 0.481253, 0.667027, 525362e-8, 0, 0.504547, 0.651875, 493805e-8, 0, 0.528481, 0.636463, 462848e-8, 0, 0.553081, 0.620641, 433936e-8, 0, 0.578377, 0.604931, 407e-5, 0, 0.604404, 0.589549, 380864e-8, 0, 0.631197, 0.574712, 357049e-8, 0, 0.658795, 0.559775, 334466e-8, 0, 0.687238, 0.544514, 312505e-8, 0, 0.716559, 0.529555, 293199e-8, 0, 0.746776, 0.514402, 274204e-8, 0, 0.777849, 0.499302, 256647e-8, 0, 0.809524, 0.484114, 239901e-8, 0, 0.84127, 0.469308, 225148e-8, 0, 0.873016, 0.455133, 210178e-8, 0, 0.904762, 0.440939, 19727e-7, 0, 0.936508, 0.426627, 184382e-8, 0, 0.968254, 0.412509, 172548e-8, 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, 204597e-9, 0.999736, 0.0138615, 0, 116837e-8, 0.999573, 0.0140007, 0, 303325e-8, 0.99934, 0.0141927, 0, 580613e-8, 0.999004, 0.0144457, 0, 945626e-8, 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, 964041e-8, 0, 0.33909, 0.764697, 911896e-8, 0, 0.358322, 0.750913, 859533e-8, 0, 0.378059, 0.738175, 811592e-8, 0, 0.398311, 0.725242, 764504e-8, 0, 0.41909, 0.711864, 718885e-8, 0, 0.440412, 0.698009, 675843e-8, 0, 0.462292, 0.683841, 634984e-8, 0, 0.484748, 0.669391, 595502e-8, 0, 0.507802, 0.654731, 558671e-8, 0, 0.531477, 0.639805, 523578e-8, 0, 0.555802, 0.624789, 490834e-8, 0, 0.580805, 0.609325, 459448e-8, 0, 0.606522, 0.593975, 430342e-8, 0, 0.63299, 0.578983, 403019e-8, 0, 0.66025, 0.564442, 37707e-7, 0, 0.688346, 0.549835, 35316e-7, 0, 0.717319, 0.535039, 330255e-8, 0, 0.7472, 0.520403, 308932e-8, 0, 0.777982, 0.505687, 289335e-8, 0, 0.809524, 0.490939, 270818e-8, 0, 0.84127, 0.476233, 25343e-7, 0, 0.873016, 0.461624, 237097e-8, 0, 0.904762, 0.447833, 222065e-8, 0, 0.936508, 0.433992, 207561e-8, 0, 0.968254, 0.420147, 194955e-8, 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, 669501e-11, 0.999828, 0.0174973, 0, 427399e-9, 0.999705, 0.0176063, 0, 171019e-8, 0.999524, 0.0177631, 0, 39248e-7, 0.999263, 0.0179781, 0, 705382e-8, 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, 98219e-7, 0, 0.382617, 0.737264, 924397e-8, 0, 0.402719, 0.724799, 868719e-8, 0, 0.423332, 0.712253, 816476e-8, 0, 0.444469, 0.699267, 767262e-8, 0, 0.466146, 0.685618, 719746e-8, 0, 0.488383, 0.671736, 673916e-8, 0, 0.511199, 0.657777, 631937e-8, 0, 0.534618, 0.643497, 592411e-8, 0, 0.558668, 0.62889, 553928e-8, 0, 0.58338, 0.614299, 51934e-7, 0, 0.608787, 0.599197, 485985e-8, 0, 0.634929, 0.584175, 454357e-8, 0, 0.661849, 0.569541, 425787e-8, 0, 0.689594, 0.555193, 397905e-8, 0, 0.718211, 0.540947, 372364e-8, 0, 0.747742, 0.526593, 348599e-8, 0, 0.778205, 0.512335, 326103e-8, 0, 0.80953, 0.498017, 305137e-8, 0, 0.84127, 0.483609, 285485e-8, 0, 0.873016, 0.469368, 267472e-8, 0, 0.904762, 0.455037, 249945e-8, 0, 0.936508, 0.441493, 234792e-8, 0, 0.968254, 0.428147, 219936e-8, 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, 593194e-10, 0.999808, 0.0221167, 0, 75364e-8, 0.99967, 0.0222383, 0, 237884e-8, 0.999466, 0.0224125, 0, 495612e-8, 0.999174, 0.0226495, 0, 844887e-8, 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, 987277e-8, 0, 0.427717, 0.712644, 926569e-8, 0, 0.448671, 0.700432, 869029e-8, 0, 0.470149, 0.687664, 814691e-8, 0, 0.492167, 0.674288, 763012e-8, 0, 0.514746, 0.660966, 714437e-8, 0, 0.537911, 0.647264, 668457e-8, 0, 0.561688, 0.633431, 626581e-8, 0, 0.586108, 0.619133, 585593e-8, 0, 0.611206, 0.604935, 548188e-8, 0, 0.637022, 0.590236, 513288e-8, 0, 0.663599, 0.575473, 47906e-7, 0, 0.690989, 0.561228, 448895e-8, 0, 0.719242, 0.547054, 420233e-8, 0, 0.748411, 0.533175, 392869e-8, 0, 0.778531, 0.519163, 367445e-8, 0, 0.809583, 0.505328, 344097e-8, 0, 0.84127, 0.491446, 322003e-8, 0, 0.873016, 0.477356, 301283e-8, 0, 0.904762, 0.46356, 282592e-8, 0, 0.936508, 0.449623, 264956e-8, 0, 0.968254, 0.436068, 246956e-8, 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, 18679e-8, 0.999784, 0.027806, 0, 119607e-8, 0.99963, 0.0279394, 0, 318407e-8, 0.999401, 0.0281295, 0, 613601e-8, 0.999066, 0.0283858, 0, 999963e-8, 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, 984032e-8, 0, 0.47431, 0.689703, 921495e-8, 0, 0.496111, 0.677216, 862492e-8, 0, 0.518456, 0.664217, 806882e-8, 0, 0.541367, 0.65137, 755922e-8, 0, 0.564872, 0.638, 705705e-8, 0, 0.589001, 0.62453, 661266e-8, 0, 0.613789, 0.610601, 618432e-8, 0, 0.639277, 0.59676, 578033e-8, 0, 0.66551, 0.582433, 540927e-8, 0, 0.692539, 0.568026, 506104e-8, 0, 0.720422, 0.55414, 47353e-7, 0, 0.749216, 0.540178, 442889e-8, 0, 0.778974, 0.526513, 414363e-8, 0, 0.809711, 0.512954, 388237e-8, 0, 0.84127, 0.499403, 362875e-8, 0, 0.873016, 0.486026, 340827e-8, 0, 0.904762, 0.472345, 318598e-8, 0, 0.936508, 0.458828, 297635e-8, 0, 0.968254, 0.445379, 279447e-8, 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, 188589e-11, 0.999869, 0.0346847, 0, 409238e-9, 0.999757, 0.0347798, 0, 17674e-7, 0.999582, 0.0349233, 0, 413658e-8, 0.999322, 0.0351265, 0, 747408e-8, 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, 974439e-8, 0, 0.522339, 0.668073, 911926e-8, 0, 0.544997, 0.655405, 851393e-8, 0, 0.56823, 0.642921, 797637e-8, 0, 0.592068, 0.629993, 745119e-8, 0, 0.616546, 0.616828, 696972e-8, 0, 0.641705, 0.603305, 652425e-8, 0, 0.66759, 0.589833, 610188e-8, 0, 0.694255, 0.575945, 570834e-8, 0, 0.72176, 0.561745, 533384e-8, 0, 0.750168, 0.548277, 500001e-8, 0, 0.779545, 0.534467, 467582e-8, 0, 0.809933, 0.521032, 438092e-8, 0, 0.841272, 0.507877, 410348e-8, 0, 0.873016, 0.494654, 383618e-8, 0, 0.904762, 0.481592, 358699e-8, 0, 0.936508, 0.468509, 337281e-8, 0, 0.968254, 0.455293, 316196e-8, 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, 406396e-10, 0.999852, 0.0431893, 0, 744376e-9, 0.999724, 0.0432895, 0, 24806e-7, 0.999527, 0.0434397, 0, 524779e-8, 0.99923, 0.0436507, 0, 898164e-8, 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, 962044e-8, 0, 0.571776, 0.647907, 898031e-8, 0, 0.595323, 0.635734, 840811e-8, 0, 0.619489, 0.623208, 786211e-8, 0, 0.644317, 0.610438, 734953e-8, 0, 0.669852, 0.597345, 687688e-8, 0, 0.696148, 0.584138, 643469e-8, 0, 0.723267, 0.5707, 602236e-8, 0, 0.75128, 0.556966, 56324e-7, 0, 0.780258, 0.543607, 528277e-8, 0, 0.810268, 0.530213, 493999e-8, 0, 0.841311, 0.516912, 462265e-8, 0, 0.873016, 0.503916, 43307e-7, 0, 0.904762, 0.491146, 406858e-8, 0, 0.936508, 0.478439, 381436e-8, 0, 0.968254, 0.465834, 358003e-8, 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, 155895e-9, 0.99983, 0.0535262, 0, 120914e-8, 0.999685, 0.0536281, 0, 334944e-8, 0.999461, 0.0537799, 0, 653077e-8, 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, 947756e-8, 0, 0.622634, 0.629794, 886058e-8, 0, 0.647128, 0.617647, 828526e-8, 0, 0.672308, 0.60534, 775312e-8, 0, 0.698231, 0.592718, 726033e-8, 0, 0.724958, 0.579746, 679731e-8, 0, 0.752563, 0.566763, 636111e-8, 0, 0.781127, 0.553515, 595228e-8, 0, 0.810733, 0.540118, 556876e-8, 0, 0.841426, 0.527325, 523051e-8, 0, 0.873016, 0.514265, 490712e-8, 0, 0.904762, 0.501406, 460297e-8, 0, 0.936508, 0.488922, 431247e-8, 0, 0.968254, 0.476541, 40472e-7, 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, 374198e-9, 0.999806, 0.0660376, 0, 182071e-8, 0.999639, 0.0661361, 0, 43894e-7, 0.999378, 0.0662814, 0, 800055e-8, 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, 998997e-8, 0, 0.650154, 0.625154, 934313e-8, 0, 0.674976, 0.613481, 874839e-8, 0, 0.700518, 0.60154, 818265e-8, 0, 0.726845, 0.58943, 766889e-8, 0, 0.754032, 0.576828, 717153e-8, 0, 0.782167, 0.564194, 672696e-8, 0, 0.811344, 0.551501, 630863e-8, 0, 0.841644, 0.538635, 592177e-8, 0, 0.873016, 0.525724, 554888e-8, 0, 0.904762, 0.513209, 520225e-8, 0, 0.936508, 0.500457, 488231e-8, 0, 0.968254, 0.48799, 457153e-8, 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, 195026e-10, 0.999893, 0.0810656, 0, 719316e-9, 0.999777, 0.0811205, 0, 259774e-8, 0.999583, 0.081208, 0, 561807e-8, 0.999281, 0.0813343, 0, 967472e-8, 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, 986498e-8, 0, 0.70303, 0.610631, 923308e-8, 0, 0.728948, 0.599078, 864206e-8, 0, 0.755706, 0.587519, 811784e-8, 0, 0.783396, 0.575505, 761237e-8, 0, 0.812121, 0.563148, 713949e-8, 0, 0.841989, 0.550828, 668379e-8, 0, 0.873035, 0.538458, 627715e-8, 0, 0.904762, 0.525905, 588336e-8, 0, 0.936508, 0.513517, 552687e-8, 0, 0.968254, 0.501395, 519681e-8, 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, 114389e-9, 0.999874, 0.0991912, 0, 121503e-8, 0.999739, 0.0992331, 0, 356108e-8, 0.999514, 0.0992983, 0, 705578e-8, 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, 978747e-8, 0, 0.757606, 0.598137, 917257e-8, 0, 0.784834, 0.586966, 859778e-8, 0, 0.813085, 0.575549, 806803e-8, 0, 0.842485, 0.563797, 757294e-8, 0, 0.87313, 0.551758, 710592e-8, 0, 0.904762, 0.539894, 66841e-7, 0, 0.936508, 0.527901, 627901e-8, 0, 0.968254, 0.515819, 590506e-8, 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, 323781e-9, 0.999852, 0.120884, 0, 188693e-8, 0.999693, 0.120903, 0, 473489e-8, 0.999426, 0.120929, 0, 872704e-8, 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, 973009e-8, 0, 0.814259, 0.587871, 912812e-8, 0, 0.843157, 0.577121, 858916e-8, 0, 0.87334, 0.566019, 807333e-8, 0, 0.904762, 0.554664, 759687e-8, 0, 0.936508, 0.543101, 714759e-8, 0, 0.968254, 0.531558, 673418e-8, 0, 1, 1, 0.146767, 0, 0, 1, 0.146767, 0, 0, 0.999997, 0.146767, 0, 0, 0.999977, 0.146765, 0, 320658e-11, 0.999929, 0.146762, 0, 682576e-9, 0.999823, 0.146753, 0, 276402e-8, 0.999633, 0.146735, 0, 614771e-8, 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, 975623e-8, 0, 0.873699, 0.580254, 918084e-8, 0, 0.904765, 0.569841, 864721e-8, 0, 0.936508, 0.559224, 815731e-8, 0, 0.968254, 0.548315, 767924e-8, 0, 1, 1, 0.177563, 0, 0, 1, 0.177563, 0, 0, 0.999994, 0.177562, 0, 0, 0.999972, 0.177555, 0, 664171e-10, 0.999914, 0.177536, 0, 12276e-7, 0.999787, 0.177496, 0, 388025e-8, 0.999556, 0.17742, 0, 783463e-8, 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, 986672e-8, 0, 0.936508, 0.575413, 929712e-8, 0, 0.968254, 0.565373, 876713e-8, 0, 1, 1, 0.214058, 0, 0, 0.999999, 0.214058, 0, 0, 0.999994, 0.214055, 0, 0, 0.999966, 0.214039, 0, 259642e-9, 0.999893, 0.213998, 0, 200075e-8, 0.999737, 0.21391, 0, 527775e-8, 0.999449, 0.213745, 0, 983959e-8, 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, 641715e-9, 0.999864, 0.25706, 0, 305314e-8, 0.999666, 0.256897, 0, 700975e-8, 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, 204479e-10, 0.999944, 0.307886, 0, 127833e-8, 0.999824, 0.307756, 0, 445047e-8, 0.999565, 0.30748, 0, 914673e-8, 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, 183382e-9, 0.999925, 0.367473, 0, 225254e-8, 0.999759, 0.367259, 0, 628165e-8, 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, 616704e-9, 0.999891, 0.437232, 0, 367925e-8, 0.999656, 0.436877, 0, 867446e-8, 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, 147741e-8, 0.999832, 0.51866, 0, 573221e-8, 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, 963597e-10, 0.999942, 0.613814, 0, 301247e-8, 0.999704, 0.613407, 0, 870385e-8, 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, 726889e-9, 0.99987, 0.724044, 0, 569574e-8, 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, 279627e-8, 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]; + const ltc_float_1 = new Float32Array(LTC_MAT_1); + const ltc_float_2 = new Float32Array(LTC_MAT_2); + const LTC_FLOAT_1 = new DataTexture(ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + const LTC_FLOAT_2 = new DataTexture(ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + LTC_FLOAT_1.needsUpdate = true; + LTC_FLOAT_2.needsUpdate = true; + const ltc_half_1 = new Uint16Array(LTC_MAT_1.length); + LTC_MAT_1.forEach(function(x2, index2) { + ltc_half_1[index2] = DataUtils.toHalfFloat(x2); + }); + const ltc_half_2 = new Uint16Array(LTC_MAT_2.length); + LTC_MAT_2.forEach(function(x2, index2) { + ltc_half_2[index2] = DataUtils.toHalfFloat(x2); + }); + const LTC_HALF_1 = new DataTexture(ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + const LTC_HALF_2 = new DataTexture(ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); + LTC_HALF_1.needsUpdate = true; + LTC_HALF_2.needsUpdate = true; + this.LTC_HALF_1 = LTC_HALF_1; + this.LTC_HALF_1 = LTC_HALF_2; + this.LTC_FLOAT_1 = LTC_FLOAT_1; + this.LTC_FLOAT_2 = LTC_FLOAT_2; + return this; + } +}; +RectAreaLightTexturesLib.LTC_HALF_1 = null; +RectAreaLightTexturesLib.LTC_HALF_1 = null; +RectAreaLightTexturesLib.LTC_FLOAT_1 = null; +RectAreaLightTexturesLib.LTC_FLOAT_2 = null; + +// node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js +var RectAreaLightUniformsLib = class { + static init() { + RectAreaLightTexturesLib.init(); + const { LTC_FLOAT_1, LTC_FLOAT_2, LTC_HALF_1, LTC_HALF_2 } = RectAreaLightTexturesLib; + UniformsLib.LTC_FLOAT_1 = LTC_FLOAT_1; + UniformsLib.LTC_FLOAT_2 = LTC_FLOAT_2; + UniformsLib.LTC_HALF_1 = LTC_HALF_1; + UniformsLib.LTC_HALF_2 = LTC_HALF_2; + } +}; + +// node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js +var _box = new Box3(); +var _vector3 = new Vector3(); +var LineSegmentsGeometry = class extends InstancedBufferGeometry { + constructor() { + super(); + this.isLineSegmentsGeometry = true; + this.type = "LineSegmentsGeometry"; + const 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]; + const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2]; + const index2 = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5]; + this.setIndex(index2); + this.setAttribute("position", new Float32BufferAttribute(positions, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + applyMatrix4(matrix3) { + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0) { + start.applyMatrix4(matrix3); + end.applyMatrix4(matrix3); + start.needsUpdate = true; + } + if (this.boundingBox !== null) { + this.computeBoundingBox(); + } + if (this.boundingSphere !== null) { + this.computeBoundingSphere(); + } + return this; + } + setPositions(array) { + let lineSegments; + if (array instanceof Float32Array) { + lineSegments = array; + } else if (Array.isArray(array)) { + lineSegments = new Float32Array(array); + } + const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1); + this.setAttribute("instanceStart", new InterleavedBufferAttribute(instanceBuffer, 3, 0)); + this.setAttribute("instanceEnd", new InterleavedBufferAttribute(instanceBuffer, 3, 3)); + this.computeBoundingBox(); + this.computeBoundingSphere(); + return this; + } + setColors(array) { + let colors; + if (array instanceof Float32Array) { + colors = array; + } else if (Array.isArray(array)) { + colors = new Float32Array(array); + } + const instanceColorBuffer = new InstancedInterleavedBuffer(colors, 6, 1); + this.setAttribute("instanceColorStart", new InterleavedBufferAttribute(instanceColorBuffer, 3, 0)); + this.setAttribute("instanceColorEnd", new InterleavedBufferAttribute(instanceColorBuffer, 3, 3)); + return this; + } + fromWireframeGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromEdgesGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromMesh(mesh) { + this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry)); + return this; + } + fromLineSegments(lineSegments) { + const geometry = lineSegments.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) { + this.boundingBox = new Box3(); + } + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + this.boundingBox.setFromBufferAttribute(start); + _box.setFromBufferAttribute(end); + this.boundingBox.union(_box); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) { + this.boundingSphere = new Sphere(); + } + if (this.boundingBox === null) { + this.computeBoundingBox(); + } + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + const center = this.boundingSphere.center; + this.boundingBox.getCenter(center); + let maxRadiusSq = 0; + for (let i = 0, il = start.count; i < il; i++) { + _vector3.fromBufferAttribute(start, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector3)); + _vector3.fromBufferAttribute(end, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector3)); + } + this.boundingSphere.radius = Math.sqrt(maxRadiusSq); + if (isNaN(this.boundingSphere.radius)) { + console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this); + } + } + } + toJSON() { + } + applyMatrix(matrix3) { + console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."); + return this.applyMatrix4(matrix3); + } +}; + +// node_modules/three/examples/jsm/lines/LineMaterial.js +UniformsLib.line = { + worldUnits: { value: 1 }, + linewidth: { value: 1 }, + resolution: { value: new Vector2(1, 1) }, + dashOffset: { value: 0 }, + dashScale: { value: 1 }, + dashSize: { value: 1 }, + gapSize: { value: 1 } + // todo FIX - maybe change to totalSize +}; +ShaderLib["line"] = { + uniforms: UniformsUtils.merge([ + UniformsLib.common, + UniformsLib.fog, + UniformsLib.line + ]), + vertexShader: ( + /* glsl */ + ` + #include + #include + #include + #include + #include + + uniform float linewidth; + uniform vec2 resolution; + + attribute vec3 instanceStart; + attribute vec3 instanceEnd; + + attribute vec3 instanceColorStart; + attribute vec3 instanceColorEnd; + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #ifdef USE_DASH + + uniform float dashScale; + attribute float instanceDistanceStart; + attribute float instanceDistanceEnd; + varying float vLineDistance; + + #endif + + void trimSegment( const in vec4 start, inout vec4 end ) { + + // trim end segment so it terminates between the camera plane and the near plane + + // conservative estimate of the near plane + float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column + float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column + float nearEstimate = - 0.5 * b / a; + + float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); + + end.xyz = mix( start.xyz, end.xyz, alpha ); + + } + + void main() { + + #ifdef USE_COLOR + + vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; + + #endif + + #ifdef USE_DASH + + vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; + vUv = uv; + + #endif + + float aspect = resolution.x / resolution.y; + + // camera space + vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); + vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); + + #ifdef WORLD_UNITS + + worldStart = start.xyz; + worldEnd = end.xyz; + + #else + + vUv = uv; + + #endif + + // special case for perspective projection, and segments that terminate either in, or behind, the camera plane + // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space + // but we need to perform ndc-space calculations in the shader, so we must address this issue directly + // perhaps there is a more elegant solution -- WestLangley + + bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column + + if ( perspective ) { + + if ( start.z < 0.0 && end.z >= 0.0 ) { + + trimSegment( start, end ); + + } else if ( end.z < 0.0 && start.z >= 0.0 ) { + + trimSegment( end, start ); + + } + + } + + // clip space + vec4 clipStart = projectionMatrix * start; + vec4 clipEnd = projectionMatrix * end; + + // ndc space + vec3 ndcStart = clipStart.xyz / clipStart.w; + vec3 ndcEnd = clipEnd.xyz / clipEnd.w; + + // direction + vec2 dir = ndcEnd.xy - ndcStart.xy; + + // account for clip-space aspect ratio + dir.x *= aspect; + dir = normalize( dir ); + + #ifdef WORLD_UNITS + + vec3 worldDir = normalize( end.xyz - start.xyz ); + vec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) ); + vec3 worldUp = normalize( cross( worldDir, tmpFwd ) ); + vec3 worldFwd = cross( worldDir, worldUp ); + worldPos = position.y < 0.5 ? start: end; + + // height offset + float hw = linewidth * 0.5; + worldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp; + + // don't extend the line if we're rendering dashes because we + // won't be rendering the endcaps + #ifndef USE_DASH + + // cap extension + worldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir; + + // add width to the box + worldPos.xyz += worldFwd * hw; + + // endcaps + if ( position.y > 1.0 || position.y < 0.0 ) { + + worldPos.xyz -= worldFwd * 2.0 * hw; + + } + + #endif + + // project the worldpos + vec4 clip = projectionMatrix * worldPos; + + // shift the depth of the projected points so the line + // segments overlap neatly + vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; + clip.z = clipPose.z * clip.w; + + #else + + vec2 offset = vec2( dir.y, - dir.x ); + // undo aspect ratio adjustment + dir.x /= aspect; + offset.x /= aspect; + + // sign flip + if ( position.x < 0.0 ) offset *= - 1.0; + + // endcaps + if ( position.y < 0.0 ) { + + offset += - dir; + + } else if ( position.y > 1.0 ) { + + offset += dir; + + } + + // adjust for linewidth + offset *= linewidth; + + // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... + offset /= resolution.y; + + // select end + vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; + + // back to clip space + offset *= clip.w; + + clip.xy += offset; + + #endif + + gl_Position = clip; + + vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation + + #include + #include + #include + + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + uniform vec3 diffuse; + uniform float opacity; + uniform float linewidth; + + #ifdef USE_DASH + + uniform float dashOffset; + uniform float dashSize; + uniform float gapSize; + + #endif + + varying float vLineDistance; + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #include + #include + #include + #include + #include + + vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { + + float mua; + float mub; + + vec3 p13 = p1 - p3; + vec3 p43 = p4 - p3; + + vec3 p21 = p2 - p1; + + float d1343 = dot( p13, p43 ); + float d4321 = dot( p43, p21 ); + float d1321 = dot( p13, p21 ); + float d4343 = dot( p43, p43 ); + float d2121 = dot( p21, p21 ); + + float denom = d2121 * d4343 - d4321 * d4321; + + float numer = d1343 * d4321 - d1321 * d4343; + + mua = numer / denom; + mua = clamp( mua, 0.0, 1.0 ); + mub = ( d1343 + d4321 * ( mua ) ) / d4343; + mub = clamp( mub, 0.0, 1.0 ); + + return vec2( mua, mub ); + + } + + void main() { + + #include + + #ifdef USE_DASH + + if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps + + if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX + + #endif + + float alpha = opacity; + + #ifdef WORLD_UNITS + + // Find the closest points on the view ray and the line segment + vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; + vec3 lineDir = worldEnd - worldStart; + vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); + + vec3 p1 = worldStart + lineDir * params.x; + vec3 p2 = rayEnd * params.y; + vec3 delta = p1 - p2; + float len = length( delta ); + float norm = len / linewidth; + + #ifndef USE_DASH + + #ifdef USE_ALPHA_TO_COVERAGE + + float dnorm = fwidth( norm ); + alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); + + #else + + if ( norm > 0.5 ) { + + discard; + + } + + #endif + + #endif + + #else + + #ifdef USE_ALPHA_TO_COVERAGE + + // artifacts appear on some hardware if a derivative is taken within a conditional + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + float dlen = fwidth( len2 ); + + if ( abs( vUv.y ) > 1.0 ) { + + alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); + + } + + #else + + if ( abs( vUv.y ) > 1.0 ) { + + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + + if ( len2 > 1.0 ) discard; + + } + + #endif + + #endif + + vec4 diffuseColor = vec4( diffuse, alpha ); + + #include + #include + + gl_FragColor = vec4( diffuseColor.rgb, alpha ); + + #include + #include + #include + #include + + } + ` + ) +}; +var LineMaterial = class extends ShaderMaterial { + constructor(parameters) { + super({ + type: "LineMaterial", + uniforms: UniformsUtils.clone(ShaderLib["line"].uniforms), + vertexShader: ShaderLib["line"].vertexShader, + fragmentShader: ShaderLib["line"].fragmentShader, + clipping: true + // required for clipping support + }); + this.isLineMaterial = true; + this.setValues(parameters); + } + get color() { + return this.uniforms.diffuse.value; + } + set color(value2) { + this.uniforms.diffuse.value = value2; + } + get worldUnits() { + return "WORLD_UNITS" in this.defines; + } + set worldUnits(value2) { + if (value2 === true) { + this.defines.WORLD_UNITS = ""; + } else { + delete this.defines.WORLD_UNITS; + } + } + get linewidth() { + return this.uniforms.linewidth.value; + } + set linewidth(value2) { + if (!this.uniforms.linewidth) return; + this.uniforms.linewidth.value = value2; + } + get dashed() { + return "USE_DASH" in this.defines; + } + set dashed(value2) { + if (value2 === true !== this.dashed) { + this.needsUpdate = true; + } + if (value2 === true) { + this.defines.USE_DASH = ""; + } else { + delete this.defines.USE_DASH; + } + } + get dashScale() { + return this.uniforms.dashScale.value; + } + set dashScale(value2) { + this.uniforms.dashScale.value = value2; + } + get dashSize() { + return this.uniforms.dashSize.value; + } + set dashSize(value2) { + this.uniforms.dashSize.value = value2; + } + get dashOffset() { + return this.uniforms.dashOffset.value; + } + set dashOffset(value2) { + this.uniforms.dashOffset.value = value2; + } + get gapSize() { + return this.uniforms.gapSize.value; + } + set gapSize(value2) { + this.uniforms.gapSize.value = value2; + } + get opacity() { + return this.uniforms.opacity.value; + } + set opacity(value2) { + if (!this.uniforms) return; + this.uniforms.opacity.value = value2; + } + get resolution() { + return this.uniforms.resolution.value; + } + set resolution(value2) { + this.uniforms.resolution.value.copy(value2); + } + get alphaToCoverage() { + return "USE_ALPHA_TO_COVERAGE" in this.defines; + } + set alphaToCoverage(value2) { + if (!this.defines) return; + if (value2 === true !== this.alphaToCoverage) { + this.needsUpdate = true; + } + if (value2 === true) { + this.defines.USE_ALPHA_TO_COVERAGE = ""; + } else { + delete this.defines.USE_ALPHA_TO_COVERAGE; + } + } +}; + +// node_modules/three/examples/jsm/lines/LineSegments2.js +var _viewport = new Vector4(); +var _start = new Vector3(); +var _end = new Vector3(); +var _start4 = new Vector4(); +var _end4 = new Vector4(); +var _ssOrigin = new Vector4(); +var _ssOrigin3 = new Vector3(); +var _mvMatrix = new Matrix4(); +var _line = new Line3(); +var _closestPoint2 = new Vector3(); +var _box2 = new Box3(); +var _sphere = new Sphere(); +var _clipToWorldVector = new Vector4(); +var _ray; +var _lineWidth; +function getWorldSpaceHalfWidth(camera, distance, resolution) { + _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + _clipToWorldVector.x = _lineWidth / resolution.width; + _clipToWorldVector.y = _lineWidth / resolution.height; + _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y)); +} +function raycastWorldUnits(lineSegments, intersects) { + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + for (let i = 0, l2 = segmentCount; i < l2; i++) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray.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), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + uv1: null + }); + } + } +} +function raycastScreenSpace(lineSegments, camera, intersects) { + const projectionMatrix = camera.projectionMatrix; + const material = lineSegments.material; + const resolution = material.resolution; + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + const near = -camera.near; + _ray.at(1, _ssOrigin); + _ssOrigin.w = 1; + _ssOrigin.applyMatrix4(camera.matrixWorldInverse); + _ssOrigin.applyMatrix4(projectionMatrix); + _ssOrigin.multiplyScalar(1 / _ssOrigin.w); + _ssOrigin.x *= resolution.x / 2; + _ssOrigin.y *= resolution.y / 2; + _ssOrigin.z = 0; + _ssOrigin3.copy(_ssOrigin); + _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld); + for (let i = 0, l2 = segmentCount; i < l2; i++) { + _start4.fromBufferAttribute(instanceStart, i); + _end4.fromBufferAttribute(instanceEnd, i); + _start4.w = 1; + _end4.w = 1; + _start4.applyMatrix4(_mvMatrix); + _end4.applyMatrix4(_mvMatrix); + const isBehindCameraNear = _start4.z > near && _end4.z > near; + if (isBehindCameraNear) { + continue; + } + if (_start4.z > near) { + const deltaDist = _start4.z - _end4.z; + const t3 = (_start4.z - near) / deltaDist; + _start4.lerp(_end4, t3); + } else if (_end4.z > near) { + const deltaDist = _end4.z - _start4.z; + const t3 = (_end4.z - near) / deltaDist; + _end4.lerp(_start4, t3); + } + _start4.applyMatrix4(projectionMatrix); + _end4.applyMatrix4(projectionMatrix); + _start4.multiplyScalar(1 / _start4.w); + _end4.multiplyScalar(1 / _end4.w); + _start4.x *= resolution.x / 2; + _start4.y *= resolution.y / 2; + _end4.x *= resolution.x / 2; + _end4.y *= resolution.y / 2; + _line.start.copy(_start4); + _line.start.z = 0; + _line.end.copy(_end4); + _line.end.z = 0; + const param = _line.closestPointToPointParameter(_ssOrigin3, true); + _line.at(param, _closestPoint2); + const zPos = MathUtils.lerp(_start4.z, _end4.z, param); + const isInClipSpace = zPos >= -1 && zPos <= 1; + const isInside = _ssOrigin3.distanceTo(_closestPoint2) < _lineWidth * 0.5; + if (isInClipSpace && isInside) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.start.applyMatrix4(matrixWorld); + _line.end.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + intersects.push({ + point, + pointOnLine, + distance: _ray.origin.distanceTo(point), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + uv1: null + }); + } + } +} +var LineSegments2 = class extends Mesh { + constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLineSegments2 = true; + this.type = "LineSegments2"; + } + // for backwards-compatibility, but could be a method of LineSegmentsGeometry... + computeLineDistances() { + const geometry = this.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const lineDistances = new Float32Array(2 * instanceStart.count); + for (let i = 0, j = 0, l2 = instanceStart.count; i < l2; i++, j += 2) { + _start.fromBufferAttribute(instanceStart, i); + _end.fromBufferAttribute(instanceEnd, i); + lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; + lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end); + } + const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); + geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); + geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); + return this; + } + raycast(raycaster, intersects) { + const worldUnits = this.material.worldUnits; + const camera = raycaster.camera; + if (camera === null && !worldUnits) { + 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; + const matrixWorld = this.matrixWorld; + const geometry = this.geometry; + const material = this.material; + _lineWidth = material.linewidth + threshold; + if (geometry.boundingSphere === null) { + geometry.computeBoundingSphere(); + } + _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld); + let sphereMargin; + if (worldUnits) { + sphereMargin = _lineWidth * 0.5; + } else { + const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin)); + sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution); + } + _sphere.radius += sphereMargin; + if (_ray.intersectsSphere(_sphere) === false) { + return; + } + if (geometry.boundingBox === null) { + geometry.computeBoundingBox(); + } + _box2.copy(geometry.boundingBox).applyMatrix4(matrixWorld); + let boxMargin; + if (worldUnits) { + boxMargin = _lineWidth * 0.5; + } else { + const distanceToBox = Math.max(camera.near, _box2.distanceToPoint(_ray.origin)); + boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution); + } + _box2.expandByScalar(boxMargin); + if (_ray.intersectsBox(_box2) === false) { + return; + } + if (worldUnits) { + raycastWorldUnits(this, intersects); + } else { + raycastScreenSpace(this, camera, intersects); + } + } + onBeforeRender(renderer2) { + const uniforms = this.material.uniforms; + if (uniforms && uniforms.resolution) { + renderer2.getViewport(_viewport); + this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w); + } + } +}; + +// node_modules/three/examples/jsm/lines/LineGeometry.js +var LineGeometry = class extends LineSegmentsGeometry { + constructor() { + super(); + this.isLineGeometry = true; + this.type = "LineGeometry"; + } + setPositions(array) { + const length2 = array.length - 3; + const points = new Float32Array(2 * length2); + for (let i = 0; i < length2; i += 3) { + points[2 * i] = array[i]; + points[2 * i + 1] = array[i + 1]; + points[2 * i + 2] = array[i + 2]; + points[2 * i + 3] = array[i + 3]; + points[2 * i + 4] = array[i + 4]; + points[2 * i + 5] = array[i + 5]; + } + super.setPositions(points); + return this; + } + setColors(array) { + const length2 = array.length - 3; + const colors = new Float32Array(2 * length2); + for (let i = 0; i < length2; i += 3) { + colors[2 * i] = array[i]; + colors[2 * i + 1] = array[i + 1]; + colors[2 * i + 2] = array[i + 2]; + colors[2 * i + 3] = array[i + 3]; + colors[2 * i + 4] = array[i + 4]; + colors[2 * i + 5] = array[i + 5]; + } + super.setColors(colors); + return this; + } + fromLine(line2) { + const geometry = line2.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } +}; + +// node_modules/three/examples/jsm/lines/Line2.js +var Line2 = class extends LineSegments2 { + constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLine2 = true; + this.type = "Line2"; + } +}; + +// node_modules/three/examples/jsm/lines/Wireframe.js +var _start2 = new Vector3(); +var _end2 = new Vector3(); +var _viewport2 = new Vector4(); +var Wireframe = class extends Mesh { + constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isWireframe = true; + this.type = "Wireframe"; + } + // for backwards-compatibility, but could be a method of LineSegmentsGeometry... + computeLineDistances() { + const geometry = this.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const lineDistances = new Float32Array(2 * instanceStart.count); + for (let i = 0, j = 0, l2 = instanceStart.count; i < l2; i++, j += 2) { + _start2.fromBufferAttribute(instanceStart, i); + _end2.fromBufferAttribute(instanceEnd, i); + lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; + lineDistances[j + 1] = lineDistances[j] + _start2.distanceTo(_end2); + } + const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); + geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); + geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); + return this; + } + onBeforeRender(renderer2) { + const uniforms = this.material.uniforms; + if (uniforms && uniforms.resolution) { + renderer2.getViewport(_viewport2); + this.material.uniforms.resolution.value.set(_viewport2.z, _viewport2.w); + } + } +}; + +// node_modules/three/examples/jsm/lines/WireframeGeometry2.js +var WireframeGeometry2 = class extends LineSegmentsGeometry { + constructor(geometry) { + super(); + this.isWireframeGeometry2 = true; + this.type = "WireframeGeometry2"; + this.fromWireframeGeometry(new WireframeGeometry(geometry)); + } +}; + +// node_modules/three/examples/jsm/loaders/EXRLoader.js +var EXRLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const USHORT_RANGE = 1 << 16; + const BITMAP_SIZE = USHORT_RANGE >> 3; + const HUF_ENCBITS = 16; + const HUF_DECBITS = 14; + const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; + const HUF_DECSIZE = 1 << HUF_DECBITS; + const HUF_DECMASK = HUF_DECSIZE - 1; + const NBITS = 16; + const A_OFFSET = 1 << NBITS - 1; + const MOD_MASK = (1 << NBITS) - 1; + const SHORT_ZEROCODE_RUN = 59; + const LONG_ZEROCODE_RUN = 63; + const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN; + const ULONG_SIZE = 8; + const FLOAT32_SIZE = 4; + const INT32_SIZE = 4; + const INT16_SIZE = 2; + const INT8_SIZE = 1; + const STATIC_HUFFMAN = 0; + const DEFLATE = 1; + const UNKNOWN = 0; + const LOSSY_DCT = 1; + const RLE = 2; + const logBase = Math.pow(2.7182818, 2.2); + function reverseLutFromBitmap(bitmap, lut) { + let k2 = 0; + for (let i = 0; i < USHORT_RANGE; ++i) { + if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) { + lut[k2++] = i; + } + } + const n2 = k2 - 1; + while (k2 < USHORT_RANGE) lut[k2++] = 0; + return n2; + } + function hufClearDecTable(hdec) { + for (let i = 0; i < HUF_DECSIZE; i++) { + hdec[i] = {}; + hdec[i].len = 0; + hdec[i].lit = 0; + hdec[i].p = null; + } + } + const getBitsReturn = { l: 0, c: 0, lc: 0 }; + function getBits(nBits, c2, lc2, uInt8Array2, inOffset) { + while (lc2 < nBits) { + c2 = c2 << 8 | parseUint8Array(uInt8Array2, inOffset); + lc2 += 8; + } + lc2 -= nBits; + getBitsReturn.l = c2 >> lc2 & (1 << nBits) - 1; + getBitsReturn.c = c2; + getBitsReturn.lc = lc2; + } + const hufTableBuffer = new Array(59); + function hufCanonicalCodeTable(hcode) { + for (let i = 0; i <= 58; ++i) hufTableBuffer[i] = 0; + for (let i = 0; i < HUF_ENCSIZE; ++i) hufTableBuffer[hcode[i]] += 1; + let c2 = 0; + for (let i = 58; i > 0; --i) { + const nc = c2 + hufTableBuffer[i] >> 1; + hufTableBuffer[i] = c2; + c2 = nc; + } + for (let i = 0; i < HUF_ENCSIZE; ++i) { + const l2 = hcode[i]; + if (l2 > 0) hcode[i] = l2 | hufTableBuffer[l2]++ << 6; + } + } + function hufUnpackEncTable(uInt8Array2, inOffset, ni, im, iM, hcode) { + const p2 = inOffset; + let c2 = 0; + let lc2 = 0; + for (; im <= iM; im++) { + if (p2.value - inOffset.value > ni) return false; + getBits(6, c2, lc2, uInt8Array2, p2); + const l2 = getBitsReturn.l; + c2 = getBitsReturn.c; + lc2 = getBitsReturn.lc; + hcode[im] = l2; + if (l2 == LONG_ZEROCODE_RUN) { + if (p2.value - inOffset.value > ni) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + getBits(8, c2, lc2, uInt8Array2, p2); + let zerun = getBitsReturn.l + SHORTEST_LONG_RUN; + c2 = getBitsReturn.c; + lc2 = getBitsReturn.lc; + if (im + zerun > iM + 1) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + while (zerun--) hcode[im++] = 0; + im--; + } else if (l2 >= SHORT_ZEROCODE_RUN) { + let zerun = l2 - SHORT_ZEROCODE_RUN + 2; + if (im + zerun > iM + 1) { + throw new Error("Something wrong with hufUnpackEncTable"); + } + while (zerun--) hcode[im++] = 0; + im--; + } + } + hufCanonicalCodeTable(hcode); + } + function hufLength(code) { + return code & 63; + } + function hufCode(code) { + return code >> 6; + } + function hufBuildDecTable(hcode, im, iM, hdecod) { + for (; im <= iM; im++) { + const c2 = hufCode(hcode[im]); + const l2 = hufLength(hcode[im]); + if (c2 >> l2) { + throw new Error("Invalid table entry"); + } + if (l2 > HUF_DECBITS) { + const pl = hdecod[c2 >> l2 - HUF_DECBITS]; + if (pl.len) { + throw new Error("Invalid table entry"); + } + pl.lit++; + if (pl.p) { + const p2 = pl.p; + pl.p = new Array(pl.lit); + for (let i = 0; i < pl.lit - 1; ++i) { + pl.p[i] = p2[i]; + } + } else { + pl.p = new Array(1); + } + pl.p[pl.lit - 1] = im; + } else if (l2) { + let plOffset = 0; + for (let i = 1 << HUF_DECBITS - l2; i > 0; i--) { + const pl = hdecod[(c2 << HUF_DECBITS - l2) + plOffset]; + if (pl.len || pl.p) { + throw new Error("Invalid table entry"); + } + pl.len = l2; + pl.lit = im; + plOffset++; + } + } + } + return true; + } + const getCharReturn = { c: 0, lc: 0 }; + function getChar(c2, lc2, uInt8Array2, inOffset) { + c2 = c2 << 8 | parseUint8Array(uInt8Array2, inOffset); + lc2 += 8; + getCharReturn.c = c2; + getCharReturn.lc = lc2; + } + const getCodeReturn = { c: 0, lc: 0 }; + function getCode(po, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) { + if (po == rlc) { + if (lc2 < 8) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + } + lc2 -= 8; + let cs = c2 >> lc2; + cs = new Uint8Array([cs])[0]; + if (outBufferOffset.value + cs > outBufferEndOffset) { + return false; + } + const s = outBuffer[outBufferOffset.value - 1]; + while (cs-- > 0) { + outBuffer[outBufferOffset.value++] = s; + } + } else if (outBufferOffset.value < outBufferEndOffset) { + outBuffer[outBufferOffset.value++] = po; + } else { + return false; + } + getCodeReturn.c = c2; + getCodeReturn.lc = lc2; + } + function UInt16(value2) { + return value2 & 65535; + } + function Int16(value2) { + const ref = UInt16(value2); + return ref > 32767 ? ref - 65536 : ref; + } + const wdec14Return = { a: 0, b: 0 }; + function wdec14(l2, h) { + const ls = Int16(l2); + const hs = Int16(h); + const hi = hs; + const ai = ls + (hi & 1) + (hi >> 1); + const as = ai; + const bs = ai - hi; + wdec14Return.a = as; + wdec14Return.b = bs; + } + function wdec16(l2, h) { + const m = UInt16(l2); + const d = UInt16(h); + const bb = m - (d >> 1) & MOD_MASK; + const aa = d + bb - A_OFFSET & MOD_MASK; + wdec14Return.a = aa; + wdec14Return.b = bb; + } + function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) { + const w14 = mx < 1 << 14; + const n2 = nx > ny ? ny : nx; + let p2 = 1; + let p22; + let py; + while (p2 <= n2) p2 <<= 1; + p2 >>= 1; + p22 = p2; + p2 >>= 1; + while (p2 >= 1) { + py = 0; + const ey = py + oy * (ny - p22); + const oy1 = oy * p2; + const oy2 = oy * p22; + const ox1 = ox * p2; + const ox2 = ox * p22; + let i00, i01, i10, i11; + for (; py <= ey; py += oy2) { + let px = py; + const ex = py + ox * (nx - p22); + for (; px <= ex; px += ox2) { + const p01 = px + ox1; + const p10 = px + oy1; + const p11 = p10 + ox1; + if (w14) { + wdec14(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec14(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec14(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec14(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } else { + wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec16(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec16(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec16(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } + } + if (nx & p2) { + const p10 = px + oy1; + if (w14) + wdec14(buffer2[px + j], buffer2[p10 + j]); + else + wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + buffer2[p10 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + if (ny & p2) { + let px = py; + const ex = py + ox * (nx - p22); + for (; px <= ex; px += ox2) { + const p01 = px + ox1; + if (w14) + wdec14(buffer2[px + j], buffer2[p01 + j]); + else + wdec16(buffer2[px + j], buffer2[p01 + j]); + i00 = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + p22 = p2; + p2 >>= 1; + } + return py; + } + function hufDecode(encodingTable, decodingTable, uInt8Array2, inOffset, ni, rlc, no, outBuffer, outOffset) { + let c2 = 0; + let lc2 = 0; + const outBufferEndOffset = no; + const inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8); + while (inOffset.value < inOffsetEnd) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + while (lc2 >= HUF_DECBITS) { + const index2 = c2 >> lc2 - HUF_DECBITS & HUF_DECMASK; + const pl = decodingTable[index2]; + if (pl.len) { + lc2 -= pl.len; + getCode(pl.lit, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + } else { + if (!pl.p) { + throw new Error("hufDecode issues"); + } + let j; + for (j = 0; j < pl.lit; j++) { + const l2 = hufLength(encodingTable[pl.p[j]]); + while (lc2 < l2 && inOffset.value < inOffsetEnd) { + getChar(c2, lc2, uInt8Array2, inOffset); + c2 = getCharReturn.c; + lc2 = getCharReturn.lc; + } + if (lc2 >= l2) { + if (hufCode(encodingTable[pl.p[j]]) == (c2 >> lc2 - l2 & (1 << l2) - 1)) { + lc2 -= l2; + getCode(pl.p[j], rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + break; + } + } + } + if (j == pl.lit) { + throw new Error("hufDecode issues"); + } + } + } + } + const i = 8 - ni & 7; + c2 >>= i; + lc2 -= i; + while (lc2 > 0) { + const pl = decodingTable[c2 << HUF_DECBITS - lc2 & HUF_DECMASK]; + if (pl.len) { + lc2 -= pl.len; + getCode(pl.lit, rlc, c2, lc2, uInt8Array2, inOffset, outBuffer, outOffset, outBufferEndOffset); + c2 = getCodeReturn.c; + lc2 = getCodeReturn.lc; + } else { + throw new Error("hufDecode issues"); + } + } + return true; + } + function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) { + const outOffset = { value: 0 }; + const initialInOffset = inOffset.value; + const im = parseUint32(inDataView, inOffset); + const iM = parseUint32(inDataView, inOffset); + inOffset.value += 4; + const nBits = parseUint32(inDataView, inOffset); + inOffset.value += 4; + if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) { + throw new Error("Something wrong with HUF_ENCSIZE"); + } + const freq = new Array(HUF_ENCSIZE); + const hdec = new Array(HUF_DECSIZE); + hufClearDecTable(hdec); + const ni = nCompressed - (inOffset.value - initialInOffset); + hufUnpackEncTable(uInt8Array2, inOffset, ni, im, iM, freq); + if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) { + throw new Error("Something wrong with hufUncompress"); + } + hufBuildDecTable(freq, im, iM, hdec); + hufDecode(freq, hdec, uInt8Array2, inOffset, nBits, iM, nRaw, outBuffer, outOffset); + } + function applyLut(lut, data2, nData) { + for (let i = 0; i < nData; ++i) { + data2[i] = lut[data2[i]]; + } + } + function predictor(source) { + for (let t3 = 1; t3 < source.length; t3++) { + const d = source[t3 - 1] + source[t3] - 128; + source[t3] = d; + } + } + function interleaveScalar(source, out) { + let t1 = 0; + let t22 = Math.floor((source.length + 1) / 2); + let s = 0; + const stop = source.length - 1; + while (true) { + if (s > stop) break; + out[s++] = source[t1++]; + if (s > stop) break; + out[s++] = source[t22++]; + } + } + function decodeRunLength(source) { + let size2 = source.byteLength; + const out = new Array(); + let p2 = 0; + const reader = new DataView(source); + while (size2 > 0) { + const l2 = reader.getInt8(p2++); + if (l2 < 0) { + const count = -l2; + size2 -= count + 1; + for (let i = 0; i < count; i++) { + out.push(reader.getUint8(p2++)); + } + } else { + const count = l2; + size2 -= 2; + const value2 = reader.getUint8(p2++); + for (let i = 0; i < count + 1; i++) { + out.push(value2); + } + } + } + return out; + } + function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) { + let dataView = new DataView(outBuffer.buffer); + const width2 = channelData[cscSet.idx[0]].width; + const height2 = channelData[cscSet.idx[0]].height; + const numComp = 3; + const numFullBlocksX = Math.floor(width2 / 8); + const numBlocksX = Math.ceil(width2 / 8); + const numBlocksY = Math.ceil(height2 / 8); + const leftoverX = width2 - (numBlocksX - 1) * 8; + const leftoverY = height2 - (numBlocksY - 1) * 8; + const currAcComp = { value: 0 }; + const currDcComp = new Array(numComp); + const dctData = new Array(numComp); + const halfZigBlock = new Array(numComp); + const rowBlock = new Array(numComp); + const rowOffsets = new Array(numComp); + for (let comp2 = 0; comp2 < numComp; ++comp2) { + rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]]; + currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY; + dctData[comp2] = new Float32Array(64); + halfZigBlock[comp2] = new Uint16Array(64); + rowBlock[comp2] = new Uint16Array(numBlocksX * 64); + } + for (let blocky = 0; blocky < numBlocksY; ++blocky) { + let maxY = 8; + if (blocky == numBlocksY - 1) + maxY = leftoverY; + let maxX = 8; + for (let blockx = 0; blockx < numBlocksX; ++blockx) { + if (blockx == numBlocksX - 1) + maxX = leftoverX; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + halfZigBlock[comp2].fill(0); + halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++]; + unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]); + unZigZag(halfZigBlock[comp2], dctData[comp2]); + dctInverse(dctData[comp2]); + } + if (numComp == 3) { + csc709Inverse(dctData); + } + for (let comp2 = 0; comp2 < numComp; ++comp2) { + convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64); + } + } + let offset2 = 0; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + const type = channelData[cscSet.idx[comp2]].type; + for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + offset2 = rowOffsets[comp2][y2]; + for (let blockx = 0; blockx < numFullBlocksX; ++blockx) { + const src = blockx * 64 + (y2 & 7) * 8; + dataView.setUint16(offset2 + 0 * INT16_SIZE * type, rowBlock[comp2][src + 0], true); + dataView.setUint16(offset2 + 1 * INT16_SIZE * type, rowBlock[comp2][src + 1], true); + dataView.setUint16(offset2 + 2 * INT16_SIZE * type, rowBlock[comp2][src + 2], true); + dataView.setUint16(offset2 + 3 * INT16_SIZE * type, rowBlock[comp2][src + 3], true); + dataView.setUint16(offset2 + 4 * INT16_SIZE * type, rowBlock[comp2][src + 4], true); + dataView.setUint16(offset2 + 5 * INT16_SIZE * type, rowBlock[comp2][src + 5], true); + dataView.setUint16(offset2 + 6 * INT16_SIZE * type, rowBlock[comp2][src + 6], true); + dataView.setUint16(offset2 + 7 * INT16_SIZE * type, rowBlock[comp2][src + 7], true); + offset2 += 8 * INT16_SIZE * type; + } + } + if (numFullBlocksX != numBlocksX) { + for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type; + const src = numFullBlocksX * 64 + (y2 & 7) * 8; + for (let x2 = 0; x2 < maxX; ++x2) { + dataView.setUint16(offset3 + x2 * INT16_SIZE * type, rowBlock[comp2][src + x2], true); + } + } + } + } + } + const halfRow = new Uint16Array(width2); + dataView = new DataView(outBuffer.buffer); + for (let comp2 = 0; comp2 < numComp; ++comp2) { + channelData[cscSet.idx[comp2]].decoded = true; + const type = channelData[cscSet.idx[comp2]].type; + if (channelData[comp2].type != 2) continue; + for (let y2 = 0; y2 < height2; ++y2) { + const offset2 = rowOffsets[comp2][y2]; + for (let x2 = 0; x2 < width2; ++x2) { + halfRow[x2] = dataView.getUint16(offset2 + x2 * INT16_SIZE * type, true); + } + for (let x2 = 0; x2 < width2; ++x2) { + dataView.setFloat32(offset2 + x2 * INT16_SIZE * type, decodeFloat162(halfRow[x2]), true); + } + } + } + } + function unRleAC(currAcComp, acBuffer, halfZigBlock) { + let acValue; + let dctComp = 1; + while (dctComp < 64) { + acValue = acBuffer[currAcComp.value]; + if (acValue == 65280) { + dctComp = 64; + } else if (acValue >> 8 == 255) { + dctComp += acValue & 255; + } else { + halfZigBlock[dctComp] = acValue; + dctComp++; + } + currAcComp.value++; + } + } + function unZigZag(src, dst) { + dst[0] = decodeFloat162(src[0]); + dst[1] = decodeFloat162(src[1]); + dst[2] = decodeFloat162(src[5]); + dst[3] = decodeFloat162(src[6]); + dst[4] = decodeFloat162(src[14]); + dst[5] = decodeFloat162(src[15]); + dst[6] = decodeFloat162(src[27]); + dst[7] = decodeFloat162(src[28]); + dst[8] = decodeFloat162(src[2]); + dst[9] = decodeFloat162(src[4]); + dst[10] = decodeFloat162(src[7]); + dst[11] = decodeFloat162(src[13]); + dst[12] = decodeFloat162(src[16]); + dst[13] = decodeFloat162(src[26]); + dst[14] = decodeFloat162(src[29]); + dst[15] = decodeFloat162(src[42]); + dst[16] = decodeFloat162(src[3]); + dst[17] = decodeFloat162(src[8]); + dst[18] = decodeFloat162(src[12]); + dst[19] = decodeFloat162(src[17]); + dst[20] = decodeFloat162(src[25]); + dst[21] = decodeFloat162(src[30]); + dst[22] = decodeFloat162(src[41]); + dst[23] = decodeFloat162(src[43]); + dst[24] = decodeFloat162(src[9]); + dst[25] = decodeFloat162(src[11]); + dst[26] = decodeFloat162(src[18]); + dst[27] = decodeFloat162(src[24]); + dst[28] = decodeFloat162(src[31]); + dst[29] = decodeFloat162(src[40]); + dst[30] = decodeFloat162(src[44]); + dst[31] = decodeFloat162(src[53]); + dst[32] = decodeFloat162(src[10]); + dst[33] = decodeFloat162(src[19]); + dst[34] = decodeFloat162(src[23]); + dst[35] = decodeFloat162(src[32]); + dst[36] = decodeFloat162(src[39]); + dst[37] = decodeFloat162(src[45]); + dst[38] = decodeFloat162(src[52]); + dst[39] = decodeFloat162(src[54]); + dst[40] = decodeFloat162(src[20]); + dst[41] = decodeFloat162(src[22]); + dst[42] = decodeFloat162(src[33]); + dst[43] = decodeFloat162(src[38]); + dst[44] = decodeFloat162(src[46]); + dst[45] = decodeFloat162(src[51]); + dst[46] = decodeFloat162(src[55]); + dst[47] = decodeFloat162(src[60]); + dst[48] = decodeFloat162(src[21]); + dst[49] = decodeFloat162(src[34]); + dst[50] = decodeFloat162(src[37]); + dst[51] = decodeFloat162(src[47]); + dst[52] = decodeFloat162(src[50]); + dst[53] = decodeFloat162(src[56]); + dst[54] = decodeFloat162(src[59]); + dst[55] = decodeFloat162(src[61]); + dst[56] = decodeFloat162(src[35]); + dst[57] = decodeFloat162(src[36]); + dst[58] = decodeFloat162(src[48]); + dst[59] = decodeFloat162(src[49]); + dst[60] = decodeFloat162(src[57]); + dst[61] = decodeFloat162(src[58]); + dst[62] = decodeFloat162(src[62]); + dst[63] = decodeFloat162(src[63]); + } + function dctInverse(data2) { + const a2 = 0.5 * Math.cos(3.14159 / 4); + const b3 = 0.5 * Math.cos(3.14159 / 16); + const c2 = 0.5 * Math.cos(3.14159 / 8); + const d = 0.5 * Math.cos(3 * 3.14159 / 16); + const e = 0.5 * Math.cos(5 * 3.14159 / 16); + const f = 0.5 * Math.cos(3 * 3.14159 / 8); + const g2 = 0.5 * Math.cos(7 * 3.14159 / 16); + const alpha = new Array(4); + const beta = new Array(4); + const theta = new Array(4); + const gamma = new Array(4); + for (let row = 0; row < 8; ++row) { + const rowPtr = row * 8; + alpha[0] = c2 * data2[rowPtr + 2]; + alpha[1] = f * data2[rowPtr + 2]; + alpha[2] = c2 * data2[rowPtr + 6]; + alpha[3] = f * data2[rowPtr + 6]; + beta[0] = b3 * data2[rowPtr + 1] + d * data2[rowPtr + 3] + e * data2[rowPtr + 5] + g2 * data2[rowPtr + 7]; + beta[1] = d * data2[rowPtr + 1] - g2 * data2[rowPtr + 3] - b3 * data2[rowPtr + 5] - e * data2[rowPtr + 7]; + beta[2] = e * data2[rowPtr + 1] - b3 * data2[rowPtr + 3] + g2 * data2[rowPtr + 5] + d * data2[rowPtr + 7]; + beta[3] = g2 * data2[rowPtr + 1] - e * data2[rowPtr + 3] + d * data2[rowPtr + 5] - b3 * data2[rowPtr + 7]; + theta[0] = a2 * (data2[rowPtr + 0] + data2[rowPtr + 4]); + theta[3] = a2 * (data2[rowPtr + 0] - data2[rowPtr + 4]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data2[rowPtr + 0] = gamma[0] + beta[0]; + data2[rowPtr + 1] = gamma[1] + beta[1]; + data2[rowPtr + 2] = gamma[2] + beta[2]; + data2[rowPtr + 3] = gamma[3] + beta[3]; + data2[rowPtr + 4] = gamma[3] - beta[3]; + data2[rowPtr + 5] = gamma[2] - beta[2]; + data2[rowPtr + 6] = gamma[1] - beta[1]; + data2[rowPtr + 7] = gamma[0] - beta[0]; + } + for (let column = 0; column < 8; ++column) { + alpha[0] = c2 * data2[16 + column]; + alpha[1] = f * data2[16 + column]; + alpha[2] = c2 * data2[48 + column]; + alpha[3] = f * data2[48 + column]; + beta[0] = b3 * data2[8 + column] + d * data2[24 + column] + e * data2[40 + column] + g2 * data2[56 + column]; + beta[1] = d * data2[8 + column] - g2 * data2[24 + column] - b3 * data2[40 + column] - e * data2[56 + column]; + beta[2] = e * data2[8 + column] - b3 * data2[24 + column] + g2 * data2[40 + column] + d * data2[56 + column]; + beta[3] = g2 * data2[8 + column] - e * data2[24 + column] + d * data2[40 + column] - b3 * data2[56 + column]; + theta[0] = a2 * (data2[column] + data2[32 + column]); + theta[3] = a2 * (data2[column] - data2[32 + column]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data2[0 + column] = gamma[0] + beta[0]; + data2[8 + column] = gamma[1] + beta[1]; + data2[16 + column] = gamma[2] + beta[2]; + data2[24 + column] = gamma[3] + beta[3]; + data2[32 + column] = gamma[3] - beta[3]; + data2[40 + column] = gamma[2] - beta[2]; + data2[48 + column] = gamma[1] - beta[1]; + data2[56 + column] = gamma[0] - beta[0]; + } + } + function csc709Inverse(data2) { + for (let i = 0; i < 64; ++i) { + const y2 = data2[0][i]; + const cb = data2[1][i]; + const cr = data2[2][i]; + data2[0][i] = y2 + 1.5747 * cr; + data2[1][i] = y2 - 0.1873 * cb - 0.4682 * cr; + data2[2][i] = y2 + 1.8556 * cb; + } + } + function convertToHalf(src, dst, idx) { + for (let i = 0; i < 64; ++i) { + dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i])); + } + } + function toLinear(float) { + if (float <= 1) { + return Math.sign(float) * Math.pow(Math.abs(float), 2.2); + } else { + return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1); + } + } + function uncompressRAW(info) { + return new DataView(info.array.buffer, info.offset.value, info.size); + } + function uncompressRLE(info) { + const compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = new Uint8Array(decodeRunLength(compressed)); + const tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressZIP(info) { + const compressed = info.array.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = unzlibSync(compressed); + const tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressPIZ(info) { + const inDataView = info.viewer; + const inOffset = { value: info.offset.value }; + const outBuffer = new Uint16Array(info.columns * info.lines * (info.inputChannels.length * info.type)); + const bitmap = new Uint8Array(BITMAP_SIZE); + let outBufferEnd = 0; + const pizChannelData = new Array(info.inputChannels.length); + for (let i = 0, il = info.inputChannels.length; i < il; i++) { + pizChannelData[i] = {}; + pizChannelData[i]["start"] = outBufferEnd; + pizChannelData[i]["end"] = pizChannelData[i]["start"]; + pizChannelData[i]["nx"] = info.columns; + pizChannelData[i]["ny"] = info.lines; + pizChannelData[i]["size"] = info.type; + outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size; + } + const minNonZero = parseUint16(inDataView, inOffset); + const maxNonZero = parseUint16(inDataView, inOffset); + if (maxNonZero >= BITMAP_SIZE) { + throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE"); + } + if (minNonZero <= maxNonZero) { + for (let i = 0; i < maxNonZero - minNonZero + 1; i++) { + bitmap[i + minNonZero] = parseUint8(inDataView, inOffset); + } + } + const lut = new Uint16Array(USHORT_RANGE); + const maxValue = reverseLutFromBitmap(bitmap, lut); + const length2 = parseUint32(inDataView, inOffset); + hufUncompress(info.array, inDataView, inOffset, length2, outBuffer, outBufferEnd); + for (let i = 0; i < info.inputChannels.length; ++i) { + const cd = pizChannelData[i]; + for (let j = 0; j < pizChannelData[i].size; ++j) { + wav2Decode( + outBuffer, + cd.start + j, + cd.nx, + cd.size, + cd.ny, + cd.nx * cd.size, + maxValue + ); + } + } + applyLut(lut, outBuffer, outBufferEnd); + let tmpOffset = 0; + const tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength); + for (let y2 = 0; y2 < info.lines; y2++) { + for (let c2 = 0; c2 < info.inputChannels.length; c2++) { + const cd = pizChannelData[c2]; + const n2 = cd.nx * cd.size; + const cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n2 * INT16_SIZE); + tmpBuffer.set(cp, tmpOffset); + tmpOffset += n2 * INT16_SIZE; + cd.end += n2; + } + } + return new DataView(tmpBuffer.buffer); + } + function uncompressPXR(info) { + const compressed = info.array.slice(info.offset.value, info.offset.value + info.size); + const rawBuffer = unzlibSync(compressed); + const byteSize = info.inputChannels.length * info.lines * info.columns * info.totalBytes; + const tmpBuffer = new ArrayBuffer(byteSize); + const viewer = new DataView(tmpBuffer); + let tmpBufferEnd = 0; + let writePtr = 0; + const ptr = new Array(4); + for (let y2 = 0; y2 < info.lines; y2++) { + for (let c2 = 0; c2 < info.inputChannels.length; c2++) { + let pixel = 0; + const type = info.inputChannels[c2].pixelType; + switch (type) { + case 1: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.columns; + tmpBufferEnd = ptr[1] + info.columns; + for (let j = 0; j < info.columns; ++j) { + const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++]; + pixel += diff; + viewer.setUint16(writePtr, pixel, true); + writePtr += 2; + } + break; + case 2: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.columns; + ptr[2] = ptr[1] + info.columns; + tmpBufferEnd = ptr[2] + info.columns; + for (let j = 0; j < info.columns; ++j) { + const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8; + pixel += diff; + viewer.setUint32(writePtr, pixel, true); + writePtr += 4; + } + break; + } + } + } + return viewer; + } + function uncompressDWA(info) { + const inDataView = info.viewer; + const inOffset = { value: info.offset.value }; + const outBuffer = new Uint8Array(info.columns * info.lines * (info.inputChannels.length * info.type * INT16_SIZE)); + const dwaHeader = { + version: parseInt64(inDataView, inOffset), + unknownUncompressedSize: parseInt64(inDataView, inOffset), + unknownCompressedSize: parseInt64(inDataView, inOffset), + acCompressedSize: parseInt64(inDataView, inOffset), + dcCompressedSize: parseInt64(inDataView, inOffset), + rleCompressedSize: parseInt64(inDataView, inOffset), + rleUncompressedSize: parseInt64(inDataView, inOffset), + rleRawSize: parseInt64(inDataView, inOffset), + totalAcUncompressedCount: parseInt64(inDataView, inOffset), + totalDcUncompressedCount: parseInt64(inDataView, inOffset), + acCompression: parseInt64(inDataView, inOffset) + }; + if (dwaHeader.version < 2) + throw new Error("EXRLoader.parse: " + EXRHeader.compression + " version " + dwaHeader.version + " is unsupported"); + const channelRules = new Array(); + let ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE; + while (ruleSize > 0) { + const name2 = parseNullTerminatedString(inDataView.buffer, inOffset); + const value2 = parseUint8(inDataView, inOffset); + const compression = value2 >> 2 & 3; + const csc = (value2 >> 4) - 1; + const index2 = new Int8Array([csc])[0]; + const type = parseUint8(inDataView, inOffset); + channelRules.push({ + name: name2, + index: index2, + type, + compression + }); + ruleSize -= name2.length + 3; + } + const channels = EXRHeader.channels; + const channelData = new Array(info.inputChannels.length); + for (let i = 0; i < info.inputChannels.length; ++i) { + const cd = channelData[i] = {}; + const channel = channels[i]; + cd.name = channel.name; + cd.compression = UNKNOWN; + cd.decoded = false; + cd.type = channel.pixelType; + cd.pLinear = channel.pLinear; + cd.width = info.columns; + cd.height = info.lines; + } + const cscSet = { + idx: new Array(3) + }; + for (let offset2 = 0; offset2 < info.inputChannels.length; ++offset2) { + const cd = channelData[offset2]; + for (let i = 0; i < channelRules.length; ++i) { + const rule = channelRules[i]; + if (cd.name == rule.name) { + cd.compression = rule.compression; + if (rule.index >= 0) { + cscSet.idx[rule.index] = offset2; + } + cd.offset = offset2; + } + } + } + let acBuffer, dcBuffer, rleBuffer; + if (dwaHeader.acCompressedSize > 0) { + switch (dwaHeader.acCompression) { + case STATIC_HUFFMAN: + acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount); + hufUncompress(info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount); + break; + case DEFLATE: + const compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount); + const data2 = unzlibSync(compressed); + acBuffer = new Uint16Array(data2.buffer); + inOffset.value += dwaHeader.totalAcUncompressedCount; + break; + } + } + if (dwaHeader.dcCompressedSize > 0) { + const zlibInfo = { + array: info.array, + offset: inOffset, + size: dwaHeader.dcCompressedSize + }; + dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer); + inOffset.value += dwaHeader.dcCompressedSize; + } + if (dwaHeader.rleRawSize > 0) { + const compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize); + const data2 = unzlibSync(compressed); + rleBuffer = decodeRunLength(data2.buffer); + inOffset.value += dwaHeader.rleCompressedSize; + } + let outBufferEnd = 0; + const rowOffsets = new Array(channelData.length); + for (let i = 0; i < rowOffsets.length; ++i) { + rowOffsets[i] = new Array(); + } + for (let y2 = 0; y2 < info.lines; ++y2) { + for (let chan = 0; chan < channelData.length; ++chan) { + rowOffsets[chan].push(outBufferEnd); + outBufferEnd += channelData[chan].width * info.type * INT16_SIZE; + } + } + lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer); + for (let i = 0; i < channelData.length; ++i) { + const cd = channelData[i]; + if (cd.decoded) continue; + switch (cd.compression) { + case RLE: + let row = 0; + let rleOffset = 0; + for (let y2 = 0; y2 < info.lines; ++y2) { + let rowOffsetBytes = rowOffsets[i][row]; + for (let x2 = 0; x2 < cd.width; ++x2) { + for (let byte = 0; byte < INT16_SIZE * cd.type; ++byte) { + outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height]; + } + rleOffset++; + } + row++; + } + break; + case LOSSY_DCT: + default: + throw new Error("EXRLoader.parse: unsupported channel compression"); + } + } + return new DataView(outBuffer.buffer); + } + function parseNullTerminatedString(buffer2, offset2) { + const uintBuffer = new Uint8Array(buffer2); + let endOffset = 0; + while (uintBuffer[offset2.value + endOffset] != 0) { + endOffset += 1; + } + const stringValue = new TextDecoder().decode( + uintBuffer.slice(offset2.value, offset2.value + endOffset) + ); + offset2.value = offset2.value + endOffset + 1; + return stringValue; + } + function parseFixedLengthString(buffer2, offset2, size2) { + const stringValue = new TextDecoder().decode( + new Uint8Array(buffer2).slice(offset2.value, offset2.value + size2) + ); + offset2.value = offset2.value + size2; + return stringValue; + } + function parseRational(dataView, offset2) { + const x2 = parseInt32(dataView, offset2); + const y2 = parseUint32(dataView, offset2); + return [x2, y2]; + } + function parseTimecode(dataView, offset2) { + const x2 = parseUint32(dataView, offset2); + const y2 = parseUint32(dataView, offset2); + return [x2, y2]; + } + function parseInt32(dataView, offset2) { + const Int32 = dataView.getInt32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Int32; + } + function parseUint32(dataView, offset2) { + const Uint32 = dataView.getUint32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Uint32; + } + function parseUint8Array(uInt8Array2, offset2) { + const Uint8 = uInt8Array2[offset2.value]; + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + function parseUint8(dataView, offset2) { + const Uint8 = dataView.getUint8(offset2.value); + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + const parseInt64 = function(dataView, offset2) { + let int; + if ("getBigInt64" in DataView.prototype) { + int = Number(dataView.getBigInt64(offset2.value, true)); + } else { + int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32); + } + offset2.value += ULONG_SIZE; + return int; + }; + function parseFloat32(dataView, offset2) { + const float = dataView.getFloat32(offset2.value, true); + offset2.value += FLOAT32_SIZE; + return float; + } + function decodeFloat32(dataView, offset2) { + return DataUtils.toHalfFloat(parseFloat32(dataView, offset2)); + } + function decodeFloat162(binary) { + const exponent = (binary & 31744) >> 10, fraction = binary & 1023; + return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); + } + function parseUint16(dataView, offset2) { + const Uint16 = dataView.getUint16(offset2.value, true); + offset2.value += INT16_SIZE; + return Uint16; + } + function parseFloat16(buffer2, offset2) { + return decodeFloat162(parseUint16(buffer2, offset2)); + } + function parseChlist(dataView, buffer2, offset2, size2) { + const startOffset = offset2.value; + const channels = []; + while (offset2.value < startOffset + size2 - 1) { + const name2 = parseNullTerminatedString(buffer2, offset2); + const pixelType = parseInt32(dataView, offset2); + const pLinear = parseUint8(dataView, offset2); + offset2.value += 3; + const xSampling = parseInt32(dataView, offset2); + const ySampling = parseInt32(dataView, offset2); + channels.push({ + name: name2, + pixelType, + pLinear, + xSampling, + ySampling + }); + } + offset2.value += 1; + return channels; + } + function parseChromaticities(dataView, offset2) { + const redX = parseFloat32(dataView, offset2); + const redY = parseFloat32(dataView, offset2); + const greenX = parseFloat32(dataView, offset2); + const greenY = parseFloat32(dataView, offset2); + const blueX = parseFloat32(dataView, offset2); + const blueY = parseFloat32(dataView, offset2); + const whiteX = parseFloat32(dataView, offset2); + const whiteY = parseFloat32(dataView, offset2); + return { redX, redY, greenX, greenY, blueX, blueY, whiteX, whiteY }; + } + function parseCompression(dataView, offset2) { + const compressionCodes = [ + "NO_COMPRESSION", + "RLE_COMPRESSION", + "ZIPS_COMPRESSION", + "ZIP_COMPRESSION", + "PIZ_COMPRESSION", + "PXR24_COMPRESSION", + "B44_COMPRESSION", + "B44A_COMPRESSION", + "DWAA_COMPRESSION", + "DWAB_COMPRESSION" + ]; + const compression = parseUint8(dataView, offset2); + return compressionCodes[compression]; + } + function parseBox2i(dataView, offset2) { + const xMin = parseInt32(dataView, offset2); + const yMin = parseInt32(dataView, offset2); + const xMax = parseInt32(dataView, offset2); + const yMax = parseInt32(dataView, offset2); + return { xMin, yMin, xMax, yMax }; + } + function parseLineOrder(dataView, offset2) { + const lineOrders = [ + "INCREASING_Y", + "DECREASING_Y", + "RANDOM_Y" + ]; + const lineOrder = parseUint8(dataView, offset2); + return lineOrders[lineOrder]; + } + function parseEnvmap(dataView, offset2) { + const envmaps = [ + "ENVMAP_LATLONG", + "ENVMAP_CUBE" + ]; + const envmap = parseUint8(dataView, offset2); + return envmaps[envmap]; + } + function parseTiledesc(dataView, offset2) { + const levelModes = [ + "ONE_LEVEL", + "MIPMAP_LEVELS", + "RIPMAP_LEVELS" + ]; + const roundingModes = [ + "ROUND_DOWN", + "ROUND_UP" + ]; + const xSize = parseUint32(dataView, offset2); + const ySize = parseUint32(dataView, offset2); + const modes = parseUint8(dataView, offset2); + return { + xSize, + ySize, + levelMode: levelModes[modes & 15], + roundingMode: roundingModes[modes >> 4] + }; + } + function parseV2f(dataView, offset2) { + const x2 = parseFloat32(dataView, offset2); + const y2 = parseFloat32(dataView, offset2); + return [x2, y2]; + } + function parseV3f(dataView, offset2) { + const x2 = parseFloat32(dataView, offset2); + const y2 = parseFloat32(dataView, offset2); + const z = parseFloat32(dataView, offset2); + return [x2, y2, z]; + } + function parseValue(dataView, buffer2, offset2, type, size2) { + if (type === "string" || type === "stringvector" || type === "iccProfile") { + return parseFixedLengthString(buffer2, offset2, size2); + } else if (type === "chlist") { + return parseChlist(dataView, buffer2, offset2, size2); + } else if (type === "chromaticities") { + return parseChromaticities(dataView, offset2); + } else if (type === "compression") { + return parseCompression(dataView, offset2); + } else if (type === "box2i") { + return parseBox2i(dataView, offset2); + } else if (type === "envmap") { + return parseEnvmap(dataView, offset2); + } else if (type === "tiledesc") { + return parseTiledesc(dataView, offset2); + } else if (type === "lineOrder") { + return parseLineOrder(dataView, offset2); + } else if (type === "float") { + return parseFloat32(dataView, offset2); + } else if (type === "v2f") { + return parseV2f(dataView, offset2); + } else if (type === "v3f") { + return parseV3f(dataView, offset2); + } else if (type === "int") { + return parseInt32(dataView, offset2); + } else if (type === "rational") { + return parseRational(dataView, offset2); + } else if (type === "timecode") { + return parseTimecode(dataView, offset2); + } else if (type === "preview") { + offset2.value += size2; + return "skipped"; + } else { + offset2.value += size2; + return void 0; + } + } + function roundLog2(x2, mode) { + const log22 = Math.log2(x2); + return mode == "ROUND_DOWN" ? Math.floor(log22) : Math.ceil(log22); + } + function calculateTileLevels(tiledesc, w, h) { + let num = 0; + switch (tiledesc.levelMode) { + case "ONE_LEVEL": + num = 1; + break; + case "MIPMAP_LEVELS": + num = roundLog2(Math.max(w, h), tiledesc.roundingMode) + 1; + break; + case "RIPMAP_LEVELS": + throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported."); + } + return num; + } + function calculateTiles(count, dataSize, size2, roundingMode) { + const tiles = new Array(count); + for (let i = 0; i < count; i++) { + const b3 = 1 << i; + let s = dataSize / b3 | 0; + if (roundingMode == "ROUND_UP" && s * b3 < dataSize) s += 1; + const l2 = Math.max(s, 1); + tiles[i] = (l2 + size2 - 1) / size2 | 0; + } + return tiles; + } + function parseTiles() { + const EXRDecoder2 = this; + const offset2 = EXRDecoder2.offset; + const tmpOffset = { value: 0 }; + for (let tile = 0; tile < EXRDecoder2.tileCount; tile++) { + const tileX = parseInt32(EXRDecoder2.viewer, offset2); + const tileY = parseInt32(EXRDecoder2.viewer, offset2); + offset2.value += 8; + EXRDecoder2.size = parseUint32(EXRDecoder2.viewer, offset2); + const startX = tileX * EXRDecoder2.blockWidth; + const startY = tileY * EXRDecoder2.blockHeight; + EXRDecoder2.columns = startX + EXRDecoder2.blockWidth > EXRDecoder2.width ? EXRDecoder2.width - startX : EXRDecoder2.blockWidth; + EXRDecoder2.lines = startY + EXRDecoder2.blockHeight > EXRDecoder2.height ? EXRDecoder2.height - startY : EXRDecoder2.blockHeight; + const bytesBlockLine = EXRDecoder2.columns * EXRDecoder2.totalBytes; + const isCompressed = EXRDecoder2.size < EXRDecoder2.lines * bytesBlockLine; + const viewer = isCompressed ? EXRDecoder2.uncompress(EXRDecoder2) : uncompressRAW(EXRDecoder2); + offset2.value += EXRDecoder2.size; + for (let line2 = 0; line2 < EXRDecoder2.lines; line2++) { + const lineOffset = line2 * EXRDecoder2.columns * EXRDecoder2.totalBytes; + for (let channelID = 0; channelID < EXRDecoder2.inputChannels.length; channelID++) { + const name2 = EXRHeader.channels[channelID].name; + const lOff = EXRDecoder2.channelByteOffsets[name2] * EXRDecoder2.columns; + const cOff = EXRDecoder2.decodeChannels[name2]; + if (cOff === void 0) continue; + tmpOffset.value = lineOffset + lOff; + const outLineOffset = (EXRDecoder2.height - (1 + startY + line2)) * EXRDecoder2.outLineWidth; + for (let x2 = 0; x2 < EXRDecoder2.columns; x2++) { + const outIndex = outLineOffset + (x2 + startX) * EXRDecoder2.outputChannels + cOff; + EXRDecoder2.byteArray[outIndex] = EXRDecoder2.getter(viewer, tmpOffset); + } + } + } + } + } + function parseScanline() { + const EXRDecoder2 = this; + const offset2 = EXRDecoder2.offset; + const tmpOffset = { value: 0 }; + for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder2.height / EXRDecoder2.blockHeight; scanlineBlockIdx++) { + const line2 = parseInt32(EXRDecoder2.viewer, offset2) - EXRHeader.dataWindow.yMin; + EXRDecoder2.size = parseUint32(EXRDecoder2.viewer, offset2); + EXRDecoder2.lines = line2 + EXRDecoder2.blockHeight > EXRDecoder2.height ? EXRDecoder2.height - line2 : EXRDecoder2.blockHeight; + const bytesPerLine = EXRDecoder2.columns * EXRDecoder2.totalBytes; + const isCompressed = EXRDecoder2.size < EXRDecoder2.lines * bytesPerLine; + const viewer = isCompressed ? EXRDecoder2.uncompress(EXRDecoder2) : uncompressRAW(EXRDecoder2); + offset2.value += EXRDecoder2.size; + for (let line_y = 0; line_y < EXRDecoder2.blockHeight; line_y++) { + const scan_y = scanlineBlockIdx * EXRDecoder2.blockHeight; + const true_y = line_y + EXRDecoder2.scanOrder(scan_y); + if (true_y >= EXRDecoder2.height) continue; + const lineOffset = line_y * bytesPerLine; + const outLineOffset = (EXRDecoder2.height - 1 - true_y) * EXRDecoder2.outLineWidth; + for (let channelID = 0; channelID < EXRDecoder2.inputChannels.length; channelID++) { + const name2 = EXRHeader.channels[channelID].name; + const lOff = EXRDecoder2.channelByteOffsets[name2] * EXRDecoder2.columns; + const cOff = EXRDecoder2.decodeChannels[name2]; + if (cOff === void 0) continue; + tmpOffset.value = lineOffset + lOff; + for (let x2 = 0; x2 < EXRDecoder2.columns; x2++) { + const outIndex = outLineOffset + x2 * EXRDecoder2.outputChannels + cOff; + EXRDecoder2.byteArray[outIndex] = EXRDecoder2.getter(viewer, tmpOffset); + } + } + } + } + } + function parseHeader(dataView, buffer2, offset2) { + const EXRHeader2 = {}; + if (dataView.getUint32(0, true) != 20000630) { + throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format."); + } + EXRHeader2.version = dataView.getUint8(4); + const spec = dataView.getUint8(5); + EXRHeader2.spec = { + singleTile: !!(spec & 2), + longName: !!(spec & 4), + deepFormat: !!(spec & 8), + multiPart: !!(spec & 16) + }; + offset2.value = 8; + let keepReading = true; + while (keepReading) { + const attributeName = parseNullTerminatedString(buffer2, offset2); + if (attributeName == 0) { + keepReading = false; + } else { + const attributeType = parseNullTerminatedString(buffer2, offset2); + const attributeSize = parseUint32(dataView, offset2); + const attributeValue = parseValue(dataView, buffer2, offset2, attributeType, attributeSize); + if (attributeValue === void 0) { + console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${attributeType}'.`); + } else { + EXRHeader2[attributeName] = attributeValue; + } + } + } + if ((spec & ~6) != 0) { + console.error("THREE.EXRHeader:", EXRHeader2); + throw new Error("THREE.EXRLoader: Provided file is currently unsupported."); + } + return EXRHeader2; + } + function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) { + const EXRDecoder2 = { + size: 0, + viewer: dataView, + array: uInt8Array2, + offset: offset2, + width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1, + height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1, + inputChannels: EXRHeader2.channels, + channelByteOffsets: {}, + scanOrder: null, + totalBytes: null, + columns: null, + lines: null, + type: null, + uncompress: null, + getter: null, + format: null, + colorSpace: LinearSRGBColorSpace + }; + switch (EXRHeader2.compression) { + case "NO_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressRAW; + break; + case "RLE_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressRLE; + break; + case "ZIPS_COMPRESSION": + EXRDecoder2.blockHeight = 1; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "ZIP_COMPRESSION": + EXRDecoder2.blockHeight = 16; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "PIZ_COMPRESSION": + EXRDecoder2.blockHeight = 32; + EXRDecoder2.uncompress = uncompressPIZ; + break; + case "PXR24_COMPRESSION": + EXRDecoder2.blockHeight = 16; + EXRDecoder2.uncompress = uncompressPXR; + break; + case "DWAA_COMPRESSION": + EXRDecoder2.blockHeight = 32; + EXRDecoder2.uncompress = uncompressDWA; + break; + case "DWAB_COMPRESSION": + EXRDecoder2.blockHeight = 256; + EXRDecoder2.uncompress = uncompressDWA; + break; + default: + throw new Error("EXRLoader.parse: " + EXRHeader2.compression + " is unsupported"); + } + const channels = {}; + for (const channel of EXRHeader2.channels) { + switch (channel.name) { + case "Y": + case "R": + case "G": + case "B": + case "A": + channels[channel.name] = true; + EXRDecoder2.type = channel.pixelType; + } + } + let fillAlpha = false; + if (channels.R && channels.G && channels.B) { + fillAlpha = !channels.A; + EXRDecoder2.outputChannels = 4; + EXRDecoder2.decodeChannels = { R: 0, G: 1, B: 2, A: 3 }; + } else if (channels.Y) { + EXRDecoder2.outputChannels = 1; + EXRDecoder2.decodeChannels = { Y: 0 }; + } else { + throw new Error("EXRLoader.parse: file contains unsupported data channels."); + } + if (EXRDecoder2.type == 1) { + switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat16; + break; + case HalfFloatType: + EXRDecoder2.getter = parseUint16; + break; + } + } else if (EXRDecoder2.type == 2) { + switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat32; + break; + case HalfFloatType: + EXRDecoder2.getter = decodeFloat32; + } + } else { + throw new Error("EXRLoader.parse: unsupported pixelType " + EXRDecoder2.type + " for " + EXRHeader2.compression + "."); + } + EXRDecoder2.columns = EXRDecoder2.width; + const size2 = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels; + switch (outputType) { + case FloatType: + EXRDecoder2.byteArray = new Float32Array(size2); + if (fillAlpha) + EXRDecoder2.byteArray.fill(1, 0, size2); + break; + case HalfFloatType: + EXRDecoder2.byteArray = new Uint16Array(size2); + if (fillAlpha) + EXRDecoder2.byteArray.fill(15360, 0, size2); + break; + default: + console.error("THREE.EXRLoader: unsupported type: ", outputType); + break; + } + let byteOffset = 0; + for (const channel of EXRHeader2.channels) { + if (EXRDecoder2.decodeChannels[channel.name] !== void 0) { + EXRDecoder2.channelByteOffsets[channel.name] = byteOffset; + } + byteOffset += channel.pixelType * 2; + } + EXRDecoder2.totalBytes = byteOffset; + EXRDecoder2.outLineWidth = EXRDecoder2.width * EXRDecoder2.outputChannels; + if (EXRHeader2.lineOrder === "INCREASING_Y") { + EXRDecoder2.scanOrder = (y2) => y2; + } else { + EXRDecoder2.scanOrder = (y2) => EXRDecoder2.height - 1 - y2; + } + if (EXRDecoder2.outputChannels == 4) { + EXRDecoder2.format = RGBAFormat; + EXRDecoder2.colorSpace = LinearSRGBColorSpace; + } else { + EXRDecoder2.format = RedFormat; + EXRDecoder2.colorSpace = NoColorSpace; + } + if (EXRHeader2.spec.singleTile) { + EXRDecoder2.blockHeight = EXRHeader2.tiles.ySize; + EXRDecoder2.blockWidth = EXRHeader2.tiles.xSize; + const numXLevels = calculateTileLevels(EXRHeader2.tiles, EXRDecoder2.width, EXRDecoder2.height); + const numXTiles = calculateTiles(numXLevels, EXRDecoder2.width, EXRHeader2.tiles.xSize, EXRHeader2.tiles.roundingMode); + const numYTiles = calculateTiles(numXLevels, EXRDecoder2.height, EXRHeader2.tiles.ySize, EXRHeader2.tiles.roundingMode); + EXRDecoder2.tileCount = numXTiles[0] * numYTiles[0]; + for (let l2 = 0; l2 < numXLevels; l2++) + for (let y2 = 0; y2 < numYTiles[l2]; y2++) + for (let x2 = 0; x2 < numXTiles[l2]; x2++) + parseInt64(dataView, offset2); + EXRDecoder2.decode = parseTiles.bind(EXRDecoder2); + } else { + EXRDecoder2.blockWidth = EXRDecoder2.width; + const blockCount = Math.ceil(EXRDecoder2.height / EXRDecoder2.blockHeight); + for (let i = 0; i < blockCount; i++) + parseInt64(dataView, offset2); + EXRDecoder2.decode = parseScanline.bind(EXRDecoder2); + } + return EXRDecoder2; + } + const offset = { value: 0 }; + const bufferDataView = new DataView(buffer); + const uInt8Array = new Uint8Array(buffer); + const EXRHeader = parseHeader(bufferDataView, buffer, offset); + const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type); + EXRDecoder.decode(); + return { + header: EXRHeader, + width: EXRDecoder.width, + height: EXRDecoder.height, + data: EXRDecoder.byteArray, + format: EXRDecoder.format, + colorSpace: EXRDecoder.colorSpace, + type: this.type + }; + } + setDataType(value2) { + this.type = value2; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + texture.colorSpace = texData.colorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = false; + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; + +// node_modules/three/examples/jsm/loaders/3DMLoader.js +var _taskCache = /* @__PURE__ */ new WeakMap(); +var Rhino3dmLoader = class extends Loader { + constructor(manager) { + super(manager); + this.libraryPath = ""; + this.libraryPending = null; + this.libraryBinary = null; + this.libraryConfig = {}; + this.url = ""; + this.workerLimit = 4; + this.workerPool = []; + this.workerNextTaskID = 1; + this.workerSourceURL = ""; + this.workerConfig = {}; + this.materials = []; + this.warnings = []; + } + setLibraryPath(path) { + this.libraryPath = path; + return this; + } + setWorkerLimit(workerLimit) { + this.workerLimit = workerLimit; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + this.url = url; + loader.load(url, (buffer) => { + if (_taskCache.has(buffer)) { + const cachedTask = _taskCache.get(buffer); + return cachedTask.promise.then(onLoad).catch(onError); + } + this.decodeObjects(buffer, url).then((result) => { + result.userData.warnings = this.warnings; + onLoad(result); + }).catch((e) => onError(e)); + }, onProgress, onError); + } + debug() { + console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); + } + decodeObjects(buffer, url) { + let worker; + let taskID; + const taskCost = buffer.byteLength; + const objectPending = this._getWorker(taskCost).then((_worker) => { + worker = _worker; + taskID = this.workerNextTaskID++; + return new Promise((resolve, reject2) => { + worker._callbacks[taskID] = { resolve, reject: reject2 }; + worker.postMessage({ type: "decode", id: taskID, buffer }, [buffer]); + }); + }).then((message) => this._createGeometry(message.data)).catch((e) => { + throw e; + }); + objectPending.catch(() => true).then(() => { + if (worker && taskID) { + this._releaseTask(worker, taskID); + } + }); + _taskCache.set(buffer, { + url, + promise: objectPending + }); + return objectPending; + } + parse(data2, onLoad, onError) { + this.decodeObjects(data2, "").then((result) => { + result.userData.warnings = this.warnings; + onLoad(result); + }).catch((e) => onError(e)); + } + _compareMaterials(material) { + const mat = {}; + mat.name = material.name; + mat.color = {}; + mat.color.r = material.color.r; + mat.color.g = material.color.g; + mat.color.b = material.color.b; + mat.type = material.type; + mat.vertexColors = material.vertexColors; + const json = JSON.stringify(mat); + for (let i = 0; i < this.materials.length; i++) { + const m = this.materials[i]; + const _mat = {}; + _mat.name = m.name; + _mat.color = {}; + _mat.color.r = m.color.r; + _mat.color.g = m.color.g; + _mat.color.b = m.color.b; + _mat.type = m.type; + _mat.vertexColors = m.vertexColors; + if (JSON.stringify(_mat) === json) { + return m; + } + } + this.materials.push(material); + return material; + } + _createMaterial(material, renderEnvironment) { + if (material === void 0) { + return new MeshStandardMaterial({ + color: new Color(1, 1, 1), + metalness: 0.8, + name: Loader.DEFAULT_MATERIAL_NAME, + side: DoubleSide + }); + } + const mat = new MeshPhysicalMaterial({ + color: new Color(material.diffuseColor.r / 255, material.diffuseColor.g / 255, material.diffuseColor.b / 255), + emissive: new Color(material.emissionColor.r, material.emissionColor.g, material.emissionColor.b), + flatShading: material.disableLighting, + ior: material.indexOfRefraction, + name: material.name, + reflectivity: material.reflectivity, + opacity: 1 - material.transparency, + side: DoubleSide, + specularColor: material.specularColor, + transparent: material.transparency > 0 ? true : false + }); + mat.userData.id = material.id; + if (material.pbrSupported) { + const pbr = material.pbr; + mat.anisotropy = pbr.anisotropic; + mat.anisotropyRotation = pbr.anisotropicRotation; + mat.color = new Color(pbr.baseColor.r, pbr.baseColor.g, pbr.baseColor.b); + mat.clearcoat = pbr.clearcoat; + mat.clearcoatRoughness = pbr.clearcoatRoughness; + mat.metalness = pbr.metallic; + mat.transmission = 1 - pbr.opacity; + mat.roughness = pbr.roughness; + mat.sheen = pbr.sheen; + mat.specularIntensity = pbr.specular; + mat.thickness = pbr.subsurface; + } + if (material.pbrSupported && material.pbr.opacity === 0 && material.transparency === 1) { + mat.opacity = 0.2; + mat.transmission = 1; + } + const textureLoader = new TextureLoader(); + for (let i = 0; i < material.textures.length; i++) { + const texture = material.textures[i]; + if (texture.image !== null) { + const map2 = textureLoader.load(texture.image); + switch (texture.type) { + case "Bump": + mat.bumpMap = map2; + break; + case "Diffuse": + mat.map = map2; + break; + case "Emap": + mat.envMap = map2; + break; + case "Opacity": + mat.transmissionMap = map2; + break; + case "Transparency": + mat.alphaMap = map2; + mat.transparent = true; + break; + case "PBR_Alpha": + mat.alphaMap = map2; + mat.transparent = true; + break; + case "PBR_AmbientOcclusion": + mat.aoMap = map2; + break; + case "PBR_Anisotropic": + mat.anisotropyMap = map2; + break; + case "PBR_BaseColor": + mat.map = map2; + break; + case "PBR_Clearcoat": + mat.clearcoatMap = map2; + break; + case "PBR_ClearcoatBump": + mat.clearcoatNormalMap = map2; + break; + case "PBR_ClearcoatRoughness": + mat.clearcoatRoughnessMap = map2; + break; + case "PBR_Displacement": + mat.displacementMap = map2; + break; + case "PBR_Emission": + mat.emissiveMap = map2; + break; + case "PBR_Metallic": + mat.metalnessMap = map2; + break; + case "PBR_Roughness": + mat.roughnessMap = map2; + break; + case "PBR_Sheen": + mat.sheenColorMap = map2; + break; + case "PBR_Specular": + mat.specularColorMap = map2; + break; + case "PBR_Subsurface": + mat.thicknessMap = map2; + break; + default: + this.warnings.push({ + message: `THREE.3DMLoader: No conversion exists for 3dm ${texture.type}.`, + type: "no conversion" + }); + break; + } + map2.wrapS = texture.wrapU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + map2.wrapT = texture.wrapV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if (texture.repeat) { + map2.repeat.set(texture.repeat[0], texture.repeat[1]); + } + } + } + if (renderEnvironment) { + new EXRLoader().load(renderEnvironment.image, function(texture) { + texture.mapping = THREE.EquirectangularReflectionMapping; + mat.envMap = texture; + }); + } + return mat; + } + _createGeometry(data2) { + const object = new Object3D(); + const instanceDefinitionObjects = []; + const instanceDefinitions = []; + const instanceReferences = []; + object.userData["layers"] = data2.layers; + object.userData["groups"] = data2.groups; + object.userData["settings"] = data2.settings; + object.userData.settings["renderSettings"] = data2.renderSettings; + object.userData["objectType"] = "File3dm"; + object.userData["materials"] = null; + object.name = this.url; + let objects = data2.objects; + const materials = data2.materials; + for (let i = 0; i < objects.length; i++) { + const obj = objects[i]; + const attributes = obj.attributes; + switch (obj.objectType) { + case "InstanceDefinition": + instanceDefinitions.push(obj); + break; + case "InstanceReference": + instanceReferences.push(obj); + break; + default: + let matId = null; + switch (attributes.materialSource.name) { + case "ObjectMaterialSource_MaterialFromLayer": + if (attributes.layerIndex >= 0) { + matId = data2.layers[attributes.layerIndex].renderMaterialIndex; + } + break; + case "ObjectMaterialSource_MaterialFromObject": + if (attributes.materialIndex >= 0) { + matId = attributes.materialIndex; + } + break; + } + let material = null; + if (matId >= 0) { + const rMaterial = materials[matId]; + material = this._createMaterial(rMaterial, data2.renderEnvironment); + } + const _object = this._createObject(obj, material); + if (_object === void 0) { + continue; + } + const layer = data2.layers[attributes.layerIndex]; + _object.visible = layer ? data2.layers[attributes.layerIndex].visible : true; + if (attributes.isInstanceDefinitionObject) { + instanceDefinitionObjects.push(_object); + } else { + object.add(_object); + } + break; + } + } + for (let i = 0; i < instanceDefinitions.length; i++) { + const iDef = instanceDefinitions[i]; + objects = []; + for (let j = 0; j < iDef.attributes.objectIds.length; j++) { + const objId = iDef.attributes.objectIds[j]; + for (let p2 = 0; p2 < instanceDefinitionObjects.length; p2++) { + const idoId = instanceDefinitionObjects[p2].userData.attributes.id; + if (objId === idoId) { + objects.push(instanceDefinitionObjects[p2]); + } + } + } + for (let j = 0; j < instanceReferences.length; j++) { + const iRef = instanceReferences[j]; + if (iRef.geometry.parentIdefId === iDef.attributes.id) { + const iRefObject = new Object3D(); + const xf = iRef.geometry.xform.array; + const matrix3 = new Matrix4(); + matrix3.set(...xf); + iRefObject.applyMatrix4(matrix3); + for (let p2 = 0; p2 < objects.length; p2++) { + iRefObject.add(objects[p2].clone(true)); + } + object.add(iRefObject); + } + } + } + object.userData["materials"] = this.materials; + object.name = ""; + return object; + } + _createObject(obj, mat) { + const loader = new BufferGeometryLoader(); + const attributes = obj.attributes; + let geometry, material, _color5, color; + switch (obj.objectType) { + case "Point": + case "PointSet": + geometry = loader.parse(obj.geometry); + if (geometry.attributes.hasOwnProperty("color")) { + material = new PointsMaterial({ vertexColors: true, sizeAttenuation: false, size: 2 }); + } else { + _color5 = attributes.drawColor; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + material = new PointsMaterial({ color, sizeAttenuation: false, size: 2 }); + } + material = this._compareMaterials(material); + const points = new Points(geometry, material); + points.userData["attributes"] = attributes; + points.userData["objectType"] = obj.objectType; + if (attributes.name) { + points.name = attributes.name; + } + return points; + case "Mesh": + case "Extrusion": + case "SubD": + case "Brep": + if (obj.geometry === null) return; + geometry = loader.parse(obj.geometry); + if (mat === null) { + mat = this._createMaterial(); + } + if (geometry.attributes.hasOwnProperty("color")) { + mat.vertexColors = true; + } + mat = this._compareMaterials(mat); + const mesh = new Mesh(geometry, mat); + mesh.castShadow = attributes.castsShadows; + mesh.receiveShadow = attributes.receivesShadows; + mesh.userData["attributes"] = attributes; + mesh.userData["objectType"] = obj.objectType; + if (attributes.name) { + mesh.name = attributes.name; + } + return mesh; + case "Curve": + geometry = loader.parse(obj.geometry); + _color5 = attributes.drawColor; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + material = new LineBasicMaterial({ color }); + material = this._compareMaterials(material); + const lines = new Line(geometry, material); + lines.userData["attributes"] = attributes; + lines.userData["objectType"] = obj.objectType; + if (attributes.name) { + lines.name = attributes.name; + } + return lines; + case "TextDot": + geometry = obj.geometry; + const ctx = document.createElement("canvas").getContext("2d"); + const font = `${geometry.fontHeight}px ${geometry.fontFace}`; + ctx.font = font; + const width2 = ctx.measureText(geometry.text).width + 10; + const height2 = geometry.fontHeight + 10; + const r = window.devicePixelRatio; + ctx.canvas.width = width2 * r; + ctx.canvas.height = height2 * r; + ctx.canvas.style.width = width2 + "px"; + ctx.canvas.style.height = height2 + "px"; + ctx.setTransform(r, 0, 0, r, 0, 0); + ctx.font = font; + ctx.textBaseline = "middle"; + ctx.textAlign = "center"; + color = attributes.drawColor; + ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`; + ctx.fillRect(0, 0, width2, height2); + ctx.fillStyle = "white"; + ctx.fillText(geometry.text, width2 / 2, height2 / 2); + const texture = new CanvasTexture(ctx.canvas); + texture.minFilter = LinearFilter; + texture.wrapS = ClampToEdgeWrapping; + texture.wrapT = ClampToEdgeWrapping; + material = new SpriteMaterial({ map: texture, depthTest: false }); + const sprite = new Sprite(material); + sprite.position.set(geometry.point[0], geometry.point[1], geometry.point[2]); + sprite.scale.set(width2 / 10, height2 / 10, 1); + sprite.userData["attributes"] = attributes; + sprite.userData["objectType"] = obj.objectType; + if (attributes.name) { + sprite.name = attributes.name; + } + return sprite; + case "Light": + geometry = obj.geometry; + let light; + switch (geometry.lightStyle.name) { + case "LightStyle_WorldPoint": + light = new PointLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldSpot": + light = new SpotLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + light.angle = geometry.spotAngleRadians; + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldRectangular": + light = new RectAreaLight(); + const width3 = Math.abs(geometry.width[2]); + const height3 = Math.abs(geometry.length[0]); + light.position.set(geometry.location[0] - height3 / 2, geometry.location[1], geometry.location[2] - width3 / 2); + light.height = height3; + light.width = width3; + light.lookAt(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + break; + case "LightStyle_WorldDirectional": + light = new DirectionalLight(); + light.castShadow = attributes.castsShadows; + light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); + light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); + light.shadow.normalBias = 0.1; + break; + case "LightStyle_WorldLinear": + break; + default: + break; + } + if (light) { + light.intensity = geometry.intensity; + _color5 = geometry.diffuse; + color = new Color(_color5.r / 255, _color5.g / 255, _color5.b / 255); + light.color = color; + light.userData["attributes"] = attributes; + light.userData["objectType"] = obj.objectType; + } + return light; + } + } + _initLibrary() { + if (!this.libraryPending) { + const jsLoader = new FileLoader(this.manager); + jsLoader.setPath(this.libraryPath); + const jsContent = new Promise((resolve, reject2) => { + jsLoader.load("rhino3dm.js", resolve, void 0, reject2); + }); + const binaryLoader = new FileLoader(this.manager); + binaryLoader.setPath(this.libraryPath); + binaryLoader.setResponseType("arraybuffer"); + const binaryContent = new Promise((resolve, reject2) => { + binaryLoader.load("rhino3dm.wasm", resolve, void 0, reject2); + }); + this.libraryPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { + this.libraryConfig.wasmBinary = binaryContent2; + const fn = Rhino3dmWorker.toString(); + const body = [ + "/* rhino3dm.js */", + jsContent2, + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + }); + } + return this.libraryPending; + } + _getWorker(taskCost) { + return this._initLibrary().then(() => { + if (this.workerPool.length < this.workerLimit) { + const worker2 = new Worker(this.workerSourceURL); + worker2._callbacks = {}; + worker2._taskCosts = {}; + worker2._taskLoad = 0; + worker2.postMessage({ + type: "init", + libraryConfig: this.libraryConfig + }); + worker2.onmessage = (e) => { + const message = e.data; + switch (message.type) { + case "warning": + this.warnings.push(message.data); + console.warn(message.data); + break; + case "decode": + worker2._callbacks[message.id].resolve(message); + break; + case "error": + worker2._callbacks[message.id].reject(message); + break; + default: + console.error('THREE.Rhino3dmLoader: Unexpected message, "' + message.type + '"'); + } + }; + this.workerPool.push(worker2); + } else { + this.workerPool.sort(function(a2, b3) { + return a2._taskLoad > b3._taskLoad ? -1 : 1; + }); + } + const worker = this.workerPool[this.workerPool.length - 1]; + worker._taskLoad += taskCost; + return worker; + }); + } + _releaseTask(worker, taskID) { + worker._taskLoad -= worker._taskCosts[taskID]; + delete worker._callbacks[taskID]; + delete worker._taskCosts[taskID]; + } + dispose() { + for (let i = 0; i < this.workerPool.length; ++i) { + this.workerPool[i].terminate(); + } + this.workerPool.length = 0; + return this; + } +}; +function Rhino3dmWorker() { + let libraryPending; + let libraryConfig; + let rhino; + let taskID; + onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "init": + libraryConfig = message.libraryConfig; + const wasmBinary = libraryConfig.wasmBinary; + let RhinoModule; + libraryPending = new Promise(function(resolve) { + RhinoModule = { wasmBinary, onRuntimeInitialized: resolve }; + rhino3dm(RhinoModule); + }).then(() => { + rhino = RhinoModule; + }); + break; + case "decode": + taskID = message.id; + const buffer = message.buffer; + libraryPending.then(() => { + try { + const data2 = decodeObjects(rhino, buffer); + self.postMessage({ type: "decode", id: message.id, data: data2 }); + } catch (error) { + self.postMessage({ type: "error", id: message.id, error }); + } + }); + break; + } + }; + function decodeObjects(rhino2, buffer) { + const arr = new Uint8Array(buffer); + const doc = rhino2.File3dm.fromByteArray(arr); + const objects = []; + const materials = []; + const layers = []; + const views = []; + const namedViews = []; + const groups = []; + const strings = []; + const objs = doc.objects(); + const cnt = objs.count; + for (let i = 0; i < cnt; i++) { + const _object = objs.get(i); + const object = extractObjectData(_object, doc); + _object.delete(); + if (object) { + objects.push(object); + } + } + for (let i = 0; i < doc.instanceDefinitions().count; i++) { + const idef = doc.instanceDefinitions().get(i); + const idefAttributes = extractProperties(idef); + idefAttributes.objectIds = idef.getObjectIds(); + objects.push({ geometry: null, attributes: idefAttributes, objectType: "InstanceDefinition" }); + } + const textureTypes = [ + // rhino.TextureType.Bitmap, + rhino2.TextureType.Diffuse, + rhino2.TextureType.Bump, + rhino2.TextureType.Transparency, + rhino2.TextureType.Opacity, + rhino2.TextureType.Emap + ]; + const pbrTextureTypes = [ + rhino2.TextureType.PBR_BaseColor, + rhino2.TextureType.PBR_Subsurface, + rhino2.TextureType.PBR_SubsurfaceScattering, + rhino2.TextureType.PBR_SubsurfaceScatteringRadius, + rhino2.TextureType.PBR_Metallic, + rhino2.TextureType.PBR_Specular, + rhino2.TextureType.PBR_SpecularTint, + rhino2.TextureType.PBR_Roughness, + rhino2.TextureType.PBR_Anisotropic, + rhino2.TextureType.PBR_Anisotropic_Rotation, + rhino2.TextureType.PBR_Sheen, + rhino2.TextureType.PBR_SheenTint, + rhino2.TextureType.PBR_Clearcoat, + rhino2.TextureType.PBR_ClearcoatBump, + rhino2.TextureType.PBR_ClearcoatRoughness, + rhino2.TextureType.PBR_OpacityIor, + rhino2.TextureType.PBR_OpacityRoughness, + rhino2.TextureType.PBR_Emission, + rhino2.TextureType.PBR_AmbientOcclusion, + rhino2.TextureType.PBR_Displacement + ]; + for (let i = 0; i < doc.materials().count; i++) { + const _material = doc.materials().get(i); + const material = extractProperties(_material); + const textures = []; + textures.push(...extractTextures(_material, textureTypes, doc)); + material.pbrSupported = _material.physicallyBased().supported; + if (material.pbrSupported) { + textures.push(...extractTextures(_material, pbrTextureTypes, doc)); + material.pbr = extractProperties(_material.physicallyBased()); + } + material.textures = textures; + materials.push(material); + _material.delete(); + } + for (let i = 0; i < doc.layers().count; i++) { + const _layer = doc.layers().get(i); + const layer = extractProperties(_layer); + layers.push(layer); + _layer.delete(); + } + for (let i = 0; i < doc.views().count; i++) { + const _view = doc.views().get(i); + const view = extractProperties(_view); + views.push(view); + _view.delete(); + } + for (let i = 0; i < doc.namedViews().count; i++) { + const _namedView = doc.namedViews().get(i); + const namedView = extractProperties(_namedView); + namedViews.push(namedView); + _namedView.delete(); + } + for (let i = 0; i < doc.groups().count; i++) { + const _group = doc.groups().get(i); + const group = extractProperties(_group); + groups.push(group); + _group.delete(); + } + const settings = extractProperties(doc.settings()); + const strings_count = doc.strings().count; + for (let i = 0; i < strings_count; i++) { + strings.push(doc.strings().get(i)); + } + const reflectionId = doc.settings().renderSettings().renderEnvironments.reflectionId; + const rc = doc.renderContent(); + let renderEnvironment = null; + for (let i = 0; i < rc.count; i++) { + const content2 = rc.get(i); + switch (content2.kind) { + case "environment": + const id = content2.id; + if (id !== reflectionId) break; + const renderTexture = content2.findChild("texture"); + const fileName = renderTexture.fileName; + for (let j = 0; j < doc.embeddedFiles().count; j++) { + const _fileName = doc.embeddedFiles().get(j).fileName; + if (fileName === _fileName) { + const background = doc.getEmbeddedFileAsBase64(fileName); + const backgroundImage = "data:image/png;base64," + background; + renderEnvironment = { type: "renderEnvironment", image: backgroundImage, name: fileName }; + } + } + break; + } + } + const renderSettings = { + ambientLight: doc.settings().renderSettings().ambientLight, + backgroundColorTop: doc.settings().renderSettings().backgroundColorTop, + backgroundColorBottom: doc.settings().renderSettings().backgroundColorBottom, + useHiddenLights: doc.settings().renderSettings().useHiddenLights, + depthCue: doc.settings().renderSettings().depthCue, + flatShade: doc.settings().renderSettings().flatShade, + renderBackFaces: doc.settings().renderSettings().renderBackFaces, + renderPoints: doc.settings().renderSettings().renderPoints, + renderCurves: doc.settings().renderSettings().renderCurves, + renderIsoParams: doc.settings().renderSettings().renderIsoParams, + renderMeshEdges: doc.settings().renderSettings().renderMeshEdges, + renderAnnotations: doc.settings().renderSettings().renderAnnotations, + useViewportSize: doc.settings().renderSettings().useViewportSize, + scaleBackgroundToFit: doc.settings().renderSettings().scaleBackgroundToFit, + transparentBackground: doc.settings().renderSettings().transparentBackground, + imageDpi: doc.settings().renderSettings().imageDpi, + shadowMapLevel: doc.settings().renderSettings().shadowMapLevel, + namedView: doc.settings().renderSettings().namedView, + snapShot: doc.settings().renderSettings().snapShot, + specificViewport: doc.settings().renderSettings().specificViewport, + groundPlane: extractProperties(doc.settings().renderSettings().groundPlane), + safeFrame: extractProperties(doc.settings().renderSettings().safeFrame), + dithering: extractProperties(doc.settings().renderSettings().dithering), + skylight: extractProperties(doc.settings().renderSettings().skylight), + linearWorkflow: extractProperties(doc.settings().renderSettings().linearWorkflow), + renderChannels: extractProperties(doc.settings().renderSettings().renderChannels), + sun: extractProperties(doc.settings().renderSettings().sun), + renderEnvironments: extractProperties(doc.settings().renderSettings().renderEnvironments), + postEffects: extractProperties(doc.settings().renderSettings().postEffects) + }; + doc.delete(); + return { objects, materials, layers, views, namedViews, groups, strings, settings, renderSettings, renderEnvironment }; + } + function extractTextures(m, tTypes, d) { + const textures = []; + for (let i = 0; i < tTypes.length; i++) { + const _texture = m.getTexture(tTypes[i]); + if (_texture) { + let textureType = tTypes[i].constructor.name; + textureType = textureType.substring(12, textureType.length); + const texture = extractTextureData(_texture, textureType, d); + textures.push(texture); + _texture.delete(); + } + } + return textures; + } + function extractTextureData(t3, tType, d) { + const texture = { type: tType }; + const image = d.getEmbeddedFileAsBase64(t3.fileName); + texture.wrapU = t3.wrapU; + texture.wrapV = t3.wrapV; + texture.wrapW = t3.wrapW; + const uvw = t3.uvwTransform.toFloatArray(true); + texture.repeat = [uvw[0], uvw[5]]; + if (image) { + texture.image = "data:image/png;base64," + image; + } else { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: Image for ${tType} texture not embedded in file.`, + type: "missing resource" + } + }); + texture.image = null; + } + return texture; + } + function extractObjectData(object, doc) { + const _geometry2 = object.geometry(); + const _attributes = object.attributes(); + let objectType = _geometry2.objectType; + let geometry, attributes, position2, data2, mesh; + switch (objectType) { + case rhino.ObjectType.Curve: + const pts = curveToPoints(_geometry2, 100); + position2 = {}; + attributes = {}; + data2 = {}; + position2.itemSize = 3; + position2.type = "Float32Array"; + position2.array = []; + for (let j = 0; j < pts.length; j++) { + position2.array.push(pts[j][0]); + position2.array.push(pts[j][1]); + position2.array.push(pts[j][2]); + } + attributes.position = position2; + data2.attributes = attributes; + geometry = { data: data2 }; + break; + case rhino.ObjectType.Point: + const pt = _geometry2.location; + position2 = {}; + const color = {}; + attributes = {}; + data2 = {}; + position2.itemSize = 3; + position2.type = "Float32Array"; + position2.array = [pt[0], pt[1], pt[2]]; + const _color5 = _attributes.drawColor(doc); + color.itemSize = 3; + color.type = "Float32Array"; + color.array = [_color5.r / 255, _color5.g / 255, _color5.b / 255]; + attributes.position = position2; + attributes.color = color; + data2.attributes = attributes; + geometry = { data: data2 }; + break; + case rhino.ObjectType.PointSet: + case rhino.ObjectType.Mesh: + geometry = _geometry2.toThreejsJSON(); + break; + case rhino.ObjectType.Brep: + const faces = _geometry2.faces(); + mesh = new rhino.Mesh(); + for (let faceIndex = 0; faceIndex < faces.count; faceIndex++) { + const face = faces.get(faceIndex); + const _mesh = face.getMesh(rhino.MeshType.Any); + if (_mesh) { + mesh.append(_mesh); + _mesh.delete(); + } + face.delete(); + } + if (mesh.faces().count > 0) { + mesh.compact(); + geometry = mesh.toThreejsJSON(); + faces.delete(); + } + mesh.delete(); + break; + case rhino.ObjectType.Extrusion: + mesh = _geometry2.getMesh(rhino.MeshType.Any); + if (mesh) { + geometry = mesh.toThreejsJSON(); + mesh.delete(); + } + break; + case rhino.ObjectType.TextDot: + geometry = extractProperties(_geometry2); + break; + case rhino.ObjectType.Light: + geometry = extractProperties(_geometry2); + if (geometry.lightStyle.name === "LightStyle_WorldLinear") { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: No conversion exists for ${objectType.constructor.name} ${geometry.lightStyle.name}`, + type: "no conversion", + guid: _attributes.id + } + }); + } + break; + case rhino.ObjectType.InstanceReference: + geometry = extractProperties(_geometry2); + geometry.xform = extractProperties(_geometry2.xform); + geometry.xform.array = _geometry2.xform.toFloatArray(true); + break; + case rhino.ObjectType.SubD: + _geometry2.subdivide(3); + mesh = rhino.Mesh.createFromSubDControlNet(_geometry2, false); + if (mesh) { + geometry = mesh.toThreejsJSON(); + mesh.delete(); + } + break; + default: + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: Conversion not implemented for ${objectType.constructor.name}`, + type: "not implemented", + guid: _attributes.id + } + }); + break; + } + if (geometry) { + attributes = extractProperties(_attributes); + attributes.geometry = extractProperties(_geometry2); + if (_attributes.groupCount > 0) { + attributes.groupIds = _attributes.getGroupList(); + } + if (_attributes.userStringCount > 0) { + attributes.userStrings = _attributes.getUserStrings(); + } + if (_geometry2.userStringCount > 0) { + attributes.geometry.userStrings = _geometry2.getUserStrings(); + } + if (_attributes.decals().count > 0) { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: "THREE.3DMLoader: No conversion exists for the decals associated with this object.", + type: "no conversion", + guid: _attributes.id + } + }); + } + attributes.drawColor = _attributes.drawColor(doc); + objectType = objectType.constructor.name; + objectType = objectType.substring(11, objectType.length); + return { geometry, attributes, objectType }; + } else { + self.postMessage({ + type: "warning", + id: taskID, + data: { + message: `THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`, + type: "missing mesh", + guid: _attributes.id + } + }); + } + } + function extractProperties(object) { + const result = {}; + for (const property2 in object) { + const value2 = object[property2]; + if (typeof value2 !== "function") { + if (typeof value2 === "object" && value2 !== null && value2.hasOwnProperty("constructor")) { + result[property2] = { name: value2.constructor.name, value: value2.value }; + } else if (typeof value2 === "object" && value2 !== null) { + result[property2] = extractProperties(value2); + } else { + result[property2] = value2; + } + } else { + } + } + return result; + } + function curveToPoints(curve, pointLimit) { + let pointCount = pointLimit; + let rc = []; + const ts = []; + if (curve instanceof rhino.LineCurve) { + return [curve.pointAtStart, curve.pointAtEnd]; + } + if (curve instanceof rhino.PolylineCurve) { + pointCount = curve.pointCount; + for (let i = 0; i < pointCount; i++) { + rc.push(curve.point(i)); + } + return rc; + } + if (curve instanceof rhino.PolyCurve) { + const segmentCount = curve.segmentCount; + for (let i = 0; i < segmentCount; i++) { + const segment = curve.segmentCurve(i); + const segmentArray = curveToPoints(segment, pointCount); + rc = rc.concat(segmentArray); + segment.delete(); + } + return rc; + } + if (curve instanceof rhino.ArcCurve) { + pointCount = Math.floor(curve.angleDegrees / 5); + pointCount = pointCount < 2 ? 2 : pointCount; + } + if (curve instanceof rhino.NurbsCurve && curve.degree === 1) { + const pLine = curve.tryGetPolyline(); + for (let i = 0; i < pLine.count; i++) { + rc.push(pLine.get(i)); + } + pLine.delete(); + return rc; + } + const domain = curve.domain; + const divisions = pointCount - 1; + for (let j = 0; j < pointCount; j++) { + const t3 = domain[0] + j / divisions * (domain[1] - domain[0]); + if (t3 === domain[0] || t3 === domain[1]) { + ts.push(t3); + continue; + } + const tan = curve.tangentAt(t3); + const prevTan = curve.tangentAt(ts.slice(-1)[0]); + const tS = tan[0] * tan[0] + tan[1] * tan[1] + tan[2] * tan[2]; + const ptS = prevTan[0] * prevTan[0] + prevTan[1] * prevTan[1] + prevTan[2] * prevTan[2]; + const denominator = Math.sqrt(tS * ptS); + let angle; + if (denominator === 0) { + angle = Math.PI / 2; + } else { + const theta = (tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z) / denominator; + angle = Math.acos(Math.max(-1, Math.min(1, theta))); + } + if (angle < 0.1) continue; + ts.push(t3); + } + rc = ts.map((t3) => curve.pointAt(t3)); + return rc; + } +} + +// node_modules/three/examples/jsm/loaders/3MFLoader.js +var COLOR_SPACE_3MF = SRGBColorSpace; +var ThreeMFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.availableExtensions = []; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + const scope = this; + const textureLoader = new TextureLoader(this.manager); + function loadDocument(data3) { + let zip = null; + let file = null; + let relsName; + let modelRelsName; + const modelPartNames = []; + const texturesPartNames = []; + let modelRels; + const modelParts = {}; + const printTicketParts = {}; + const texturesParts = {}; + const textDecoder = new TextDecoder(); + try { + zip = unzipSync(new Uint8Array(data3)); + } catch (e) { + if (e instanceof ReferenceError) { + console.error("THREE.3MFLoader: fflate missing and file is compressed."); + return null; + } + } + for (file in zip) { + if (file.match(/\_rels\/.rels$/)) { + relsName = file; + } else if (file.match(/3D\/_rels\/.*\.model\.rels$/)) { + modelRelsName = file; + } else if (file.match(/^3D\/.*\.model$/)) { + modelPartNames.push(file); + } else if (file.match(/^3D\/Textures?\/.*/)) { + texturesPartNames.push(file); + } + } + if (relsName === void 0) throw new Error("THREE.ThreeMFLoader: Cannot find relationship file `rels` in 3MF archive."); + const relsView = zip[relsName]; + const relsFileText = textDecoder.decode(relsView); + const rels = parseRelsXml(relsFileText); + if (modelRelsName) { + const relsView2 = zip[modelRelsName]; + const relsFileText2 = textDecoder.decode(relsView2); + modelRels = parseRelsXml(relsFileText2); + } + for (let i = 0; i < modelPartNames.length; i++) { + const modelPart = modelPartNames[i]; + const view = zip[modelPart]; + const fileText = textDecoder.decode(view); + const xmlData = new DOMParser().parseFromString(fileText, "application/xml"); + if (xmlData.documentElement.nodeName.toLowerCase() !== "model") { + console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart); + } + const modelNode = xmlData.querySelector("model"); + const extensions = {}; + for (let i2 = 0; i2 < modelNode.attributes.length; i2++) { + const attr = modelNode.attributes[i2]; + if (attr.name.match(/^xmlns:(.+)$/)) { + extensions[attr.value] = RegExp.$1; + } + } + const modelData = parseModelNode(modelNode); + modelData["xml"] = modelNode; + if (0 < Object.keys(extensions).length) { + modelData["extensions"] = extensions; + } + modelParts[modelPart] = modelData; + } + for (let i = 0; i < texturesPartNames.length; i++) { + const texturesPartName = texturesPartNames[i]; + texturesParts[texturesPartName] = zip[texturesPartName].buffer; + } + return { + rels, + modelRels, + model: modelParts, + printTicket: printTicketParts, + texture: texturesParts + }; + } + function parseRelsXml(relsFileText) { + const relationships = []; + const relsXmlData = new DOMParser().parseFromString(relsFileText, "application/xml"); + const relsNodes = relsXmlData.querySelectorAll("Relationship"); + for (let i = 0; i < relsNodes.length; i++) { + const relsNode = relsNodes[i]; + const relationship = { + target: relsNode.getAttribute("Target"), + //required + id: relsNode.getAttribute("Id"), + //required + type: relsNode.getAttribute("Type") + //required + }; + relationships.push(relationship); + } + return relationships; + } + function parseMetadataNodes(metadataNodes) { + const metadataData = {}; + for (let i = 0; i < metadataNodes.length; i++) { + const metadataNode = metadataNodes[i]; + const name2 = metadataNode.getAttribute("name"); + const validNames = [ + "Title", + "Designer", + "Description", + "Copyright", + "LicenseTerms", + "Rating", + "CreationDate", + "ModificationDate" + ]; + if (0 <= validNames.indexOf(name2)) { + metadataData[name2] = metadataNode.textContent; + } + } + return metadataData; + } + function parseBasematerialsNode(basematerialsNode) { + const basematerialsData = { + id: basematerialsNode.getAttribute("id"), + // required + basematerials: [] + }; + const basematerialNodes = basematerialsNode.querySelectorAll("base"); + for (let i = 0; i < basematerialNodes.length; i++) { + const basematerialNode = basematerialNodes[i]; + const basematerialData = parseBasematerialNode(basematerialNode); + basematerialData.index = i; + basematerialsData.basematerials.push(basematerialData); + } + return basematerialsData; + } + function parseTexture2DNode(texture2DNode) { + const texture2dData = { + id: texture2DNode.getAttribute("id"), + // required + path: texture2DNode.getAttribute("path"), + // required + contenttype: texture2DNode.getAttribute("contenttype"), + // required + tilestyleu: texture2DNode.getAttribute("tilestyleu"), + tilestylev: texture2DNode.getAttribute("tilestylev"), + filter: texture2DNode.getAttribute("filter") + }; + return texture2dData; + } + function parseTextures2DGroupNode(texture2DGroupNode) { + const texture2DGroupData = { + id: texture2DGroupNode.getAttribute("id"), + // required + texid: texture2DGroupNode.getAttribute("texid"), + // required + displaypropertiesid: texture2DGroupNode.getAttribute("displaypropertiesid") + }; + const tex2coordNodes = texture2DGroupNode.querySelectorAll("tex2coord"); + const uvs = []; + for (let i = 0; i < tex2coordNodes.length; i++) { + const tex2coordNode = tex2coordNodes[i]; + const u = tex2coordNode.getAttribute("u"); + const v = tex2coordNode.getAttribute("v"); + uvs.push(parseFloat(u), parseFloat(v)); + } + texture2DGroupData["uvs"] = new Float32Array(uvs); + return texture2DGroupData; + } + function parseColorGroupNode(colorGroupNode) { + const colorGroupData = { + id: colorGroupNode.getAttribute("id"), + // required + displaypropertiesid: colorGroupNode.getAttribute("displaypropertiesid") + }; + const colorNodes = colorGroupNode.querySelectorAll("color"); + const colors = []; + const colorObject = new Color(); + for (let i = 0; i < colorNodes.length; i++) { + const colorNode = colorNodes[i]; + const color = colorNode.getAttribute("color"); + colorObject.setStyle(color.substring(0, 7), COLOR_SPACE_3MF); + colors.push(colorObject.r, colorObject.g, colorObject.b); + } + colorGroupData["colors"] = new Float32Array(colors); + return colorGroupData; + } + function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) { + const metallicDisplaypropertiesData = { + id: metallicDisplaypropetiesNode.getAttribute("id") + // required + }; + const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll("pbmetallic"); + const metallicData = []; + for (let i = 0; i < metallicNodes.length; i++) { + const metallicNode = metallicNodes[i]; + metallicData.push({ + name: metallicNode.getAttribute("name"), + // required + metallicness: parseFloat(metallicNode.getAttribute("metallicness")), + // required + roughness: parseFloat(metallicNode.getAttribute("roughness")) + // required + }); + } + metallicDisplaypropertiesData.data = metallicData; + return metallicDisplaypropertiesData; + } + function parseBasematerialNode(basematerialNode) { + const basematerialData = {}; + basematerialData["name"] = basematerialNode.getAttribute("name"); + basematerialData["displaycolor"] = basematerialNode.getAttribute("displaycolor"); + basematerialData["displaypropertiesid"] = basematerialNode.getAttribute("displaypropertiesid"); + return basematerialData; + } + function parseMeshNode(meshNode) { + const meshData = {}; + const vertices = []; + const vertexNodes = meshNode.querySelectorAll("vertices vertex"); + for (let i = 0; i < vertexNodes.length; i++) { + const vertexNode = vertexNodes[i]; + const x2 = vertexNode.getAttribute("x"); + const y2 = vertexNode.getAttribute("y"); + const z = vertexNode.getAttribute("z"); + vertices.push(parseFloat(x2), parseFloat(y2), parseFloat(z)); + } + meshData["vertices"] = new Float32Array(vertices); + const triangleProperties = []; + const triangles = []; + const triangleNodes = meshNode.querySelectorAll("triangles triangle"); + for (let i = 0; i < triangleNodes.length; i++) { + const triangleNode = triangleNodes[i]; + const v12 = triangleNode.getAttribute("v1"); + const v2 = triangleNode.getAttribute("v2"); + const v3 = triangleNode.getAttribute("v3"); + const p1 = triangleNode.getAttribute("p1"); + const p2 = triangleNode.getAttribute("p2"); + const p3 = triangleNode.getAttribute("p3"); + const pid = triangleNode.getAttribute("pid"); + const triangleProperty = {}; + triangleProperty["v1"] = parseInt(v12, 10); + triangleProperty["v2"] = parseInt(v2, 10); + triangleProperty["v3"] = parseInt(v3, 10); + triangles.push(triangleProperty["v1"], triangleProperty["v2"], triangleProperty["v3"]); + if (p1) { + triangleProperty["p1"] = parseInt(p1, 10); + } + if (p2) { + triangleProperty["p2"] = parseInt(p2, 10); + } + if (p3) { + triangleProperty["p3"] = parseInt(p3, 10); + } + if (pid) { + triangleProperty["pid"] = pid; + } + if (0 < Object.keys(triangleProperty).length) { + triangleProperties.push(triangleProperty); + } + } + meshData["triangleProperties"] = triangleProperties; + meshData["triangles"] = new Uint32Array(triangles); + return meshData; + } + function parseComponentsNode(componentsNode) { + const components = []; + const componentNodes = componentsNode.querySelectorAll("component"); + for (let i = 0; i < componentNodes.length; i++) { + const componentNode = componentNodes[i]; + const componentData = parseComponentNode(componentNode); + components.push(componentData); + } + return components; + } + function parseComponentNode(componentNode) { + const componentData = {}; + componentData["objectId"] = componentNode.getAttribute("objectid"); + const transform2 = componentNode.getAttribute("transform"); + if (transform2) { + componentData["transform"] = parseTransform(transform2); + } + return componentData; + } + function parseTransform(transform2) { + const t3 = []; + transform2.split(" ").forEach(function(s) { + t3.push(parseFloat(s)); + }); + const matrix3 = new Matrix4(); + matrix3.set( + t3[0], + t3[3], + t3[6], + t3[9], + t3[1], + t3[4], + t3[7], + t3[10], + t3[2], + t3[5], + t3[8], + t3[11], + 0, + 0, + 0, + 1 + ); + return matrix3; + } + function parseObjectNode(objectNode) { + const objectData = { + type: objectNode.getAttribute("type") + }; + const id = objectNode.getAttribute("id"); + if (id) { + objectData["id"] = id; + } + const pid = objectNode.getAttribute("pid"); + if (pid) { + objectData["pid"] = pid; + } + const pindex = objectNode.getAttribute("pindex"); + if (pindex) { + objectData["pindex"] = pindex; + } + const thumbnail = objectNode.getAttribute("thumbnail"); + if (thumbnail) { + objectData["thumbnail"] = thumbnail; + } + const partnumber = objectNode.getAttribute("partnumber"); + if (partnumber) { + objectData["partnumber"] = partnumber; + } + const name2 = objectNode.getAttribute("name"); + if (name2) { + objectData["name"] = name2; + } + const meshNode = objectNode.querySelector("mesh"); + if (meshNode) { + objectData["mesh"] = parseMeshNode(meshNode); + } + const componentsNode = objectNode.querySelector("components"); + if (componentsNode) { + objectData["components"] = parseComponentsNode(componentsNode); + } + return objectData; + } + function parseResourcesNode(resourcesNode) { + const resourcesData = {}; + resourcesData["basematerials"] = {}; + const basematerialsNodes = resourcesNode.querySelectorAll("basematerials"); + for (let i = 0; i < basematerialsNodes.length; i++) { + const basematerialsNode = basematerialsNodes[i]; + const basematerialsData = parseBasematerialsNode(basematerialsNode); + resourcesData["basematerials"][basematerialsData["id"]] = basematerialsData; + } + resourcesData["texture2d"] = {}; + const textures2DNodes = resourcesNode.querySelectorAll("texture2d"); + for (let i = 0; i < textures2DNodes.length; i++) { + const textures2DNode = textures2DNodes[i]; + const texture2DData = parseTexture2DNode(textures2DNode); + resourcesData["texture2d"][texture2DData["id"]] = texture2DData; + } + resourcesData["colorgroup"] = {}; + const colorGroupNodes = resourcesNode.querySelectorAll("colorgroup"); + for (let i = 0; i < colorGroupNodes.length; i++) { + const colorGroupNode = colorGroupNodes[i]; + const colorGroupData = parseColorGroupNode(colorGroupNode); + resourcesData["colorgroup"][colorGroupData["id"]] = colorGroupData; + } + resourcesData["pbmetallicdisplayproperties"] = {}; + const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll("pbmetallicdisplayproperties"); + for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) { + const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i]; + const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode); + resourcesData["pbmetallicdisplayproperties"][pbmetallicdisplaypropertiesData["id"]] = pbmetallicdisplaypropertiesData; + } + resourcesData["texture2dgroup"] = {}; + const textures2DGroupNodes = resourcesNode.querySelectorAll("texture2dgroup"); + for (let i = 0; i < textures2DGroupNodes.length; i++) { + const textures2DGroupNode = textures2DGroupNodes[i]; + const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode); + resourcesData["texture2dgroup"][textures2DGroupData["id"]] = textures2DGroupData; + } + resourcesData["object"] = {}; + const objectNodes = resourcesNode.querySelectorAll("object"); + for (let i = 0; i < objectNodes.length; i++) { + const objectNode = objectNodes[i]; + const objectData = parseObjectNode(objectNode); + resourcesData["object"][objectData["id"]] = objectData; + } + return resourcesData; + } + function parseBuildNode(buildNode) { + const buildData = []; + const itemNodes = buildNode.querySelectorAll("item"); + for (let i = 0; i < itemNodes.length; i++) { + const itemNode = itemNodes[i]; + const buildItem = { + objectId: itemNode.getAttribute("objectid") + }; + const transform2 = itemNode.getAttribute("transform"); + if (transform2) { + buildItem["transform"] = parseTransform(transform2); + } + buildData.push(buildItem); + } + return buildData; + } + function parseModelNode(modelNode) { + const modelData = { unit: modelNode.getAttribute("unit") || "millimeter" }; + const metadataNodes = modelNode.querySelectorAll("metadata"); + if (metadataNodes) { + modelData["metadata"] = parseMetadataNodes(metadataNodes); + } + const resourcesNode = modelNode.querySelector("resources"); + if (resourcesNode) { + modelData["resources"] = parseResourcesNode(resourcesNode); + } + const buildNode = modelNode.querySelector("build"); + if (buildNode) { + modelData["build"] = parseBuildNode(buildNode); + } + return modelData; + } + function buildTexture(texture2dgroup, objects2, modelData, textureData) { + const texid = texture2dgroup.texid; + const texture2ds = modelData.resources.texture2d; + const texture2d = texture2ds[texid]; + if (texture2d) { + const data3 = textureData[texture2d.path]; + const type = texture2d.contenttype; + const blob = new Blob([data3], { type }); + const sourceURI = URL.createObjectURL(blob); + const texture = textureLoader.load(sourceURI, function() { + URL.revokeObjectURL(sourceURI); + }); + texture.colorSpace = COLOR_SPACE_3MF; + switch (texture2d.tilestyleu) { + case "wrap": + texture.wrapS = RepeatWrapping; + break; + case "mirror": + texture.wrapS = MirroredRepeatWrapping; + break; + case "none": + case "clamp": + texture.wrapS = ClampToEdgeWrapping; + break; + default: + texture.wrapS = RepeatWrapping; + } + switch (texture2d.tilestylev) { + case "wrap": + texture.wrapT = RepeatWrapping; + break; + case "mirror": + texture.wrapT = MirroredRepeatWrapping; + break; + case "none": + case "clamp": + texture.wrapT = ClampToEdgeWrapping; + break; + default: + texture.wrapT = RepeatWrapping; + } + switch (texture2d.filter) { + case "auto": + texture.magFilter = LinearFilter; + texture.minFilter = LinearMipmapLinearFilter; + break; + case "linear": + texture.magFilter = LinearFilter; + texture.minFilter = LinearFilter; + break; + case "nearest": + texture.magFilter = NearestFilter; + texture.minFilter = NearestFilter; + break; + default: + texture.magFilter = LinearFilter; + texture.minFilter = LinearMipmapLinearFilter; + } + return texture; + } else { + return null; + } + } + function buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData) { + const objectPindex = objectData.pindex; + const materialMap = {}; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + const pindex = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectPindex; + if (materialMap[pindex] === void 0) materialMap[pindex] = []; + materialMap[pindex].push(triangleProperty); + } + const keys2 = Object.keys(materialMap); + const meshes = []; + for (let i = 0, l2 = keys2.length; i < l2; i++) { + const materialIndex = keys2[i]; + const trianglePropertiesProps = materialMap[materialIndex]; + const basematerialData = basematerials.basematerials[materialIndex]; + const material = getBuild(basematerialData, objects2, modelData, textureData, objectData, buildBasematerial); + const geometry = new BufferGeometry(); + const positionData = []; + const vertices = meshData.vertices; + for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) { + const triangleProperty = trianglePropertiesProps[j]; + positionData.push(vertices[triangleProperty.v1 * 3 + 0]); + positionData.push(vertices[triangleProperty.v1 * 3 + 1]); + positionData.push(vertices[triangleProperty.v1 * 3 + 2]); + positionData.push(vertices[triangleProperty.v2 * 3 + 0]); + positionData.push(vertices[triangleProperty.v2 * 3 + 1]); + positionData.push(vertices[triangleProperty.v2 * 3 + 2]); + positionData.push(vertices[triangleProperty.v3 * 3 + 0]); + positionData.push(vertices[triangleProperty.v3 * 3 + 1]); + positionData.push(vertices[triangleProperty.v3 * 3 + 2]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + const mesh = new Mesh(geometry, material); + meshes.push(mesh); + } + return meshes; + } + function buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData) { + const geometry = new BufferGeometry(); + const positionData = []; + const uvData = []; + const vertices = meshData.vertices; + const uvs = texture2dgroup.uvs; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + positionData.push(vertices[triangleProperty.v1 * 3 + 0]); + positionData.push(vertices[triangleProperty.v1 * 3 + 1]); + positionData.push(vertices[triangleProperty.v1 * 3 + 2]); + positionData.push(vertices[triangleProperty.v2 * 3 + 0]); + positionData.push(vertices[triangleProperty.v2 * 3 + 1]); + positionData.push(vertices[triangleProperty.v2 * 3 + 2]); + positionData.push(vertices[triangleProperty.v3 * 3 + 0]); + positionData.push(vertices[triangleProperty.v3 * 3 + 1]); + positionData.push(vertices[triangleProperty.v3 * 3 + 2]); + uvData.push(uvs[triangleProperty.p1 * 2 + 0]); + uvData.push(uvs[triangleProperty.p1 * 2 + 1]); + uvData.push(uvs[triangleProperty.p2 * 2 + 0]); + uvData.push(uvs[triangleProperty.p2 * 2 + 1]); + uvData.push(uvs[triangleProperty.p3 * 2 + 0]); + uvData.push(uvs[triangleProperty.p3 * 2 + 1]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvData, 2)); + const texture = getBuild(texture2dgroup, objects2, modelData, textureData, objectData, buildTexture); + const material = new MeshPhongMaterial({ map: texture, flatShading: true }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objectData) { + const geometry = new BufferGeometry(); + const positionData = []; + const colorData = []; + const vertices = meshData.vertices; + const colors = colorgroup.colors; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + const v12 = triangleProperty.v1; + const v2 = triangleProperty.v2; + const v3 = triangleProperty.v3; + positionData.push(vertices[v12 * 3 + 0]); + positionData.push(vertices[v12 * 3 + 1]); + positionData.push(vertices[v12 * 3 + 2]); + positionData.push(vertices[v2 * 3 + 0]); + positionData.push(vertices[v2 * 3 + 1]); + positionData.push(vertices[v2 * 3 + 2]); + positionData.push(vertices[v3 * 3 + 0]); + positionData.push(vertices[v3 * 3 + 1]); + positionData.push(vertices[v3 * 3 + 2]); + const p1 = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectData.pindex; + const p2 = triangleProperty.p2 !== void 0 ? triangleProperty.p2 : p1; + const p3 = triangleProperty.p3 !== void 0 ? triangleProperty.p3 : p1; + colorData.push(colors[p1 * 3 + 0]); + colorData.push(colors[p1 * 3 + 1]); + colorData.push(colors[p1 * 3 + 2]); + colorData.push(colors[p2 * 3 + 0]); + colorData.push(colors[p2 * 3 + 1]); + colorData.push(colors[p2 * 3 + 2]); + colorData.push(colors[p3 * 3 + 0]); + colorData.push(colors[p3 * 3 + 1]); + colorData.push(colors[p3 * 3 + 2]); + } + geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); + geometry.setAttribute("color", new Float32BufferAttribute(colorData, 3)); + const material = new MeshPhongMaterial({ vertexColors: true, flatShading: true }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildDefaultMesh(meshData) { + const geometry = new BufferGeometry(); + geometry.setIndex(new BufferAttribute(meshData["triangles"], 1)); + geometry.setAttribute("position", new BufferAttribute(meshData["vertices"], 3)); + const material = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 16777215, + flatShading: true + }); + const mesh = new Mesh(geometry, material); + return mesh; + } + function buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData) { + const keys2 = Object.keys(resourceMap); + const meshes = []; + for (let i = 0, il = keys2.length; i < il; i++) { + const resourceId = keys2[i]; + const triangleProperties = resourceMap[resourceId]; + const resourceType = getResourceType(resourceId, modelData); + switch (resourceType) { + case "material": + const basematerials = modelData.resources.basematerials[resourceId]; + const newMeshes = buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData); + for (let j = 0, jl = newMeshes.length; j < jl; j++) { + meshes.push(newMeshes[j]); + } + break; + case "texture": + const texture2dgroup = modelData.resources.texture2dgroup[resourceId]; + meshes.push(buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData)); + break; + case "vertexColors": + const colorgroup = modelData.resources.colorgroup[resourceId]; + meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objectData)); + break; + case "default": + meshes.push(buildDefaultMesh(meshData)); + break; + default: + console.error("THREE.3MFLoader: Unsupported resource type."); + } + } + if (objectData.name) { + for (let i = 0; i < meshes.length; i++) { + meshes[i].name = objectData.name; + } + } + return meshes; + } + function getResourceType(pid, modelData) { + if (modelData.resources.texture2dgroup[pid] !== void 0) { + return "texture"; + } else if (modelData.resources.basematerials[pid] !== void 0) { + return "material"; + } else if (modelData.resources.colorgroup[pid] !== void 0) { + return "vertexColors"; + } else if (pid === "default") { + return "default"; + } else { + return void 0; + } + } + function analyzeObject(meshData, objectData) { + const resourceMap = {}; + const triangleProperties = meshData["triangleProperties"]; + const objectPid = objectData.pid; + for (let i = 0, l2 = triangleProperties.length; i < l2; i++) { + const triangleProperty = triangleProperties[i]; + let pid = triangleProperty.pid !== void 0 ? triangleProperty.pid : objectPid; + if (pid === void 0) pid = "default"; + if (resourceMap[pid] === void 0) resourceMap[pid] = []; + resourceMap[pid].push(triangleProperty); + } + return resourceMap; + } + function buildGroup(meshData, objects2, modelData, textureData, objectData) { + const group = new Group(); + const resourceMap = analyzeObject(meshData, objectData); + const meshes = buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData); + for (let i = 0, l2 = meshes.length; i < l2; i++) { + group.add(meshes[i]); + } + return group; + } + function applyExtensions(extensions, meshData, modelXml) { + if (!extensions) { + return; + } + const availableExtensions = []; + const keys2 = Object.keys(extensions); + for (let i = 0; i < keys2.length; i++) { + const ns = keys2[i]; + for (let j = 0; j < scope.availableExtensions.length; j++) { + const extension = scope.availableExtensions[j]; + if (extension.ns === ns) { + availableExtensions.push(extension); + } + } + } + for (let i = 0; i < availableExtensions.length; i++) { + const extension = availableExtensions[i]; + extension.apply(modelXml, extensions[extension["ns"]], meshData); + } + } + function getBuild(data3, objects2, modelData, textureData, objectData, builder) { + if (data3.build !== void 0) return data3.build; + data3.build = builder(data3, objects2, modelData, textureData, objectData); + return data3.build; + } + function buildBasematerial(materialData, objects2, modelData) { + let material; + const displaypropertiesid = materialData.displaypropertiesid; + const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties; + if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== void 0) { + const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid]; + const metallicData = pbmetallicdisplayproperty.data[materialData.index]; + material = new MeshStandardMaterial({ flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness }); + } else { + material = new MeshPhongMaterial({ flatShading: true }); + } + material.name = materialData.name; + const displaycolor = materialData.displaycolor; + const color = displaycolor.substring(0, 7); + material.color.setStyle(color, COLOR_SPACE_3MF); + if (displaycolor.length === 9) { + material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255; + } + return material; + } + function buildComposite(compositeData, objects2, modelData, textureData) { + const composite = new Group(); + for (let j = 0; j < compositeData.length; j++) { + const component = compositeData[j]; + let build2 = objects2[component.objectId]; + if (build2 === void 0) { + buildObject(component.objectId, objects2, modelData, textureData); + build2 = objects2[component.objectId]; + } + const object3D = build2.clone(); + const transform2 = component.transform; + if (transform2) { + object3D.applyMatrix4(transform2); + } + composite.add(object3D); + } + return composite; + } + function buildObject(objectId, objects2, modelData, textureData) { + const objectData = modelData["resources"]["object"][objectId]; + if (objectData["mesh"]) { + const meshData = objectData["mesh"]; + const extensions = modelData["extensions"]; + const modelXml = modelData["xml"]; + applyExtensions(extensions, meshData, modelXml); + objects2[objectData.id] = getBuild(meshData, objects2, modelData, textureData, objectData, buildGroup); + } else { + const compositeData = objectData["components"]; + objects2[objectData.id] = getBuild(compositeData, objects2, modelData, textureData, objectData, buildComposite); + } + if (objectData.name) { + objects2[objectData.id].name = objectData.name; + } + } + function buildObjects(data3mf2) { + const modelsData = data3mf2.model; + const modelRels = data3mf2.modelRels; + const objects2 = {}; + const modelsKeys = Object.keys(modelsData); + const textureData = {}; + if (modelRels) { + for (let i = 0, l2 = modelRels.length; i < l2; i++) { + const modelRel = modelRels[i]; + const textureKey = modelRel.target.substring(1); + if (data3mf2.texture[textureKey]) { + textureData[modelRel.target] = data3mf2.texture[textureKey]; + } + } + } + for (let i = 0; i < modelsKeys.length; i++) { + const modelsKey = modelsKeys[i]; + const modelData = modelsData[modelsKey]; + const objectIds = Object.keys(modelData["resources"]["object"]); + for (let j = 0; j < objectIds.length; j++) { + const objectId = objectIds[j]; + buildObject(objectId, objects2, modelData, textureData); + } + } + return objects2; + } + function fetch3DModelPart(rels) { + for (let i = 0; i < rels.length; i++) { + const rel = rels[i]; + const extension = rel.target.split(".").pop(); + if (extension.toLowerCase() === "model") return rel; + } + } + function build(objects2, data3mf2) { + const group = new Group(); + const relationship = fetch3DModelPart(data3mf2["rels"]); + const buildData = data3mf2.model[relationship["target"].substring(1)]["build"]; + for (let i = 0; i < buildData.length; i++) { + const buildItem = buildData[i]; + const object3D = objects2[buildItem["objectId"]].clone(); + const transform2 = buildItem["transform"]; + if (transform2) { + object3D.applyMatrix4(transform2); + } + group.add(object3D); + } + return group; + } + const data3mf = loadDocument(data2); + const objects = buildObjects(data3mf); + return build(objects, data3mf); + } + addExtension(extension) { + this.availableExtensions.push(extension); + } +}; + +// node_modules/three/examples/jsm/loaders/AMFLoader.js +var AMFLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function loadDocument(data3) { + let view = new DataView(data3); + const magic = String.fromCharCode(view.getUint8(0), view.getUint8(1)); + if (magic === "PK") { + let zip = null; + let file = null; + console.log("THREE.AMFLoader: Loading Zip"); + try { + zip = unzipSync(new Uint8Array(data3)); + } catch (e) { + if (e instanceof ReferenceError) { + console.log("THREE.AMFLoader: fflate missing and file is compressed."); + return null; + } + } + for (file in zip) { + if (file.toLowerCase().slice(-4) === ".amf") { + break; + } + } + console.log("THREE.AMFLoader: Trying to load file asset: " + file); + view = new DataView(zip[file].buffer); + } + const fileText = new TextDecoder().decode(view); + const xmlData2 = new DOMParser().parseFromString(fileText, "application/xml"); + if (xmlData2.documentElement.nodeName.toLowerCase() !== "amf") { + console.log("THREE.AMFLoader: Error loading AMF - no AMF document found."); + return null; + } + return xmlData2; + } + function loadDocumentScale(node) { + let scale2 = 1; + let unit = "millimeter"; + if (node.documentElement.attributes.unit !== void 0) { + unit = node.documentElement.attributes.unit.value.toLowerCase(); + } + const scaleUnits = { + millimeter: 1, + inch: 25.4, + feet: 304.8, + meter: 1e3, + micron: 1e-3 + }; + if (scaleUnits[unit] !== void 0) { + scale2 = scaleUnits[unit]; + } + console.log("THREE.AMFLoader: Unit scale: " + scale2); + return scale2; + } + function loadMaterials(node) { + let matName = "AMF Material"; + const matId = node.attributes.id.textContent; + let color = { r: 1, g: 1, b: 1, a: 1 }; + let loadedMaterial = null; + for (let i2 = 0; i2 < node.childNodes.length; i2++) { + const matChildEl = node.childNodes[i2]; + if (matChildEl.nodeName === "metadata" && matChildEl.attributes.type !== void 0) { + if (matChildEl.attributes.type.value === "name") { + matName = matChildEl.textContent; + } + } else if (matChildEl.nodeName === "color") { + color = loadColor(matChildEl); + } + } + loadedMaterial = new MeshPhongMaterial({ + flatShading: true, + color: new Color(color.r, color.g, color.b), + name: matName + }); + if (color.a !== 1) { + loadedMaterial.transparent = true; + loadedMaterial.opacity = color.a; + } + return { id: matId, material: loadedMaterial }; + } + function loadColor(node) { + const color = { r: 1, g: 1, b: 1, a: 1 }; + for (let i2 = 0; i2 < node.childNodes.length; i2++) { + const matColor = node.childNodes[i2]; + if (matColor.nodeName === "r") { + color.r = matColor.textContent; + } else if (matColor.nodeName === "g") { + color.g = matColor.textContent; + } else if (matColor.nodeName === "b") { + color.b = matColor.textContent; + } else if (matColor.nodeName === "a") { + color.a = matColor.textContent; + } + } + return color; + } + function loadMeshVolume(node) { + const volume = { name: "", triangles: [], materialid: null }; + let currVolumeNode = node.firstElementChild; + if (node.attributes.materialid !== void 0) { + volume.materialId = node.attributes.materialid.nodeValue; + } + while (currVolumeNode) { + if (currVolumeNode.nodeName === "metadata") { + if (currVolumeNode.attributes.type !== void 0) { + if (currVolumeNode.attributes.type.value === "name") { + volume.name = currVolumeNode.textContent; + } + } + } else if (currVolumeNode.nodeName === "triangle") { + const v12 = currVolumeNode.getElementsByTagName("v1")[0].textContent; + const v2 = currVolumeNode.getElementsByTagName("v2")[0].textContent; + const v3 = currVolumeNode.getElementsByTagName("v3")[0].textContent; + volume.triangles.push(v12, v2, v3); + } + currVolumeNode = currVolumeNode.nextElementSibling; + } + return volume; + } + function loadMeshVertices(node) { + const vertArray = []; + const normalArray = []; + let currVerticesNode = node.firstElementChild; + while (currVerticesNode) { + if (currVerticesNode.nodeName === "vertex") { + let vNode = currVerticesNode.firstElementChild; + while (vNode) { + if (vNode.nodeName === "coordinates") { + const x2 = vNode.getElementsByTagName("x")[0].textContent; + const y2 = vNode.getElementsByTagName("y")[0].textContent; + const z = vNode.getElementsByTagName("z")[0].textContent; + vertArray.push(x2, y2, z); + } else if (vNode.nodeName === "normal") { + const nx = vNode.getElementsByTagName("nx")[0].textContent; + const ny = vNode.getElementsByTagName("ny")[0].textContent; + const nz = vNode.getElementsByTagName("nz")[0].textContent; + normalArray.push(nx, ny, nz); + } + vNode = vNode.nextElementSibling; + } + } + currVerticesNode = currVerticesNode.nextElementSibling; + } + return { "vertices": vertArray, "normals": normalArray }; + } + function loadObject(node) { + const objId = node.attributes.id.textContent; + const loadedObject = { name: "amfobject", meshes: [] }; + let currColor = null; + let currObjNode = node.firstElementChild; + while (currObjNode) { + if (currObjNode.nodeName === "metadata") { + if (currObjNode.attributes.type !== void 0) { + if (currObjNode.attributes.type.value === "name") { + loadedObject.name = currObjNode.textContent; + } + } + } else if (currObjNode.nodeName === "color") { + currColor = loadColor(currObjNode); + } else if (currObjNode.nodeName === "mesh") { + let currMeshNode = currObjNode.firstElementChild; + const mesh = { vertices: [], normals: [], volumes: [], color: currColor }; + while (currMeshNode) { + if (currMeshNode.nodeName === "vertices") { + const loadedVertices = loadMeshVertices(currMeshNode); + mesh.normals = mesh.normals.concat(loadedVertices.normals); + mesh.vertices = mesh.vertices.concat(loadedVertices.vertices); + } else if (currMeshNode.nodeName === "volume") { + mesh.volumes.push(loadMeshVolume(currMeshNode)); + } + currMeshNode = currMeshNode.nextElementSibling; + } + loadedObject.meshes.push(mesh); + } + currObjNode = currObjNode.nextElementSibling; + } + return { "id": objId, "obj": loadedObject }; + } + const xmlData = loadDocument(data2); + let amfName = ""; + let amfAuthor = ""; + const amfScale = loadDocumentScale(xmlData); + const amfMaterials = {}; + const amfObjects = {}; + const childNodes = xmlData.documentElement.childNodes; + let i, j; + for (i = 0; i < childNodes.length; i++) { + const child = childNodes[i]; + if (child.nodeName === "metadata") { + if (child.attributes.type !== void 0) { + if (child.attributes.type.value === "name") { + amfName = child.textContent; + } else if (child.attributes.type.value === "author") { + amfAuthor = child.textContent; + } + } + } else if (child.nodeName === "material") { + const loadedMaterial = loadMaterials(child); + amfMaterials[loadedMaterial.id] = loadedMaterial.material; + } else if (child.nodeName === "object") { + const loadedObject = loadObject(child); + amfObjects[loadedObject.id] = loadedObject.obj; + } + } + const sceneObject = new Group(); + const defaultMaterial = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 11184895, + flatShading: true + }); + sceneObject.name = amfName; + sceneObject.userData.author = amfAuthor; + sceneObject.userData.loader = "AMF"; + for (const id in amfObjects) { + const part = amfObjects[id]; + const meshes = part.meshes; + const newObject = new Group(); + newObject.name = part.name || ""; + for (i = 0; i < meshes.length; i++) { + let objDefaultMaterial = defaultMaterial; + const mesh = meshes[i]; + const vertices = new Float32BufferAttribute(mesh.vertices, 3); + let normals = null; + if (mesh.normals.length) { + normals = new Float32BufferAttribute(mesh.normals, 3); + } + if (mesh.color) { + const color = mesh.color; + objDefaultMaterial = defaultMaterial.clone(); + objDefaultMaterial.color = new Color(color.r, color.g, color.b); + if (color.a !== 1) { + objDefaultMaterial.transparent = true; + objDefaultMaterial.opacity = color.a; + } + } + const volumes = mesh.volumes; + for (j = 0; j < volumes.length; j++) { + const volume = volumes[j]; + const newGeometry = new BufferGeometry(); + let material = objDefaultMaterial; + newGeometry.setIndex(volume.triangles); + newGeometry.setAttribute("position", vertices.clone()); + if (normals) { + newGeometry.setAttribute("normal", normals.clone()); + } + if (amfMaterials[volume.materialId] !== void 0) { + material = amfMaterials[volume.materialId]; + } + newGeometry.scale(amfScale, amfScale, amfScale); + newObject.add(new Mesh(newGeometry, material.clone())); + } + } + sceneObject.add(newObject); + } + return sceneObject; + } +}; + +// node_modules/three/examples/jsm/loaders/BVHLoader.js +var BVHLoader = class extends Loader { + constructor(manager) { + super(manager); + this.animateBonePositions = true; + this.animateBoneRotations = true; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2) { + function readBvh(lines2) { + if (nextLine(lines2) !== "HIERARCHY") { + console.error("THREE.BVHLoader: HIERARCHY expected."); + } + const list = []; + const root = readNode(lines2, nextLine(lines2), list); + if (nextLine(lines2) !== "MOTION") { + console.error("THREE.BVHLoader: MOTION expected."); + } + let tokens = nextLine(lines2).split(/[\s]+/); + const numFrames = parseInt(tokens[1]); + if (isNaN(numFrames)) { + console.error("THREE.BVHLoader: Failed to read number of frames."); + } + tokens = nextLine(lines2).split(/[\s]+/); + const frameTime = parseFloat(tokens[2]); + if (isNaN(frameTime)) { + console.error("THREE.BVHLoader: Failed to read frame time."); + } + for (let i = 0; i < numFrames; i++) { + tokens = nextLine(lines2).split(/[\s]+/); + readFrameData(tokens, i * frameTime, root); + } + return list; + } + function readFrameData(data2, frameTime, bone) { + if (bone.type === "ENDSITE") return; + const keyframe = { + time: frameTime, + position: new Vector3(), + rotation: new Quaternion() + }; + bone.frames.push(keyframe); + const quat = new Quaternion(); + const vx = new Vector3(1, 0, 0); + const vy = new Vector3(0, 1, 0); + const vz = new Vector3(0, 0, 1); + for (let i = 0; i < bone.channels.length; i++) { + switch (bone.channels[i]) { + case "Xposition": + keyframe.position.x = parseFloat(data2.shift().trim()); + break; + case "Yposition": + keyframe.position.y = parseFloat(data2.shift().trim()); + break; + case "Zposition": + keyframe.position.z = parseFloat(data2.shift().trim()); + break; + case "Xrotation": + quat.setFromAxisAngle(vx, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + case "Yrotation": + quat.setFromAxisAngle(vy, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + case "Zrotation": + quat.setFromAxisAngle(vz, parseFloat(data2.shift().trim()) * Math.PI / 180); + keyframe.rotation.multiply(quat); + break; + default: + console.warn("THREE.BVHLoader: Invalid channel type."); + } + } + for (let i = 0; i < bone.children.length; i++) { + readFrameData(data2, frameTime, bone.children[i]); + } + } + function readNode(lines2, firstline, list) { + const node = { name: "", type: "", frames: [] }; + list.push(node); + let tokens = firstline.split(/[\s]+/); + if (tokens[0].toUpperCase() === "END" && tokens[1].toUpperCase() === "SITE") { + node.type = "ENDSITE"; + node.name = "ENDSITE"; + } else { + node.name = tokens[1]; + node.type = tokens[0].toUpperCase(); + } + if (nextLine(lines2) !== "{") { + console.error("THREE.BVHLoader: Expected opening { after type & name"); + } + tokens = nextLine(lines2).split(/[\s]+/); + if (tokens[0] !== "OFFSET") { + console.error("THREE.BVHLoader: Expected OFFSET but got: " + tokens[0]); + } + if (tokens.length !== 4) { + console.error("THREE.BVHLoader: Invalid number of values for OFFSET."); + } + const offset = new Vector3( + parseFloat(tokens[1]), + parseFloat(tokens[2]), + parseFloat(tokens[3]) + ); + if (isNaN(offset.x) || isNaN(offset.y) || isNaN(offset.z)) { + console.error("THREE.BVHLoader: Invalid values of OFFSET."); + } + node.offset = offset; + if (node.type !== "ENDSITE") { + tokens = nextLine(lines2).split(/[\s]+/); + if (tokens[0] !== "CHANNELS") { + console.error("THREE.BVHLoader: Expected CHANNELS definition."); + } + const numChannels = parseInt(tokens[1]); + node.channels = tokens.splice(2, numChannels); + node.children = []; + } + while (true) { + const line2 = nextLine(lines2); + if (line2 === "}") { + return node; + } else { + node.children.push(readNode(lines2, line2, list)); + } + } + } + function toTHREEBone(source, list) { + const bone = new Bone(); + list.push(bone); + bone.position.add(source.offset); + bone.name = source.name; + if (source.type !== "ENDSITE") { + for (let i = 0; i < source.children.length; i++) { + bone.add(toTHREEBone(source.children[i], list)); + } + } + return bone; + } + function toTHREEAnimation(bones2) { + const tracks = []; + for (let i = 0; i < bones2.length; i++) { + const bone = bones2[i]; + if (bone.type === "ENDSITE") + continue; + const times = []; + const positions = []; + const rotations = []; + for (let j = 0; j < bone.frames.length; j++) { + const frame = bone.frames[j]; + times.push(frame.time); + positions.push(frame.position.x + bone.offset.x); + positions.push(frame.position.y + bone.offset.y); + positions.push(frame.position.z + bone.offset.z); + rotations.push(frame.rotation.x); + rotations.push(frame.rotation.y); + rotations.push(frame.rotation.z); + rotations.push(frame.rotation.w); + } + if (scope.animateBonePositions) { + tracks.push(new VectorKeyframeTrack(bone.name + ".position", times, positions)); + } + if (scope.animateBoneRotations) { + tracks.push(new QuaternionKeyframeTrack(bone.name + ".quaternion", times, rotations)); + } + } + return new AnimationClip("animation", -1, tracks); + } + function nextLine(lines2) { + let line2; + while ((line2 = lines2.shift().trim()).length === 0) { + } + return line2; + } + const scope = this; + const lines = text2.split(/[\r\n]+/g); + const bones = readBvh(lines); + const threeBones = []; + toTHREEBone(bones[0], threeBones); + const threeClip = toTHREEAnimation(bones); + return { + skeleton: new Skeleton(threeBones), + clip: threeClip + }; + } +}; + +// node_modules/three/examples/jsm/loaders/TGALoader.js +var TGALoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer) { + function tgaCheckHeader(header2) { + switch (header2.image_type) { + case TGA_TYPE_INDEXED: + case TGA_TYPE_RLE_INDEXED: + if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) { + throw new Error("THREE.TGALoader: Invalid type colormap data for indexed type."); + } + break; + case TGA_TYPE_RGB: + case TGA_TYPE_GREY: + case TGA_TYPE_RLE_RGB: + case TGA_TYPE_RLE_GREY: + if (header2.colormap_type) { + throw new Error("THREE.TGALoader: Invalid type colormap data for colormap type."); + } + break; + case TGA_TYPE_NO_DATA: + throw new Error("THREE.TGALoader: No data."); + default: + throw new Error("THREE.TGALoader: Invalid type " + header2.image_type); + } + if (header2.width <= 0 || header2.height <= 0) { + throw new Error("THREE.TGALoader: Invalid image size."); + } + if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) { + throw new Error("THREE.TGALoader: Invalid pixel size " + header2.pixel_size); + } + } + function tgaParse(use_rle2, use_pal2, header2, offset2, data2) { + let pixel_data, palettes; + const pixel_size = header2.pixel_size >> 3; + const pixel_total = header2.width * header2.height * pixel_size; + if (use_pal2) { + palettes = data2.subarray(offset2, offset2 += header2.colormap_length * (header2.colormap_size >> 3)); + } + if (use_rle2) { + pixel_data = new Uint8Array(pixel_total); + let c2, count, i; + let shift = 0; + const pixels = new Uint8Array(pixel_size); + while (shift < pixel_total) { + c2 = data2[offset2++]; + count = (c2 & 127) + 1; + if (c2 & 128) { + for (i = 0; i < pixel_size; ++i) { + pixels[i] = data2[offset2++]; + } + for (i = 0; i < count; ++i) { + pixel_data.set(pixels, shift + i * pixel_size); + } + shift += pixel_size * count; + } else { + count *= pixel_size; + for (i = 0; i < count; ++i) { + pixel_data[shift + i] = data2[offset2++]; + } + shift += count; + } + } + } else { + pixel_data = data2.subarray( + offset2, + offset2 += use_pal2 ? header2.width * header2.height : pixel_total + ); + } + return { + pixel_data, + palettes + }; + } + function tgaGetImageData8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes) { + const colormap = palettes; + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i++) { + color = image[i]; + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + imageData2[(x2 + width2 * y2) * 4 + 2] = colormap[color * 3 + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = colormap[color * 3 + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = colormap[color * 3 + 2]; + } + } + return imageData2; + } + function tgaGetImageData16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 2) { + color = image[i + 0] + (image[i + 1] << 8); + imageData2[(x2 + width2 * y2) * 4 + 0] = (color & 31744) >> 7; + imageData2[(x2 + width2 * y2) * 4 + 1] = (color & 992) >> 2; + imageData2[(x2 + width2 * y2) * 4 + 2] = (color & 31) << 3; + imageData2[(x2 + width2 * y2) * 4 + 3] = color & 32768 ? 0 : 255; + } + } + return imageData2; + } + function tgaGetImageData24bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 3) { + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 2]; + } + } + return imageData2; + } + function tgaGetImageData32bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 4) { + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 1]; + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 2]; + imageData2[(x2 + width2 * y2) * 4 + 3] = image[i + 3]; + } + } + return imageData2; + } + function tgaGetImageDataGrey8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let color, i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i++) { + color = image[i]; + imageData2[(x2 + width2 * y2) * 4 + 0] = color; + imageData2[(x2 + width2 * y2) * 4 + 1] = color; + imageData2[(x2 + width2 * y2) * 4 + 2] = color; + imageData2[(x2 + width2 * y2) * 4 + 3] = 255; + } + } + return imageData2; + } + function tgaGetImageDataGrey16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { + let i = 0, x2, y2; + const width2 = header.width; + for (y2 = y_start; y2 !== y_end; y2 += y_step) { + for (x2 = x_start; x2 !== x_end; x2 += x_step, i += 2) { + imageData2[(x2 + width2 * y2) * 4 + 0] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 1] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 2] = image[i + 0]; + imageData2[(x2 + width2 * y2) * 4 + 3] = image[i + 1]; + } + } + return imageData2; + } + function getTgaRGBA(data2, width2, height2, image, palette) { + let x_start, y_start, x_step, y_step, x_end, y_end; + switch ((header.flags & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT) { + default: + case TGA_ORIGIN_UL: + x_start = 0; + x_step = 1; + x_end = width2; + y_start = 0; + y_step = 1; + y_end = height2; + break; + case TGA_ORIGIN_BL: + x_start = 0; + x_step = 1; + x_end = width2; + y_start = height2 - 1; + y_step = -1; + y_end = -1; + break; + case TGA_ORIGIN_UR: + x_start = width2 - 1; + x_step = -1; + x_end = -1; + y_start = 0; + y_step = 1; + y_end = height2; + break; + case TGA_ORIGIN_BR: + x_start = width2 - 1; + x_step = -1; + x_end = -1; + y_start = height2 - 1; + y_step = -1; + y_end = -1; + break; + } + if (use_grey) { + switch (header.pixel_size) { + case 8: + tgaGetImageDataGrey8bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 16: + tgaGetImageDataGrey16bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + default: + throw new Error("THREE.TGALoader: Format not supported."); + break; + } + } else { + switch (header.pixel_size) { + case 8: + tgaGetImageData8bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image, palette); + break; + case 16: + tgaGetImageData16bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 24: + tgaGetImageData24bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + case 32: + tgaGetImageData32bits(data2, y_start, y_step, y_end, x_start, x_step, x_end, image); + break; + default: + throw new Error("THREE.TGALoader: Format not supported."); + break; + } + } + return data2; + } + const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3; + if (buffer.length < 19) throw new Error("THREE.TGALoader: Not enough data to contain header."); + let offset = 0; + const content2 = new Uint8Array(buffer), header = { + id_length: content2[offset++], + colormap_type: content2[offset++], + image_type: content2[offset++], + colormap_index: content2[offset++] | content2[offset++] << 8, + colormap_length: content2[offset++] | content2[offset++] << 8, + colormap_size: content2[offset++], + origin: [ + content2[offset++] | content2[offset++] << 8, + content2[offset++] | content2[offset++] << 8 + ], + width: content2[offset++] | content2[offset++] << 8, + height: content2[offset++] | content2[offset++] << 8, + pixel_size: content2[offset++], + flags: content2[offset++] + }; + tgaCheckHeader(header); + if (header.id_length + offset > buffer.length) { + throw new Error("THREE.TGALoader: No data."); + } + offset += header.id_length; + let use_rle = false, use_pal = false, use_grey = false; + switch (header.image_type) { + case TGA_TYPE_RLE_INDEXED: + use_rle = true; + use_pal = true; + break; + case TGA_TYPE_INDEXED: + use_pal = true; + break; + case TGA_TYPE_RLE_RGB: + use_rle = true; + break; + case TGA_TYPE_RGB: + break; + case TGA_TYPE_RLE_GREY: + use_rle = true; + use_grey = true; + break; + case TGA_TYPE_GREY: + use_grey = true; + break; + } + const imageData = new Uint8Array(header.width * header.height * 4); + const result = tgaParse(use_rle, use_pal, header, offset, content2); + getTgaRGBA(imageData, header.width, header.height, result.pixel_data, result.palettes); + return { + data: imageData, + width: header.width, + height: header.height, + flipY: true, + generateMipmaps: true, + minFilter: LinearMipmapLinearFilter + }; + } +}; + +// node_modules/three/examples/jsm/loaders/ColladaLoader.js +var ColladaLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2, path) { + function getElementsByTagName(xml2, name2) { + const array = []; + const childNodes = xml2.childNodes; + for (let i = 0, l2 = childNodes.length; i < l2; i++) { + const child = childNodes[i]; + if (child.nodeName === name2) { + array.push(child); + } + } + return array; + } + function parseStrings(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parts[i]; + } + return array; + } + function parseFloats(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parseFloat(parts[i]); + } + return array; + } + function parseInts(text3) { + if (text3.length === 0) return []; + const parts = text3.trim().split(/\s+/); + const array = new Array(parts.length); + for (let i = 0, l2 = parts.length; i < l2; i++) { + array[i] = parseInt(parts[i]); + } + return array; + } + function parseId(text3) { + return text3.substring(1); + } + function generateId() { + return "three_default_" + count++; + } + function isEmpty2(object) { + return Object.keys(object).length === 0; + } + function parseAsset(xml2) { + return { + unit: parseAssetUnit(getElementsByTagName(xml2, "unit")[0]), + upAxis: parseAssetUpAxis(getElementsByTagName(xml2, "up_axis")[0]) + }; + } + function parseAssetUnit(xml2) { + if (xml2 !== void 0 && xml2.hasAttribute("meter") === true) { + return parseFloat(xml2.getAttribute("meter")); + } else { + return 1; + } + } + function parseAssetUpAxis(xml2) { + return xml2 !== void 0 ? xml2.textContent : "Y_UP"; + } + function parseLibrary(xml2, libraryName, nodeName, parser) { + const library2 = getElementsByTagName(xml2, libraryName)[0]; + if (library2 !== void 0) { + const elements = getElementsByTagName(library2, nodeName); + for (let i = 0; i < elements.length; i++) { + parser(elements[i]); + } + } + } + function buildLibrary(data2, builder) { + for (const name2 in data2) { + const object = data2[name2]; + object.build = builder(data2[name2]); + } + } + function getBuild(data2, builder) { + if (data2.build !== void 0) return data2.build; + data2.build = builder(data2); + return data2.build; + } + function parseAnimation(xml2) { + const data2 = { + sources: {}, + samplers: {}, + channels: {} + }; + let hasChildren = false; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let id; + switch (child.nodeName) { + case "source": + id = child.getAttribute("id"); + data2.sources[id] = parseSource(child); + break; + case "sampler": + id = child.getAttribute("id"); + data2.samplers[id] = parseAnimationSampler(child); + break; + case "channel": + id = child.getAttribute("target"); + data2.channels[id] = parseAnimationChannel(child); + break; + case "animation": + parseAnimation(child); + hasChildren = true; + break; + default: + console.log(child); + } + } + if (hasChildren === false) { + library.animations[xml2.getAttribute("id") || MathUtils.generateUUID()] = data2; + } + } + function parseAnimationSampler(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const id = parseId(child.getAttribute("source")); + const semantic = child.getAttribute("semantic"); + data2.inputs[semantic] = id; + break; + } + } + return data2; + } + function parseAnimationChannel(xml2) { + const data2 = {}; + const target = xml2.getAttribute("target"); + let parts = target.split("/"); + const id = parts.shift(); + let sid = parts.shift(); + const arraySyntax = sid.indexOf("(") !== -1; + const memberSyntax = sid.indexOf(".") !== -1; + if (memberSyntax) { + parts = sid.split("."); + sid = parts.shift(); + data2.member = parts.shift(); + } else if (arraySyntax) { + const indices = sid.split("("); + sid = indices.shift(); + for (let i = 0; i < indices.length; i++) { + indices[i] = parseInt(indices[i].replace(/\)/, "")); + } + data2.indices = indices; + } + data2.id = id; + data2.sid = sid; + data2.arraySyntax = arraySyntax; + data2.memberSyntax = memberSyntax; + data2.sampler = parseId(xml2.getAttribute("source")); + return data2; + } + function buildAnimation(data2) { + const tracks = []; + const channels = data2.channels; + const samplers = data2.samplers; + const sources = data2.sources; + for (const target in channels) { + if (channels.hasOwnProperty(target)) { + const channel = channels[target]; + const sampler = samplers[channel.sampler]; + const inputId = sampler.inputs.INPUT; + const outputId = sampler.inputs.OUTPUT; + const inputSource = sources[inputId]; + const outputSource = sources[outputId]; + const animation = buildAnimationChannel(channel, inputSource, outputSource); + createKeyframeTracks(animation, tracks); + } + } + return tracks; + } + function getAnimation(id) { + return getBuild(library.animations[id], buildAnimation); + } + function buildAnimationChannel(channel, inputSource, outputSource) { + const node = library.nodes[channel.id]; + const object3D = getNode(node.id); + const transform2 = node.transforms[channel.sid]; + const defaultMatrix = node.matrix.clone().transpose(); + let time2, stride; + let i, il, j, jl; + const data2 = {}; + switch (transform2) { + case "matrix": + for (i = 0, il = inputSource.array.length; i < il; i++) { + time2 = inputSource.array[i]; + stride = i * outputSource.stride; + if (data2[time2] === void 0) data2[time2] = {}; + if (channel.arraySyntax === true) { + const value2 = outputSource.array[stride]; + const index2 = channel.indices[0] + 4 * channel.indices[1]; + data2[time2][index2] = value2; + } else { + for (j = 0, jl = outputSource.stride; j < jl; j++) { + data2[time2][j] = outputSource.array[stride + j]; + } + } + } + break; + case "translate": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + case "rotate": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + case "scale": + console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform2); + break; + } + const keyframes = prepareAnimationData(data2, defaultMatrix); + const animation = { + name: object3D.uuid, + keyframes + }; + return animation; + } + function prepareAnimationData(data2, defaultMatrix) { + const keyframes = []; + for (const time2 in data2) { + keyframes.push({ time: parseFloat(time2), value: data2[time2] }); + } + keyframes.sort(ascending); + for (let i = 0; i < 16; i++) { + transformAnimationData(keyframes, i, defaultMatrix.elements[i]); + } + return keyframes; + function ascending(a2, b3) { + return a2.time - b3.time; + } + } + const position2 = new Vector3(); + const scale2 = new Vector3(); + const quaternion = new Quaternion(); + function createKeyframeTracks(animation, tracks) { + const keyframes = animation.keyframes; + const name2 = animation.name; + const times = []; + const positionData = []; + const quaternionData = []; + const scaleData = []; + for (let i = 0, l2 = keyframes.length; i < l2; i++) { + const keyframe = keyframes[i]; + const time2 = keyframe.time; + const value2 = keyframe.value; + matrix3.fromArray(value2).transpose(); + matrix3.decompose(position2, quaternion, scale2); + times.push(time2); + positionData.push(position2.x, position2.y, position2.z); + quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w); + scaleData.push(scale2.x, scale2.y, scale2.z); + } + if (positionData.length > 0) tracks.push(new VectorKeyframeTrack(name2 + ".position", times, positionData)); + if (quaternionData.length > 0) tracks.push(new QuaternionKeyframeTrack(name2 + ".quaternion", times, quaternionData)); + if (scaleData.length > 0) tracks.push(new VectorKeyframeTrack(name2 + ".scale", times, scaleData)); + return tracks; + } + function transformAnimationData(keyframes, property2, defaultValue) { + let keyframe; + let empty = true; + let i, l2; + for (i = 0, l2 = keyframes.length; i < l2; i++) { + keyframe = keyframes[i]; + if (keyframe.value[property2] === void 0) { + keyframe.value[property2] = null; + } else { + empty = false; + } + } + if (empty === true) { + for (i = 0, l2 = keyframes.length; i < l2; i++) { + keyframe = keyframes[i]; + keyframe.value[property2] = defaultValue; + } + } else { + createMissingKeyframes(keyframes, property2); + } + } + function createMissingKeyframes(keyframes, property2) { + let prev, next; + for (let i = 0, l2 = keyframes.length; i < l2; i++) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] === null) { + prev = getPrev(keyframes, i, property2); + next = getNext(keyframes, i, property2); + if (prev === null) { + keyframe.value[property2] = next.value[property2]; + continue; + } + if (next === null) { + keyframe.value[property2] = prev.value[property2]; + continue; + } + interpolate(keyframe, prev, next, property2); + } + } + } + function getPrev(keyframes, i, property2) { + while (i >= 0) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] !== null) return keyframe; + i--; + } + return null; + } + function getNext(keyframes, i, property2) { + while (i < keyframes.length) { + const keyframe = keyframes[i]; + if (keyframe.value[property2] !== null) return keyframe; + i++; + } + return null; + } + function interpolate(key2, prev, next, property2) { + if (next.time - prev.time === 0) { + key2.value[property2] = prev.value[property2]; + return; + } + key2.value[property2] = (key2.time - prev.time) * (next.value[property2] - prev.value[property2]) / (next.time - prev.time) + prev.value[property2]; + } + function parseAnimationClip(xml2) { + const data2 = { + name: xml2.getAttribute("id") || "default", + start: parseFloat(xml2.getAttribute("start") || 0), + end: parseFloat(xml2.getAttribute("end") || 0), + animations: [] + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "instance_animation": + data2.animations.push(parseId(child.getAttribute("url"))); + break; + } + } + library.clips[xml2.getAttribute("id")] = data2; + } + function buildAnimationClip(data2) { + const tracks = []; + const name2 = data2.name; + const duration = data2.end - data2.start || -1; + const animations2 = data2.animations; + for (let i = 0, il = animations2.length; i < il; i++) { + const animationTracks = getAnimation(animations2[i]); + for (let j = 0, jl = animationTracks.length; j < jl; j++) { + tracks.push(animationTracks[j]); + } + } + return new AnimationClip(name2, duration, tracks); + } + function getAnimationClip(id) { + return getBuild(library.clips[id], buildAnimationClip); + } + function parseController(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "skin": + data2.id = parseId(child.getAttribute("source")); + data2.skin = parseSkin(child); + break; + case "morph": + data2.id = parseId(child.getAttribute("source")); + console.warn("THREE.ColladaLoader: Morph target animation not supported yet."); + break; + } + } + library.controllers[xml2.getAttribute("id")] = data2; + } + function parseSkin(xml2) { + const data2 = { + sources: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "bind_shape_matrix": + data2.bindShapeMatrix = parseFloats(child.textContent); + break; + case "source": + const id = child.getAttribute("id"); + data2.sources[id] = parseSource(child); + break; + case "joints": + data2.joints = parseJoints(child); + break; + case "vertex_weights": + data2.vertexWeights = parseVertexWeights(child); + break; + } + } + return data2; + } + function parseJoints(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const semantic = child.getAttribute("semantic"); + const id = parseId(child.getAttribute("source")); + data2.inputs[semantic] = id; + break; + } + } + return data2; + } + function parseVertexWeights(xml2) { + const data2 = { + inputs: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const semantic = child.getAttribute("semantic"); + const id = parseId(child.getAttribute("source")); + const offset = parseInt(child.getAttribute("offset")); + data2.inputs[semantic] = { id, offset }; + break; + case "vcount": + data2.vcount = parseInts(child.textContent); + break; + case "v": + data2.v = parseInts(child.textContent); + break; + } + } + return data2; + } + function buildController(data2) { + const build = { + id: data2.id + }; + const geometry = library.geometries[build.id]; + if (data2.skin !== void 0) { + build.skin = buildSkin(data2.skin); + geometry.sources.skinIndices = build.skin.indices; + geometry.sources.skinWeights = build.skin.weights; + } + return build; + } + function buildSkin(data2) { + const BONE_LIMIT = 4; + const build = { + joints: [], + // this must be an array to preserve the joint order + indices: { + array: [], + stride: BONE_LIMIT + }, + weights: { + array: [], + stride: BONE_LIMIT + } + }; + const sources = data2.sources; + const vertexWeights = data2.vertexWeights; + const vcount = vertexWeights.vcount; + const v = vertexWeights.v; + const jointOffset = vertexWeights.inputs.JOINT.offset; + const weightOffset = vertexWeights.inputs.WEIGHT.offset; + const jointSource = data2.sources[data2.joints.inputs.JOINT]; + const inverseSource = data2.sources[data2.joints.inputs.INV_BIND_MATRIX]; + const weights = sources[vertexWeights.inputs.WEIGHT.id].array; + let stride = 0; + let i, j, l2; + for (i = 0, l2 = vcount.length; i < l2; i++) { + const jointCount = vcount[i]; + const vertexSkinData = []; + for (j = 0; j < jointCount; j++) { + const skinIndex = v[stride + jointOffset]; + const weightId = v[stride + weightOffset]; + const skinWeight = weights[weightId]; + vertexSkinData.push({ index: skinIndex, weight: skinWeight }); + stride += 2; + } + vertexSkinData.sort(descending); + for (j = 0; j < BONE_LIMIT; j++) { + const d = vertexSkinData[j]; + if (d !== void 0) { + build.indices.array.push(d.index); + build.weights.array.push(d.weight); + } else { + build.indices.array.push(0); + build.weights.array.push(0); + } + } + } + if (data2.bindShapeMatrix) { + build.bindMatrix = new Matrix4().fromArray(data2.bindShapeMatrix).transpose(); + } else { + build.bindMatrix = new Matrix4().identity(); + } + for (i = 0, l2 = jointSource.array.length; i < l2; i++) { + const name2 = jointSource.array[i]; + const boneInverse = new Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose(); + build.joints.push({ name: name2, boneInverse }); + } + return build; + function descending(a2, b3) { + return b3.weight - a2.weight; + } + } + function getController(id) { + return getBuild(library.controllers[id], buildController); + } + function parseImage(xml2) { + const data2 = { + init_from: getElementsByTagName(xml2, "init_from")[0].textContent + }; + library.images[xml2.getAttribute("id")] = data2; + } + function buildImage(data2) { + if (data2.build !== void 0) return data2.build; + return data2.init_from; + } + function getImage(id) { + const data2 = library.images[id]; + if (data2 !== void 0) { + return getBuild(data2, buildImage); + } + console.warn("THREE.ColladaLoader: Couldn't find image with ID:", id); + return null; + } + function parseEffect(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "profile_COMMON": + data2.profile = parseEffectProfileCOMMON(child); + break; + } + } + library.effects[xml2.getAttribute("id")] = data2; + } + function parseEffectProfileCOMMON(xml2) { + const data2 = { + surfaces: {}, + samplers: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "newparam": + parseEffectNewparam(child, data2); + break; + case "technique": + data2.technique = parseEffectTechnique(child); + break; + case "extra": + data2.extra = parseEffectExtra(child); + break; + } + } + return data2; + } + function parseEffectNewparam(xml2, data2) { + const sid = xml2.getAttribute("sid"); + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "surface": + data2.surfaces[sid] = parseEffectSurface(child); + break; + case "sampler2D": + data2.samplers[sid] = parseEffectSampler(child); + break; + } + } + } + function parseEffectSurface(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "init_from": + data2.init_from = child.textContent; + break; + } + } + return data2; + } + function parseEffectSampler(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "source": + data2.source = child.textContent; + break; + } + } + return data2; + } + function parseEffectTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "constant": + case "lambert": + case "blinn": + case "phong": + data2.type = child.nodeName; + data2.parameters = parseEffectParameters(child); + break; + case "extra": + data2.extra = parseEffectExtra(child); + break; + } + } + return data2; + } + function parseEffectParameters(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "emission": + case "diffuse": + case "specular": + case "bump": + case "ambient": + case "shininess": + case "transparency": + data2[child.nodeName] = parseEffectParameter(child); + break; + case "transparent": + data2[child.nodeName] = { + opaque: child.hasAttribute("opaque") ? child.getAttribute("opaque") : "A_ONE", + data: parseEffectParameter(child) + }; + break; + } + } + return data2; + } + function parseEffectParameter(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "color": + data2[child.nodeName] = parseFloats(child.textContent); + break; + case "float": + data2[child.nodeName] = parseFloat(child.textContent); + break; + case "texture": + data2[child.nodeName] = { id: child.getAttribute("texture"), extra: parseEffectParameterTexture(child) }; + break; + } + } + return data2; + } + function parseEffectParameterTexture(xml2) { + const data2 = { + technique: {} + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "extra": + parseEffectParameterTextureExtra(child, data2); + break; + } + } + return data2; + } + function parseEffectParameterTextureExtra(xml2, data2) { + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique": + parseEffectParameterTextureExtraTechnique(child, data2); + break; + } + } + } + function parseEffectParameterTextureExtraTechnique(xml2, data2) { + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "repeatU": + case "repeatV": + case "offsetU": + case "offsetV": + data2.technique[child.nodeName] = parseFloat(child.textContent); + break; + case "wrapU": + case "wrapV": + if (child.textContent.toUpperCase() === "TRUE") { + data2.technique[child.nodeName] = 1; + } else if (child.textContent.toUpperCase() === "FALSE") { + data2.technique[child.nodeName] = 0; + } else { + data2.technique[child.nodeName] = parseInt(child.textContent); + } + break; + case "bump": + data2[child.nodeName] = parseEffectExtraTechniqueBump(child); + break; + } + } + } + function parseEffectExtra(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique": + data2.technique = parseEffectExtraTechnique(child); + break; + } + } + return data2; + } + function parseEffectExtraTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "double_sided": + data2[child.nodeName] = parseInt(child.textContent); + break; + case "bump": + data2[child.nodeName] = parseEffectExtraTechniqueBump(child); + break; + } + } + return data2; + } + function parseEffectExtraTechniqueBump(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "texture": + data2[child.nodeName] = { id: child.getAttribute("texture"), texcoord: child.getAttribute("texcoord"), extra: parseEffectParameterTexture(child) }; + break; + } + } + return data2; + } + function buildEffect(data2) { + return data2; + } + function getEffect(id) { + return getBuild(library.effects[id], buildEffect); + } + function parseMaterial(xml2) { + const data2 = { + name: xml2.getAttribute("name") + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "instance_effect": + data2.url = parseId(child.getAttribute("url")); + break; + } + } + library.materials[xml2.getAttribute("id")] = data2; + } + function getTextureLoader(image) { + let loader; + let extension = image.slice((image.lastIndexOf(".") - 1 >>> 0) + 2); + extension = extension.toLowerCase(); + switch (extension) { + case "tga": + loader = tgaLoader; + break; + default: + loader = textureLoader; + } + return loader; + } + function buildMaterial2(data2) { + const effect2 = getEffect(data2.url); + const technique = effect2.profile.technique; + let material; + switch (technique.type) { + case "phong": + case "blinn": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + material = new MeshBasicMaterial(); + break; + } + material.name = data2.name || ""; + function getTexture(textureObject, colorSpace = null) { + const sampler = effect2.profile.samplers[textureObject.id]; + let image = null; + if (sampler !== void 0) { + const surface = effect2.profile.surfaces[sampler.source]; + image = getImage(surface.init_from); + } else { + console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530)."); + image = getImage(textureObject.id); + } + if (image !== null) { + const loader = getTextureLoader(image); + if (loader !== void 0) { + const texture = loader.load(image); + const extra = textureObject.extra; + if (extra !== void 0 && extra.technique !== void 0 && isEmpty2(extra.technique) === false) { + const technique2 = extra.technique; + texture.wrapS = technique2.wrapU ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = technique2.wrapV ? RepeatWrapping : ClampToEdgeWrapping; + texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0); + texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1); + } else { + texture.wrapS = RepeatWrapping; + texture.wrapT = RepeatWrapping; + } + if (colorSpace !== null) { + texture.colorSpace = colorSpace; + } + return texture; + } else { + console.warn("THREE.ColladaLoader: Loader for texture %s not found.", image); + return null; + } + } else { + console.warn("THREE.ColladaLoader: Couldn't create texture with ID:", textureObject.id); + return null; + } + } + const parameters = technique.parameters; + for (const key2 in parameters) { + const parameter = parameters[key2]; + switch (key2) { + case "diffuse": + if (parameter.color) material.color.fromArray(parameter.color); + if (parameter.texture) material.map = getTexture(parameter.texture, SRGBColorSpace); + break; + case "specular": + if (parameter.color && material.specular) material.specular.fromArray(parameter.color); + if (parameter.texture) material.specularMap = getTexture(parameter.texture); + break; + case "bump": + if (parameter.texture) material.normalMap = getTexture(parameter.texture); + break; + case "ambient": + if (parameter.texture) material.lightMap = getTexture(parameter.texture, SRGBColorSpace); + break; + case "shininess": + if (parameter.float && material.shininess) material.shininess = parameter.float; + break; + case "emission": + if (parameter.color && material.emissive) material.emissive.fromArray(parameter.color); + if (parameter.texture) material.emissiveMap = getTexture(parameter.texture, SRGBColorSpace); + break; + } + } + material.color.convertSRGBToLinear(); + if (material.specular) material.specular.convertSRGBToLinear(); + if (material.emissive) material.emissive.convertSRGBToLinear(); + let transparent = parameters["transparent"]; + let transparency = parameters["transparency"]; + if (transparency === void 0 && transparent) { + transparency = { + float: 1 + }; + } + if (transparent === void 0 && transparency) { + transparent = { + opaque: "A_ONE", + data: { + color: [1, 1, 1, 1] + } + }; + } + if (transparent && transparency) { + if (transparent.data.texture) { + material.transparent = true; + } else { + const color = transparent.data.color; + switch (transparent.opaque) { + case "A_ONE": + material.opacity = color[3] * transparency.float; + break; + case "RGB_ZERO": + material.opacity = 1 - color[0] * transparency.float; + break; + case "A_ZERO": + material.opacity = 1 - color[3] * transparency.float; + break; + case "RGB_ONE": + material.opacity = color[0] * transparency.float; + break; + default: + console.warn('THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.', transparent.opaque); + } + if (material.opacity < 1) material.transparent = true; + } + } + if (technique.extra !== void 0 && technique.extra.technique !== void 0) { + const techniques = technique.extra.technique; + for (const k2 in techniques) { + const v = techniques[k2]; + switch (k2) { + case "double_sided": + material.side = v === 1 ? DoubleSide : FrontSide; + break; + case "bump": + material.normalMap = getTexture(v.texture); + material.normalScale = new Vector2(1, 1); + break; + } + } + } + return material; + } + function getMaterial2(id) { + return getBuild(library.materials[id], buildMaterial2); + } + function parseCamera(xml2) { + const data2 = { + name: xml2.getAttribute("name") + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "optics": + data2.optics = parseCameraOptics(child); + break; + } + } + library.cameras[xml2.getAttribute("id")] = data2; + } + function parseCameraOptics(xml2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "technique_common": + return parseCameraTechnique(child); + } + } + return {}; + } + function parseCameraTechnique(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "perspective": + case "orthographic": + data2.technique = child.nodeName; + data2.parameters = parseCameraParameters(child); + break; + } + } + return data2; + } + function parseCameraParameters(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "xfov": + case "yfov": + case "xmag": + case "ymag": + case "znear": + case "zfar": + case "aspect_ratio": + data2[child.nodeName] = parseFloat(child.textContent); + break; + } + } + return data2; + } + function buildCamera2(data2) { + let camera; + switch (data2.optics.technique) { + case "perspective": + camera = new PerspectiveCamera( + data2.optics.parameters.yfov, + data2.optics.parameters.aspect_ratio, + data2.optics.parameters.znear, + data2.optics.parameters.zfar + ); + break; + case "orthographic": + let ymag = data2.optics.parameters.ymag; + let xmag = data2.optics.parameters.xmag; + const aspectRatio = data2.optics.parameters.aspect_ratio; + xmag = xmag === void 0 ? ymag * aspectRatio : xmag; + ymag = ymag === void 0 ? xmag / aspectRatio : ymag; + xmag *= 0.5; + ymag *= 0.5; + camera = new OrthographicCamera( + -xmag, + xmag, + ymag, + -ymag, + // left, right, top, bottom + data2.optics.parameters.znear, + data2.optics.parameters.zfar + ); + break; + default: + camera = new PerspectiveCamera(); + break; + } + camera.name = data2.name || ""; + return camera; + } + function getCamera(id) { + const data2 = library.cameras[id]; + if (data2 !== void 0) { + return getBuild(data2, buildCamera2); + } + console.warn("THREE.ColladaLoader: Couldn't find camera with ID:", id); + return null; + } + function parseLight(xml2) { + let data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + data2 = parseLightTechnique(child); + break; + } + } + library.lights[xml2.getAttribute("id")] = data2; + } + function parseLightTechnique(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "directional": + case "point": + case "spot": + case "ambient": + data2.technique = child.nodeName; + data2.parameters = parseLightParameters(child); + } + } + return data2; + } + function parseLightParameters(xml2) { + const data2 = {}; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "color": + const array = parseFloats(child.textContent); + data2.color = new Color().fromArray(array).convertSRGBToLinear(); + break; + case "falloff_angle": + data2.falloffAngle = parseFloat(child.textContent); + break; + case "quadratic_attenuation": + const f = parseFloat(child.textContent); + data2.distance = f ? Math.sqrt(1 / f) : 0; + break; + } + } + return data2; + } + function buildLight(data2) { + let light; + switch (data2.technique) { + case "directional": + light = new DirectionalLight(); + break; + case "point": + light = new PointLight(); + break; + case "spot": + light = new SpotLight(); + break; + case "ambient": + light = new AmbientLight(); + break; + } + if (data2.parameters.color) light.color.copy(data2.parameters.color); + if (data2.parameters.distance) light.distance = data2.parameters.distance; + return light; + } + function getLight(id) { + const data2 = library.lights[id]; + if (data2 !== void 0) { + return getBuild(data2, buildLight); + } + console.warn("THREE.ColladaLoader: Couldn't find light with ID:", id); + return null; + } + function parseGeometry(xml2) { + const data2 = { + name: xml2.getAttribute("name"), + sources: {}, + vertices: {}, + primitives: [] + }; + const mesh = getElementsByTagName(xml2, "mesh")[0]; + if (mesh === void 0) return; + for (let i = 0; i < mesh.childNodes.length; i++) { + const child = mesh.childNodes[i]; + if (child.nodeType !== 1) continue; + const id = child.getAttribute("id"); + switch (child.nodeName) { + case "source": + data2.sources[id] = parseSource(child); + break; + case "vertices": + data2.vertices = parseGeometryVertices(child); + break; + case "polygons": + console.warn("THREE.ColladaLoader: Unsupported primitive type: ", child.nodeName); + break; + case "lines": + case "linestrips": + case "polylist": + case "triangles": + data2.primitives.push(parseGeometryPrimitive(child)); + break; + default: + console.log(child); + } + } + library.geometries[xml2.getAttribute("id")] = data2; + } + function parseSource(xml2) { + const data2 = { + array: [], + stride: 3 + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "float_array": + data2.array = parseFloats(child.textContent); + break; + case "Name_array": + data2.array = parseStrings(child.textContent); + break; + case "technique_common": + const accessor = getElementsByTagName(child, "accessor")[0]; + if (accessor !== void 0) { + data2.stride = parseInt(accessor.getAttribute("stride")); + } + break; + } + } + return data2; + } + function parseGeometryVertices(xml2) { + const data2 = {}; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + data2[child.getAttribute("semantic")] = parseId(child.getAttribute("source")); + } + return data2; + } + function parseGeometryPrimitive(xml2) { + const primitive = { + type: xml2.nodeName, + material: xml2.getAttribute("material"), + count: parseInt(xml2.getAttribute("count")), + inputs: {}, + stride: 0, + hasUV: false + }; + for (let i = 0, l2 = xml2.childNodes.length; i < l2; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "input": + const id = parseId(child.getAttribute("source")); + const semantic = child.getAttribute("semantic"); + const offset = parseInt(child.getAttribute("offset")); + const set = parseInt(child.getAttribute("set")); + const inputname = set > 0 ? semantic + set : semantic; + primitive.inputs[inputname] = { id, offset }; + primitive.stride = Math.max(primitive.stride, offset + 1); + if (semantic === "TEXCOORD") primitive.hasUV = true; + break; + case "vcount": + primitive.vcount = parseInts(child.textContent); + break; + case "p": + primitive.p = parseInts(child.textContent); + break; + } + } + return primitive; + } + function groupPrimitives(primitives) { + const build = {}; + for (let i = 0; i < primitives.length; i++) { + const primitive = primitives[i]; + if (build[primitive.type] === void 0) build[primitive.type] = []; + build[primitive.type].push(primitive); + } + return build; + } + function checkUVCoordinates(primitives) { + let count2 = 0; + for (let i = 0, l2 = primitives.length; i < l2; i++) { + const primitive = primitives[i]; + if (primitive.hasUV === true) { + count2++; + } + } + if (count2 > 0 && count2 < primitives.length) { + primitives.uvsNeedsFix = true; + } + } + function buildGeometry(data2) { + const build = {}; + const sources = data2.sources; + const vertices = data2.vertices; + const primitives = data2.primitives; + if (primitives.length === 0) return {}; + const groupedPrimitives = groupPrimitives(primitives); + for (const type in groupedPrimitives) { + const primitiveType = groupedPrimitives[type]; + checkUVCoordinates(primitiveType); + build[type] = buildGeometryType(primitiveType, sources, vertices); + } + return build; + } + function buildGeometryType(primitives, sources, vertices) { + const build = {}; + const position3 = { array: [], stride: 0 }; + const normal = { array: [], stride: 0 }; + const uv = { array: [], stride: 0 }; + const uv1 = { array: [], stride: 0 }; + const color = { array: [], stride: 0 }; + const skinIndex = { array: [], stride: 4 }; + const skinWeight = { array: [], stride: 4 }; + const geometry = new BufferGeometry(); + const materialKeys = []; + let start = 0; + for (let p2 = 0; p2 < primitives.length; p2++) { + const primitive = primitives[p2]; + const inputs = primitive.inputs; + let count2 = 0; + switch (primitive.type) { + case "lines": + case "linestrips": + count2 = primitive.count * 2; + break; + case "triangles": + count2 = primitive.count * 3; + break; + case "polylist": + for (let g2 = 0; g2 < primitive.count; g2++) { + const vc = primitive.vcount[g2]; + switch (vc) { + case 3: + count2 += 3; + break; + case 4: + count2 += 6; + break; + default: + count2 += (vc - 2) * 3; + break; + } + } + break; + default: + console.warn("THREE.ColladaLoader: Unknow primitive type:", primitive.type); + } + geometry.addGroup(start, count2, p2); + start += count2; + if (primitive.material) { + materialKeys.push(primitive.material); + } + for (const name2 in inputs) { + const input = inputs[name2]; + switch (name2) { + case "VERTEX": + for (const key2 in vertices) { + const id = vertices[key2]; + switch (key2) { + case "POSITION": + const prevLength = position3.array.length; + buildGeometryData(primitive, sources[id], input.offset, position3.array); + position3.stride = sources[id].stride; + if (sources.skinWeights && sources.skinIndices) { + buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array); + buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array); + } + if (primitive.hasUV === false && primitives.uvsNeedsFix === true) { + const count3 = (position3.array.length - prevLength) / position3.stride; + for (let i = 0; i < count3; i++) { + uv.array.push(0, 0); + } + } + break; + case "NORMAL": + buildGeometryData(primitive, sources[id], input.offset, normal.array); + normal.stride = sources[id].stride; + break; + case "COLOR": + buildGeometryData(primitive, sources[id], input.offset, color.array); + color.stride = sources[id].stride; + break; + case "TEXCOORD": + buildGeometryData(primitive, sources[id], input.offset, uv.array); + uv.stride = sources[id].stride; + break; + case "TEXCOORD1": + buildGeometryData(primitive, sources[id], input.offset, uv1.array); + uv.stride = sources[id].stride; + break; + default: + console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.', key2); + } + } + break; + case "NORMAL": + buildGeometryData(primitive, sources[input.id], input.offset, normal.array); + normal.stride = sources[input.id].stride; + break; + case "COLOR": + buildGeometryData(primitive, sources[input.id], input.offset, color.array, true); + color.stride = sources[input.id].stride; + break; + case "TEXCOORD": + buildGeometryData(primitive, sources[input.id], input.offset, uv.array); + uv.stride = sources[input.id].stride; + break; + case "TEXCOORD1": + buildGeometryData(primitive, sources[input.id], input.offset, uv1.array); + uv1.stride = sources[input.id].stride; + break; + } + } + } + if (position3.array.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position3.array, position3.stride)); + if (normal.array.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal.array, normal.stride)); + if (color.array.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color.array, color.stride)); + if (uv.array.length > 0) geometry.setAttribute("uv", new Float32BufferAttribute(uv.array, uv.stride)); + if (uv1.array.length > 0) geometry.setAttribute("uv1", new Float32BufferAttribute(uv1.array, uv1.stride)); + if (skinIndex.array.length > 0) geometry.setAttribute("skinIndex", new Float32BufferAttribute(skinIndex.array, skinIndex.stride)); + if (skinWeight.array.length > 0) geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeight.array, skinWeight.stride)); + build.data = geometry; + build.type = primitives[0].type; + build.materialKeys = materialKeys; + return build; + } + function buildGeometryData(primitive, source, offset, array, isColor = false) { + const indices = primitive.p; + const stride = primitive.stride; + const vcount = primitive.vcount; + function pushVector(i) { + let index2 = indices[i + offset] * sourceStride; + const length2 = index2 + sourceStride; + for (; index2 < length2; index2++) { + array.push(sourceArray[index2]); + } + if (isColor) { + const startIndex = array.length - sourceStride - 1; + tempColor.setRGB( + array[startIndex + 0], + array[startIndex + 1], + array[startIndex + 2] + ).convertSRGBToLinear(); + array[startIndex + 0] = tempColor.r; + array[startIndex + 1] = tempColor.g; + array[startIndex + 2] = tempColor.b; + } + } + const sourceArray = source.array; + const sourceStride = source.stride; + if (primitive.vcount !== void 0) { + let index2 = 0; + for (let i = 0, l2 = vcount.length; i < l2; i++) { + const count2 = vcount[i]; + if (count2 === 4) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * 1; + const c2 = index2 + stride * 2; + const d = index2 + stride * 3; + pushVector(a2); + pushVector(b3); + pushVector(d); + pushVector(b3); + pushVector(c2); + pushVector(d); + } else if (count2 === 3) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * 1; + const c2 = index2 + stride * 2; + pushVector(a2); + pushVector(b3); + pushVector(c2); + } else if (count2 > 4) { + for (let k2 = 1, kl = count2 - 2; k2 <= kl; k2++) { + const a2 = index2 + stride * 0; + const b3 = index2 + stride * k2; + const c2 = index2 + stride * (k2 + 1); + pushVector(a2); + pushVector(b3); + pushVector(c2); + } + } + index2 += stride * count2; + } + } else { + for (let i = 0, l2 = indices.length; i < l2; i += stride) { + pushVector(i); + } + } + } + function getGeometry(id) { + return getBuild(library.geometries[id], buildGeometry); + } + function parseKinematicsModel(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + joints: {}, + links: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + parseKinematicsTechniqueCommon(child, data2); + break; + } + } + library.kinematicsModels[xml2.getAttribute("id")] = data2; + } + function buildKinematicsModel(data2) { + if (data2.build !== void 0) return data2.build; + return data2; + } + function getKinematicsModel(id) { + return getBuild(library.kinematicsModels[id], buildKinematicsModel); + } + function parseKinematicsTechniqueCommon(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "joint": + data2.joints[child.getAttribute("sid")] = parseKinematicsJoint(child); + break; + case "link": + data2.links.push(parseKinematicsLink(child)); + break; + } + } + } + function parseKinematicsJoint(xml2) { + let data2; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "prismatic": + case "revolute": + data2 = parseKinematicsJointParameter(child); + break; + } + } + return data2; + } + function parseKinematicsJointParameter(xml2) { + const data2 = { + sid: xml2.getAttribute("sid"), + name: xml2.getAttribute("name") || "", + axis: new Vector3(), + limits: { + min: 0, + max: 0 + }, + type: xml2.nodeName, + static: false, + zeroPosition: 0, + middlePosition: 0 + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "axis": + const array = parseFloats(child.textContent); + data2.axis.fromArray(array); + break; + case "limits": + const max2 = child.getElementsByTagName("max")[0]; + const min = child.getElementsByTagName("min")[0]; + data2.limits.max = parseFloat(max2.textContent); + data2.limits.min = parseFloat(min.textContent); + break; + } + } + if (data2.limits.min >= data2.limits.max) { + data2.static = true; + } + data2.middlePosition = (data2.limits.min + data2.limits.max) / 2; + return data2; + } + function parseKinematicsLink(xml2) { + const data2 = { + sid: xml2.getAttribute("sid"), + name: xml2.getAttribute("name") || "", + attachments: [], + transforms: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "attachment_full": + data2.attachments.push(parseKinematicsAttachment(child)); + break; + case "matrix": + case "translate": + case "rotate": + data2.transforms.push(parseKinematicsTransform(child)); + break; + } + } + return data2; + } + function parseKinematicsAttachment(xml2) { + const data2 = { + joint: xml2.getAttribute("joint").split("/").pop(), + transforms: [], + links: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "link": + data2.links.push(parseKinematicsLink(child)); + break; + case "matrix": + case "translate": + case "rotate": + data2.transforms.push(parseKinematicsTransform(child)); + break; + } + } + return data2; + } + function parseKinematicsTransform(xml2) { + const data2 = { + type: xml2.nodeName + }; + const array = parseFloats(xml2.textContent); + switch (data2.type) { + case "matrix": + data2.obj = new Matrix4(); + data2.obj.fromArray(array).transpose(); + break; + case "translate": + data2.obj = new Vector3(); + data2.obj.fromArray(array); + break; + case "rotate": + data2.obj = new Vector3(); + data2.obj.fromArray(array); + data2.angle = MathUtils.degToRad(array[3]); + break; + } + return data2; + } + function parsePhysicsModel(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + rigidBodies: {} + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "rigid_body": + data2.rigidBodies[child.getAttribute("name")] = {}; + parsePhysicsRigidBody(child, data2.rigidBodies[child.getAttribute("name")]); + break; + } + } + library.physicsModels[xml2.getAttribute("id")] = data2; + } + function parsePhysicsRigidBody(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "technique_common": + parsePhysicsTechniqueCommon(child, data2); + break; + } + } + } + function parsePhysicsTechniqueCommon(xml2, data2) { + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "inertia": + data2.inertia = parseFloats(child.textContent); + break; + case "mass": + data2.mass = parseFloats(child.textContent)[0]; + break; + } + } + } + function parseKinematicsScene(xml2) { + const data2 = { + bindJointAxis: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "bind_joint_axis": + data2.bindJointAxis.push(parseKinematicsBindJointAxis(child)); + break; + } + } + library.kinematicsScenes[parseId(xml2.getAttribute("url"))] = data2; + } + function parseKinematicsBindJointAxis(xml2) { + const data2 = { + target: xml2.getAttribute("target").split("/").pop() + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + switch (child.nodeName) { + case "axis": + const param = child.getElementsByTagName("param")[0]; + data2.axis = param.textContent; + const tmpJointIndex = data2.axis.split("inst_").pop().split("axis")[0]; + data2.jointIndex = tmpJointIndex.substring(0, tmpJointIndex.length - 1); + break; + } + } + return data2; + } + function buildKinematicsScene(data2) { + if (data2.build !== void 0) return data2.build; + return data2; + } + function getKinematicsScene(id) { + return getBuild(library.kinematicsScenes[id], buildKinematicsScene); + } + function setupKinematics() { + const kinematicsModelId = Object.keys(library.kinematicsModels)[0]; + const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0]; + const visualSceneId = Object.keys(library.visualScenes)[0]; + if (kinematicsModelId === void 0 || kinematicsSceneId === void 0) return; + const kinematicsModel = getKinematicsModel(kinematicsModelId); + const kinematicsScene = getKinematicsScene(kinematicsSceneId); + const visualScene = getVisualScene(visualSceneId); + const bindJointAxis = kinematicsScene.bindJointAxis; + const jointMap = {}; + for (let i = 0, l2 = bindJointAxis.length; i < l2; i++) { + const axis = bindJointAxis[i]; + const targetElement = collada.querySelector('[sid="' + axis.target + '"]'); + if (targetElement) { + const parentVisualElement = targetElement.parentElement; + connect(axis.jointIndex, parentVisualElement); + } + } + function connect(jointIndex, visualElement) { + const visualElementName = visualElement.getAttribute("name"); + const joint = kinematicsModel.joints[jointIndex]; + visualScene.traverse(function(object) { + if (object.name === visualElementName) { + jointMap[jointIndex] = { + object, + transforms: buildTransformList(visualElement), + joint, + position: joint.zeroPosition + }; + } + }); + } + const m0 = new Matrix4(); + kinematics = { + joints: kinematicsModel && kinematicsModel.joints, + getJointValue: function(jointIndex) { + const jointData = jointMap[jointIndex]; + if (jointData) { + return jointData.position; + } else { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " doesn't exist."); + } + }, + setJointValue: function(jointIndex, value2) { + const jointData = jointMap[jointIndex]; + if (jointData) { + const joint = jointData.joint; + if (value2 > joint.limits.max || value2 < joint.limits.min) { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " value " + value2 + " outside of limits (min: " + joint.limits.min + ", max: " + joint.limits.max + ")."); + } else if (joint.static) { + console.warn("THREE.ColladaLoader: Joint " + jointIndex + " is static."); + } else { + const object = jointData.object; + const axis = joint.axis; + const transforms = jointData.transforms; + matrix3.identity(); + for (let i = 0; i < transforms.length; i++) { + const transform2 = transforms[i]; + if (transform2.sid && transform2.sid.indexOf(jointIndex) !== -1) { + switch (joint.type) { + case "revolute": + matrix3.multiply(m0.makeRotationAxis(axis, MathUtils.degToRad(value2))); + break; + case "prismatic": + matrix3.multiply(m0.makeTranslation(axis.x * value2, axis.y * value2, axis.z * value2)); + break; + default: + console.warn("THREE.ColladaLoader: Unknown joint type: " + joint.type); + break; + } + } else { + switch (transform2.type) { + case "matrix": + matrix3.multiply(transform2.obj); + break; + case "translate": + matrix3.multiply(m0.makeTranslation(transform2.obj.x, transform2.obj.y, transform2.obj.z)); + break; + case "scale": + matrix3.scale(transform2.obj); + break; + case "rotate": + matrix3.multiply(m0.makeRotationAxis(transform2.obj, transform2.angle)); + break; + } + } + } + object.matrix.copy(matrix3); + object.matrix.decompose(object.position, object.quaternion, object.scale); + jointMap[jointIndex].position = value2; + } + } else { + console.log("THREE.ColladaLoader: " + jointIndex + " does not exist."); + } + } + }; + } + function buildTransformList(node) { + const transforms = []; + const xml2 = collada.querySelector('[id="' + node.id + '"]'); + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let array, vector2; + switch (child.nodeName) { + case "matrix": + array = parseFloats(child.textContent); + const matrix4 = new Matrix4().fromArray(array).transpose(); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: matrix4 + }); + break; + case "translate": + case "scale": + array = parseFloats(child.textContent); + vector2 = new Vector3().fromArray(array); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: vector2 + }); + break; + case "rotate": + array = parseFloats(child.textContent); + vector2 = new Vector3().fromArray(array); + const angle = MathUtils.degToRad(array[3]); + transforms.push({ + sid: child.getAttribute("sid"), + type: child.nodeName, + obj: vector2, + angle + }); + break; + } + } + return transforms; + } + function prepareNodes(xml2) { + const elements = xml2.getElementsByTagName("node"); + for (let i = 0; i < elements.length; i++) { + const element = elements[i]; + if (element.hasAttribute("id") === false) { + element.setAttribute("id", generateId()); + } + } + } + const matrix3 = new Matrix4(); + const vector = new Vector3(); + function parseNode(xml2) { + const data2 = { + name: xml2.getAttribute("name") || "", + type: xml2.getAttribute("type"), + id: xml2.getAttribute("id"), + sid: xml2.getAttribute("sid"), + matrix: new Matrix4(), + nodes: [], + instanceCameras: [], + instanceControllers: [], + instanceLights: [], + instanceGeometries: [], + instanceNodes: [], + transforms: {} + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + if (child.nodeType !== 1) continue; + let array; + switch (child.nodeName) { + case "node": + data2.nodes.push(child.getAttribute("id")); + parseNode(child); + break; + case "instance_camera": + data2.instanceCameras.push(parseId(child.getAttribute("url"))); + break; + case "instance_controller": + data2.instanceControllers.push(parseNodeInstance(child)); + break; + case "instance_light": + data2.instanceLights.push(parseId(child.getAttribute("url"))); + break; + case "instance_geometry": + data2.instanceGeometries.push(parseNodeInstance(child)); + break; + case "instance_node": + data2.instanceNodes.push(parseId(child.getAttribute("url"))); + break; + case "matrix": + array = parseFloats(child.textContent); + data2.matrix.multiply(matrix3.fromArray(array).transpose()); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "translate": + array = parseFloats(child.textContent); + vector.fromArray(array); + data2.matrix.multiply(matrix3.makeTranslation(vector.x, vector.y, vector.z)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "rotate": + array = parseFloats(child.textContent); + const angle = MathUtils.degToRad(array[3]); + data2.matrix.multiply(matrix3.makeRotationAxis(vector.fromArray(array), angle)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "scale": + array = parseFloats(child.textContent); + data2.matrix.scale(vector.fromArray(array)); + data2.transforms[child.getAttribute("sid")] = child.nodeName; + break; + case "extra": + break; + default: + console.log(child); + } + } + if (hasNode(data2.id)) { + console.warn("THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.", data2.id); + } else { + library.nodes[data2.id] = data2; + } + return data2; + } + function parseNodeInstance(xml2) { + const data2 = { + id: parseId(xml2.getAttribute("url")), + materials: {}, + skeletons: [] + }; + for (let i = 0; i < xml2.childNodes.length; i++) { + const child = xml2.childNodes[i]; + switch (child.nodeName) { + case "bind_material": + const instances = child.getElementsByTagName("instance_material"); + for (let j = 0; j < instances.length; j++) { + const instance = instances[j]; + const symbol = instance.getAttribute("symbol"); + const target = instance.getAttribute("target"); + data2.materials[symbol] = parseId(target); + } + break; + case "skeleton": + data2.skeletons.push(parseId(child.textContent)); + break; + default: + break; + } + } + return data2; + } + function buildSkeleton(skeletons, joints) { + const boneData = []; + const sortedBoneData = []; + let i, j, data2; + for (i = 0; i < skeletons.length; i++) { + const skeleton = skeletons[i]; + let root; + if (hasNode(skeleton)) { + root = getNode(skeleton); + buildBoneHierarchy(root, joints, boneData); + } else if (hasVisualScene(skeleton)) { + const visualScene = library.visualScenes[skeleton]; + const children = visualScene.children; + for (let j2 = 0; j2 < children.length; j2++) { + const child = children[j2]; + if (child.type === "JOINT") { + const root2 = getNode(child.id); + buildBoneHierarchy(root2, joints, boneData); + } + } + } else { + console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:", skeleton); + } + } + for (i = 0; i < joints.length; i++) { + for (j = 0; j < boneData.length; j++) { + data2 = boneData[j]; + if (data2.bone.name === joints[i].name) { + sortedBoneData[i] = data2; + data2.processed = true; + break; + } + } + } + for (i = 0; i < boneData.length; i++) { + data2 = boneData[i]; + if (data2.processed === false) { + sortedBoneData.push(data2); + data2.processed = true; + } + } + const bones = []; + const boneInverses = []; + for (i = 0; i < sortedBoneData.length; i++) { + data2 = sortedBoneData[i]; + bones.push(data2.bone); + boneInverses.push(data2.boneInverse); + } + return new Skeleton(bones, boneInverses); + } + function buildBoneHierarchy(root, joints, boneData) { + root.traverse(function(object) { + if (object.isBone === true) { + let boneInverse; + for (let i = 0; i < joints.length; i++) { + const joint = joints[i]; + if (joint.name === object.name) { + boneInverse = joint.boneInverse; + break; + } + } + if (boneInverse === void 0) { + boneInverse = new Matrix4(); + } + boneData.push({ bone: object, boneInverse, processed: false }); + } + }); + } + function buildNode(data2) { + const objects = []; + const matrix4 = data2.matrix; + const nodes = data2.nodes; + const type = data2.type; + const instanceCameras = data2.instanceCameras; + const instanceControllers = data2.instanceControllers; + const instanceLights = data2.instanceLights; + const instanceGeometries = data2.instanceGeometries; + const instanceNodes = data2.instanceNodes; + for (let i = 0, l2 = nodes.length; i < l2; i++) { + objects.push(getNode(nodes[i])); + } + for (let i = 0, l2 = instanceCameras.length; i < l2; i++) { + const instanceCamera = getCamera(instanceCameras[i]); + if (instanceCamera !== null) { + objects.push(instanceCamera.clone()); + } + } + for (let i = 0, l2 = instanceControllers.length; i < l2; i++) { + const instance = instanceControllers[i]; + const controller = getController(instance.id); + const geometries = getGeometry(controller.id); + const newObjects = buildObjects(geometries, instance.materials); + const skeletons = instance.skeletons; + const joints = controller.skin.joints; + const skeleton = buildSkeleton(skeletons, joints); + for (let j = 0, jl = newObjects.length; j < jl; j++) { + const object2 = newObjects[j]; + if (object2.isSkinnedMesh) { + object2.bind(skeleton, controller.skin.bindMatrix); + object2.normalizeSkinWeights(); + } + objects.push(object2); + } + } + for (let i = 0, l2 = instanceLights.length; i < l2; i++) { + const instanceLight = getLight(instanceLights[i]); + if (instanceLight !== null) { + objects.push(instanceLight.clone()); + } + } + for (let i = 0, l2 = instanceGeometries.length; i < l2; i++) { + const instance = instanceGeometries[i]; + const geometries = getGeometry(instance.id); + const newObjects = buildObjects(geometries, instance.materials); + for (let j = 0, jl = newObjects.length; j < jl; j++) { + objects.push(newObjects[j]); + } + } + for (let i = 0, l2 = instanceNodes.length; i < l2; i++) { + objects.push(getNode(instanceNodes[i]).clone()); + } + let object; + if (nodes.length === 0 && objects.length === 1) { + object = objects[0]; + } else { + object = type === "JOINT" ? new Bone() : new Group(); + for (let i = 0; i < objects.length; i++) { + object.add(objects[i]); + } + } + object.name = type === "JOINT" ? data2.sid : data2.name; + object.matrix.copy(matrix4); + object.matrix.decompose(object.position, object.quaternion, object.scale); + return object; + } + const fallbackMaterial = new MeshBasicMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 16711935 + }); + function resolveMaterialBinding(keys2, instanceMaterials) { + const materials = []; + for (let i = 0, l2 = keys2.length; i < l2; i++) { + const id = instanceMaterials[keys2[i]]; + if (id === void 0) { + console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.", keys2[i]); + materials.push(fallbackMaterial); + } else { + materials.push(getMaterial2(id)); + } + } + return materials; + } + function buildObjects(geometries, instanceMaterials) { + const objects = []; + for (const type in geometries) { + const geometry = geometries[type]; + const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials); + if (materials.length === 0) { + if (type === "lines" || type === "linestrips") { + materials.push(new LineBasicMaterial()); + } else { + materials.push(new MeshPhongMaterial()); + } + } + if (type === "lines" || type === "linestrips") { + for (let i = 0, l2 = materials.length; i < l2; i++) { + const material2 = materials[i]; + if (material2.isMeshPhongMaterial === true || material2.isMeshLambertMaterial === true) { + const lineMaterial = new LineBasicMaterial(); + lineMaterial.color.copy(material2.color); + lineMaterial.opacity = material2.opacity; + lineMaterial.transparent = material2.transparent; + materials[i] = lineMaterial; + } + } + } + const skinning = geometry.data.attributes.skinIndex !== void 0; + const material = materials.length === 1 ? materials[0] : materials; + let object; + switch (type) { + case "lines": + object = new LineSegments(geometry.data, material); + break; + case "linestrips": + object = new Line(geometry.data, material); + break; + case "triangles": + case "polylist": + if (skinning) { + object = new SkinnedMesh(geometry.data, material); + } else { + object = new Mesh(geometry.data, material); + } + break; + } + objects.push(object); + } + return objects; + } + function hasNode(id) { + return library.nodes[id] !== void 0; + } + function getNode(id) { + return getBuild(library.nodes[id], buildNode); + } + function parseVisualScene(xml2) { + const data2 = { + name: xml2.getAttribute("name"), + children: [] + }; + prepareNodes(xml2); + const elements = getElementsByTagName(xml2, "node"); + for (let i = 0; i < elements.length; i++) { + data2.children.push(parseNode(elements[i])); + } + library.visualScenes[xml2.getAttribute("id")] = data2; + } + function buildVisualScene(data2) { + const group = new Group(); + group.name = data2.name; + const children = data2.children; + for (let i = 0; i < children.length; i++) { + const child = children[i]; + group.add(getNode(child.id)); + } + return group; + } + function hasVisualScene(id) { + return library.visualScenes[id] !== void 0; + } + function getVisualScene(id) { + return getBuild(library.visualScenes[id], buildVisualScene); + } + function parseScene(xml2) { + const instance = getElementsByTagName(xml2, "instance_visual_scene")[0]; + return getVisualScene(parseId(instance.getAttribute("url"))); + } + function setupAnimations() { + const clips = library.clips; + if (isEmpty2(clips) === true) { + if (isEmpty2(library.animations) === false) { + const tracks = []; + for (const id in library.animations) { + const animationTracks = getAnimation(id); + for (let i = 0, l2 = animationTracks.length; i < l2; i++) { + tracks.push(animationTracks[i]); + } + } + animations.push(new AnimationClip("default", -1, tracks)); + } + } else { + for (const id in clips) { + animations.push(getAnimationClip(id)); + } + } + } + function parserErrorToText(parserError2) { + let result = ""; + const stack = [parserError2]; + while (stack.length) { + const node = stack.shift(); + if (node.nodeType === Node.TEXT_NODE) { + result += node.textContent; + } else { + result += "\n"; + stack.push.apply(stack, node.childNodes); + } + } + return result.trim(); + } + if (text2.length === 0) { + return { scene: new Scene() }; + } + const xml = new DOMParser().parseFromString(text2, "application/xml"); + const collada = getElementsByTagName(xml, "COLLADA")[0]; + const parserError = xml.getElementsByTagName("parsererror")[0]; + if (parserError !== void 0) { + const errorElement = getElementsByTagName(parserError, "div")[0]; + let errorText; + if (errorElement) { + errorText = errorElement.textContent; + } else { + errorText = parserErrorToText(parserError); + } + console.error("THREE.ColladaLoader: Failed to parse collada file.\n", errorText); + return null; + } + const version = collada.getAttribute("version"); + console.debug("THREE.ColladaLoader: File version", version); + const asset = parseAsset(getElementsByTagName(collada, "asset")[0]); + const textureLoader = new TextureLoader(this.manager); + textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + let tgaLoader; + if (TGALoader) { + tgaLoader = new TGALoader(this.manager); + tgaLoader.setPath(this.resourcePath || path); + } + const tempColor = new Color(); + const animations = []; + let kinematics = {}; + let count = 0; + const library = { + animations: {}, + clips: {}, + controllers: {}, + images: {}, + effects: {}, + materials: {}, + cameras: {}, + lights: {}, + geometries: {}, + nodes: {}, + visualScenes: {}, + kinematicsModels: {}, + physicsModels: {}, + kinematicsScenes: {} + }; + parseLibrary(collada, "library_animations", "animation", parseAnimation); + parseLibrary(collada, "library_animation_clips", "animation_clip", parseAnimationClip); + parseLibrary(collada, "library_controllers", "controller", parseController); + parseLibrary(collada, "library_images", "image", parseImage); + parseLibrary(collada, "library_effects", "effect", parseEffect); + parseLibrary(collada, "library_materials", "material", parseMaterial); + parseLibrary(collada, "library_cameras", "camera", parseCamera); + parseLibrary(collada, "library_lights", "light", parseLight); + parseLibrary(collada, "library_geometries", "geometry", parseGeometry); + parseLibrary(collada, "library_nodes", "node", parseNode); + parseLibrary(collada, "library_visual_scenes", "visual_scene", parseVisualScene); + parseLibrary(collada, "library_kinematics_models", "kinematics_model", parseKinematicsModel); + parseLibrary(collada, "library_physics_models", "physics_model", parsePhysicsModel); + parseLibrary(collada, "scene", "instance_kinematics_scene", parseKinematicsScene); + buildLibrary(library.animations, buildAnimation); + buildLibrary(library.clips, buildAnimationClip); + buildLibrary(library.controllers, buildController); + buildLibrary(library.images, buildImage); + buildLibrary(library.effects, buildEffect); + buildLibrary(library.materials, buildMaterial2); + buildLibrary(library.cameras, buildCamera2); + buildLibrary(library.lights, buildLight); + buildLibrary(library.geometries, buildGeometry); + buildLibrary(library.visualScenes, buildVisualScene); + setupAnimations(); + setupKinematics(); + const scene = parseScene(getElementsByTagName(collada, "scene")[0]); + scene.animations = animations; + if (asset.upAxis === "Z_UP") { + console.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."); + scene.rotation.set(-Math.PI / 2, 0, 0); + } + scene.scale.multiplyScalar(asset.unit); + return { + get animations() { + console.warn("THREE.ColladaLoader: Please access animations over scene.animations now."); + return animations; + }, + kinematics, + library, + scene + }; + } +}; + +// node_modules/three/examples/jsm/loaders/DDSLoader.js +var DDSLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 }; + const DDS_MAGIC = 542327876; + const DDSD_MIPMAPCOUNT = 131072; + const DDSCAPS2_CUBEMAP = 512; + const DDSCAPS2_CUBEMAP_POSITIVEX = 1024; + const DDSCAPS2_CUBEMAP_NEGATIVEX = 2048; + const DDSCAPS2_CUBEMAP_POSITIVEY = 4096; + const DDSCAPS2_CUBEMAP_NEGATIVEY = 8192; + const DDSCAPS2_CUBEMAP_POSITIVEZ = 16384; + const DDSCAPS2_CUBEMAP_NEGATIVEZ = 32768; + const DXGI_FORMAT_BC6H_UF16 = 95; + const DXGI_FORMAT_BC6H_SF16 = 96; + function fourCCToInt32(value2) { + return value2.charCodeAt(0) + (value2.charCodeAt(1) << 8) + (value2.charCodeAt(2) << 16) + (value2.charCodeAt(3) << 24); + } + function int32ToFourCC(value2) { + return String.fromCharCode( + value2 & 255, + value2 >> 8 & 255, + value2 >> 16 & 255, + value2 >> 24 & 255 + ); + } + function loadARGBMip(buffer2, dataOffset2, width2, height2) { + const dataLength = width2 * height2 * 4; + const srcBuffer = new Uint8Array(buffer2, dataOffset2, dataLength); + const byteArray = new Uint8Array(dataLength); + let dst = 0; + let src = 0; + for (let y2 = 0; y2 < height2; y2++) { + for (let x2 = 0; x2 < width2; x2++) { + const b3 = srcBuffer[src]; + src++; + const g2 = srcBuffer[src]; + src++; + const r = srcBuffer[src]; + src++; + const a2 = srcBuffer[src]; + src++; + byteArray[dst] = r; + dst++; + byteArray[dst] = g2; + dst++; + byteArray[dst] = b3; + dst++; + byteArray[dst] = a2; + dst++; + } + } + return byteArray; + } + const FOURCC_DXT1 = fourCCToInt32("DXT1"); + const FOURCC_DXT3 = fourCCToInt32("DXT3"); + const FOURCC_DXT5 = fourCCToInt32("DXT5"); + const FOURCC_ETC1 = fourCCToInt32("ETC1"); + const FOURCC_DX10 = fourCCToInt32("DX10"); + const headerLengthInt = 31; + const extendedHeaderLengthInt = 5; + const off_magic = 0; + const off_size = 1; + const off_flags = 2; + const off_height = 3; + const off_width = 4; + const off_mipmapCount = 7; + const off_pfFourCC = 21; + const off_RGBBitCount = 22; + const off_RBitMask = 23; + const off_GBitMask = 24; + const off_BBitMask = 25; + const off_ABitMask = 26; + const off_caps2 = 28; + const off_dxgiFormat = 0; + const header = new Int32Array(buffer, 0, headerLengthInt); + if (header[off_magic] !== DDS_MAGIC) { + console.error("THREE.DDSLoader.parse: Invalid magic number in DDS header."); + return dds; + } + let blockBytes; + const fourCC = header[off_pfFourCC]; + let isRGBAUncompressed = false; + let dataOffset = header[off_size] + 4; + switch (fourCC) { + case FOURCC_DXT1: + blockBytes = 8; + dds.format = RGB_S3TC_DXT1_Format; + break; + case FOURCC_DXT3: + blockBytes = 16; + dds.format = RGBA_S3TC_DXT3_Format; + break; + case FOURCC_DXT5: + blockBytes = 16; + dds.format = RGBA_S3TC_DXT5_Format; + break; + case FOURCC_ETC1: + blockBytes = 8; + dds.format = RGB_ETC1_Format; + break; + case FOURCC_DX10: + dataOffset += extendedHeaderLengthInt * 4; + const extendedHeader = new Int32Array(buffer, (headerLengthInt + 1) * 4, extendedHeaderLengthInt); + const dxgiFormat = extendedHeader[off_dxgiFormat]; + switch (dxgiFormat) { + case DXGI_FORMAT_BC6H_SF16: { + blockBytes = 16; + dds.format = RGB_BPTC_SIGNED_Format; + break; + } + case DXGI_FORMAT_BC6H_UF16: { + blockBytes = 16; + dds.format = RGB_BPTC_UNSIGNED_Format; + break; + } + default: { + console.error("THREE.DDSLoader.parse: Unsupported DXGI_FORMAT code ", dxgiFormat); + return dds; + } + } + break; + default: + if (header[off_RGBBitCount] === 32 && header[off_RBitMask] & 16711680 && header[off_GBitMask] & 65280 && header[off_BBitMask] & 255 && header[off_ABitMask] & 4278190080) { + isRGBAUncompressed = true; + blockBytes = 64; + dds.format = RGBAFormat; + } else { + console.error("THREE.DDSLoader.parse: Unsupported FourCC code ", int32ToFourCC(fourCC)); + return dds; + } + } + dds.mipmapCount = 1; + if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) { + dds.mipmapCount = Math.max(1, header[off_mipmapCount]); + } + const caps2 = header[off_caps2]; + dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false; + if (dds.isCubemap && (!(caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ))) { + console.error("THREE.DDSLoader.parse: Incomplete cubemap faces"); + return dds; + } + dds.width = header[off_width]; + dds.height = header[off_height]; + const faces = dds.isCubemap ? 6 : 1; + for (let face = 0; face < faces; face++) { + let width2 = dds.width; + let height2 = dds.height; + for (let i = 0; i < dds.mipmapCount; i++) { + let byteArray, dataLength; + if (isRGBAUncompressed) { + byteArray = loadARGBMip(buffer, dataOffset, width2, height2); + dataLength = byteArray.length; + } else { + dataLength = Math.max(4, width2) / 4 * Math.max(4, height2) / 4 * blockBytes; + byteArray = new Uint8Array(buffer, dataOffset, dataLength); + } + const mipmap = { "data": byteArray, "width": width2, "height": height2 }; + dds.mipmaps.push(mipmap); + dataOffset += dataLength; + width2 = Math.max(width2 >> 1, 1); + height2 = Math.max(height2 >> 1, 1); + } + } + return dds; + } +}; + +// node_modules/three/examples/jsm/loaders/DRACOLoader.js +var _taskCache2 = /* @__PURE__ */ new WeakMap(); +var DRACOLoader = class extends Loader { + constructor(manager) { + super(manager); + this.decoderPath = ""; + this.decoderConfig = {}; + this.decoderBinary = null; + this.decoderPending = null; + this.workerLimit = 4; + this.workerPool = []; + this.workerNextTaskID = 1; + this.workerSourceURL = ""; + this.defaultAttributeIDs = { + position: "POSITION", + normal: "NORMAL", + color: "COLOR", + uv: "TEX_COORD" + }; + this.defaultAttributeTypes = { + position: "Float32Array", + normal: "Float32Array", + color: "Float32Array", + uv: "Float32Array" + }; + } + setDecoderPath(path) { + this.decoderPath = path; + return this; + } + setDecoderConfig(config) { + this.decoderConfig = config; + return this; + } + setWorkerLimit(workerLimit) { + this.workerLimit = workerLimit; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + this.parse(buffer, onLoad, onError); + }, onProgress, onError); + } + parse(buffer, onLoad, onError = () => { + }) { + this.decodeDracoFile(buffer, onLoad, null, null, SRGBColorSpace, onError).catch(onError); + } + decodeDracoFile(buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => { + }) { + const taskConfig = { + attributeIDs: attributeIDs || this.defaultAttributeIDs, + attributeTypes: attributeTypes || this.defaultAttributeTypes, + useUniqueIDs: !!attributeIDs, + vertexColorSpace + }; + return this.decodeGeometry(buffer, taskConfig).then(callback).catch(onError); + } + decodeGeometry(buffer, taskConfig) { + const taskKey = JSON.stringify(taskConfig); + if (_taskCache2.has(buffer)) { + const cachedTask = _taskCache2.get(buffer); + if (cachedTask.key === taskKey) { + return cachedTask.promise; + } else if (buffer.byteLength === 0) { + throw new Error( + "THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred." + ); + } + } + let worker; + const taskID = this.workerNextTaskID++; + const taskCost = buffer.byteLength; + const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => { + worker = _worker; + return new Promise((resolve, reject2) => { + worker._callbacks[taskID] = { resolve, reject: reject2 }; + worker.postMessage({ type: "decode", id: taskID, taskConfig, buffer }, [buffer]); + }); + }).then((message) => this._createGeometry(message.geometry)); + geometryPending.catch(() => true).then(() => { + if (worker && taskID) { + this._releaseTask(worker, taskID); + } + }); + _taskCache2.set(buffer, { + key: taskKey, + promise: geometryPending + }); + return geometryPending; + } + _createGeometry(geometryData) { + const geometry = new BufferGeometry(); + if (geometryData.index) { + geometry.setIndex(new BufferAttribute(geometryData.index.array, 1)); + } + for (let i = 0; i < geometryData.attributes.length; i++) { + const result = geometryData.attributes[i]; + const name2 = result.name; + const array = result.array; + const itemSize = result.itemSize; + const attribute = new BufferAttribute(array, itemSize); + if (name2 === "color") { + this._assignVertexColorSpace(attribute, result.vertexColorSpace); + attribute.normalized = array instanceof Float32Array === false; + } + geometry.setAttribute(name2, attribute); + } + return geometry; + } + _assignVertexColorSpace(attribute, inputColorSpace) { + if (inputColorSpace !== SRGBColorSpace) return; + const _color5 = new Color(); + for (let i = 0, il = attribute.count; i < il; i++) { + _color5.fromBufferAttribute(attribute, i).convertSRGBToLinear(); + attribute.setXYZ(i, _color5.r, _color5.g, _color5.b); + } + } + _loadLibrary(url, responseType) { + const loader = new FileLoader(this.manager); + loader.setPath(this.decoderPath); + loader.setResponseType(responseType); + loader.setWithCredentials(this.withCredentials); + return new Promise((resolve, reject2) => { + loader.load(url, resolve, void 0, reject2); + }); + } + preload() { + this._initDecoder(); + return this; + } + _initDecoder() { + if (this.decoderPending) return this.decoderPending; + const useJS = typeof WebAssembly !== "object" || this.decoderConfig.type === "js"; + const librariesPending = []; + if (useJS) { + librariesPending.push(this._loadLibrary("draco_decoder.js", "text")); + } else { + librariesPending.push(this._loadLibrary("draco_wasm_wrapper.js", "text")); + librariesPending.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer")); + } + this.decoderPending = Promise.all(librariesPending).then((libraries) => { + const jsContent = libraries[0]; + if (!useJS) { + this.decoderConfig.wasmBinary = libraries[1]; + } + const fn = DRACOWorker.toString(); + const body = [ + "/* draco decoder */", + jsContent, + "", + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + }); + return this.decoderPending; + } + _getWorker(taskID, taskCost) { + return this._initDecoder().then(() => { + if (this.workerPool.length < this.workerLimit) { + const worker2 = new Worker(this.workerSourceURL); + worker2._callbacks = {}; + worker2._taskCosts = {}; + worker2._taskLoad = 0; + worker2.postMessage({ type: "init", decoderConfig: this.decoderConfig }); + worker2.onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "decode": + worker2._callbacks[message.id].resolve(message); + break; + case "error": + worker2._callbacks[message.id].reject(message); + break; + default: + console.error('THREE.DRACOLoader: Unexpected message, "' + message.type + '"'); + } + }; + this.workerPool.push(worker2); + } else { + this.workerPool.sort(function(a2, b3) { + return a2._taskLoad > b3._taskLoad ? -1 : 1; + }); + } + const worker = this.workerPool[this.workerPool.length - 1]; + worker._taskCosts[taskID] = taskCost; + worker._taskLoad += taskCost; + return worker; + }); + } + _releaseTask(worker, taskID) { + worker._taskLoad -= worker._taskCosts[taskID]; + delete worker._callbacks[taskID]; + delete worker._taskCosts[taskID]; + } + debug() { + console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); + } + dispose() { + for (let i = 0; i < this.workerPool.length; ++i) { + this.workerPool[i].terminate(); + } + this.workerPool.length = 0; + if (this.workerSourceURL !== "") { + URL.revokeObjectURL(this.workerSourceURL); + } + return this; + } +}; +function DRACOWorker() { + let decoderConfig; + let decoderPending; + onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "init": + decoderConfig = message.decoderConfig; + decoderPending = new Promise(function(resolve) { + decoderConfig.onModuleLoaded = function(draco) { + resolve({ draco }); + }; + DracoDecoderModule(decoderConfig); + }); + break; + case "decode": + const buffer = message.buffer; + const taskConfig = message.taskConfig; + decoderPending.then((module2) => { + const draco = module2.draco; + const decoder = new draco.Decoder(); + try { + const geometry = decodeGeometry(draco, decoder, new Int8Array(buffer), taskConfig); + const buffers = geometry.attributes.map((attr) => attr.array.buffer); + if (geometry.index) buffers.push(geometry.index.array.buffer); + self.postMessage({ type: "decode", id: message.id, geometry }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ type: "error", id: message.id, error: error.message }); + } finally { + draco.destroy(decoder); + } + }); + break; + } + }; + function decodeGeometry(draco, decoder, array, taskConfig) { + const attributeIDs = taskConfig.attributeIDs; + const attributeTypes = taskConfig.attributeTypes; + let dracoGeometry; + let decodingStatus; + const geometryType = decoder.GetEncodedGeometryType(array); + if (geometryType === draco.TRIANGULAR_MESH) { + dracoGeometry = new draco.Mesh(); + decodingStatus = decoder.DecodeArrayToMesh(array, array.byteLength, dracoGeometry); + } else if (geometryType === draco.POINT_CLOUD) { + dracoGeometry = new draco.PointCloud(); + decodingStatus = decoder.DecodeArrayToPointCloud(array, array.byteLength, dracoGeometry); + } else { + throw new Error("THREE.DRACOLoader: Unexpected geometry type."); + } + if (!decodingStatus.ok() || dracoGeometry.ptr === 0) { + throw new Error("THREE.DRACOLoader: Decoding failed: " + decodingStatus.error_msg()); + } + const geometry = { index: null, attributes: [] }; + for (const attributeName in attributeIDs) { + const attributeType = self[attributeTypes[attributeName]]; + let attribute; + let attributeID; + if (taskConfig.useUniqueIDs) { + attributeID = attributeIDs[attributeName]; + attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID); + } else { + attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]); + if (attributeID === -1) continue; + attribute = decoder.GetAttribute(dracoGeometry, attributeID); + } + const attributeResult = decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute); + if (attributeName === "color") { + attributeResult.vertexColorSpace = taskConfig.vertexColorSpace; + } + geometry.attributes.push(attributeResult); + } + if (geometryType === draco.TRIANGULAR_MESH) { + geometry.index = decodeIndex(draco, decoder, dracoGeometry); + } + draco.destroy(dracoGeometry); + return geometry; + } + function decodeIndex(draco, decoder, dracoGeometry) { + const numFaces = dracoGeometry.num_faces(); + const numIndices = numFaces * 3; + const byteLength = numIndices * 4; + const ptr = draco._malloc(byteLength); + decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr); + const index2 = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice(); + draco._free(ptr); + return { array: index2, itemSize: 1 }; + } + function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) { + const numComponents = attribute.num_components(); + const numPoints = dracoGeometry.num_points(); + const numValues = numPoints * numComponents; + const byteLength = numValues * attributeType.BYTES_PER_ELEMENT; + const dataType = getDracoDataType(draco, attributeType); + const ptr = draco._malloc(byteLength); + decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr); + const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice(); + draco._free(ptr); + return { + name: attributeName, + array, + itemSize: numComponents + }; + } + function getDracoDataType(draco, attributeType) { + switch (attributeType) { + case Float32Array: + return draco.DT_FLOAT32; + case Int8Array: + return draco.DT_INT8; + case Int16Array: + return draco.DT_INT16; + case Int32Array: + return draco.DT_INT32; + case Uint8Array: + return draco.DT_UINT8; + case Uint16Array: + return draco.DT_UINT16; + case Uint32Array: + return draco.DT_UINT32; + } + } +} + +// node_modules/three/examples/jsm/loaders/FBXLoader.js +var fbxTree; +var connections; +var sceneGraph; +var FBXLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(FBXBuffer, path) { + if (isFbxFormatBinary(FBXBuffer)) { + fbxTree = new BinaryParser().parse(FBXBuffer); + } else { + const FBXText = convertArrayBufferToString(FBXBuffer); + if (!isFbxFormatASCII(FBXText)) { + throw new Error("THREE.FBXLoader: Unknown format."); + } + if (getFbxVersion(FBXText) < 7e3) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText)); + } + fbxTree = new TextParser().parse(FBXText); + } + const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree); + } +}; +var FBXTreeParser = class { + constructor(textureLoader, manager) { + this.textureLoader = textureLoader; + this.manager = manager; + } + parse() { + connections = this.parseConnections(); + const images = this.parseImages(); + const textures = this.parseTextures(images); + const materials = this.parseMaterials(textures); + const deformers = this.parseDeformers(); + const geometryMap = new GeometryParser().parse(deformers); + this.parseScene(deformers, geometryMap, materials); + return sceneGraph; + } + // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry ) + // and details the connection type + parseConnections() { + const connectionMap = /* @__PURE__ */ new Map(); + if ("Connections" in fbxTree) { + const rawConnections = fbxTree.Connections.connections; + rawConnections.forEach(function(rawConnection) { + const fromID = rawConnection[0]; + const toID = rawConnection[1]; + const relationship = rawConnection[2]; + if (!connectionMap.has(fromID)) { + connectionMap.set(fromID, { + parents: [], + children: [] + }); + } + const parentRelationship = { ID: toID, relationship }; + connectionMap.get(fromID).parents.push(parentRelationship); + if (!connectionMap.has(toID)) { + connectionMap.set(toID, { + parents: [], + children: [] + }); + } + const childRelationship = { ID: fromID, relationship }; + connectionMap.get(toID).children.push(childRelationship); + }); + } + return connectionMap; + } + // Parse FBXTree.Objects.Video for embedded image data + // These images are connected to textures in FBXTree.Objects.Textures + // via FBXTree.Connections. + parseImages() { + const images = {}; + const blobs = {}; + if ("Video" in fbxTree.Objects) { + const videoNodes = fbxTree.Objects.Video; + for (const nodeID in videoNodes) { + const videoNode = videoNodes[nodeID]; + const id = parseInt(nodeID); + images[id] = videoNode.RelativeFilename || videoNode.Filename; + if ("Content" in videoNode) { + const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0; + const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== ""; + if (arrayBufferContent || base64Content) { + const image = this.parseImage(videoNodes[nodeID]); + blobs[videoNode.RelativeFilename || videoNode.Filename] = image; + } + } + } + } + for (const id in images) { + const filename = images[id]; + if (blobs[filename] !== void 0) images[id] = blobs[filename]; + else images[id] = images[id].split("\\").pop(); + } + return images; + } + // Parse embedded image data in FBXTree.Video.Content + parseImage(videoNode) { + const content2 = videoNode.Content; + const fileName = videoNode.RelativeFilename || videoNode.Filename; + const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); + let type; + switch (extension) { + case "bmp": + type = "image/bmp"; + break; + case "jpg": + case "jpeg": + type = "image/jpeg"; + break; + case "png": + type = "image/png"; + break; + case "tif": + type = "image/tiff"; + break; + case "tga": + if (this.manager.getHandler(".tga") === null) { + console.warn("FBXLoader: TGA loader not found, skipping ", fileName); + } + type = "image/tga"; + break; + default: + console.warn('FBXLoader: Image type "' + extension + '" is not supported.'); + return; + } + if (typeof content2 === "string") { + return "data:" + type + ";base64," + content2; + } else { + const array = new Uint8Array(content2); + return window.URL.createObjectURL(new Blob([array], { type })); + } + } + // Parse nodes in FBXTree.Objects.Texture + // These contain details such as UV scaling, cropping, rotation etc and are connected + // to images in FBXTree.Objects.Video + parseTextures(images) { + const textureMap = /* @__PURE__ */ new Map(); + if ("Texture" in fbxTree.Objects) { + const textureNodes = fbxTree.Objects.Texture; + for (const nodeID in textureNodes) { + const texture = this.parseTexture(textureNodes[nodeID], images); + textureMap.set(parseInt(nodeID), texture); + } + } + return textureMap; + } + // Parse individual node in FBXTree.Objects.Texture + parseTexture(textureNode, images) { + const texture = this.loadTexture(textureNode, images); + texture.ID = textureNode.id; + texture.name = textureNode.attrName; + const wrapModeU = textureNode.WrapModeU; + const wrapModeV = textureNode.WrapModeV; + const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0; + const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0; + texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if ("Scaling" in textureNode) { + const values2 = textureNode.Scaling.value; + texture.repeat.x = values2[0]; + texture.repeat.y = values2[1]; + } + if ("Translation" in textureNode) { + const values2 = textureNode.Translation.value; + texture.offset.x = values2[0]; + texture.offset.y = values2[1]; + } + return texture; + } + // load a texture specified as a blob or data URI, or via an external URL using TextureLoader + loadTexture(textureNode, images) { + const nonNativeExtensions = /* @__PURE__ */ new Set(["tga", "tif", "tiff", "exr", "dds", "hdr", "ktx2"]); + const extension = textureNode.FileName.split(".").pop().toLowerCase(); + const loader = nonNativeExtensions.has(extension) ? this.manager.getHandler(`.${extension}`) : this.textureLoader; + if (!loader) { + console.warn( + `FBXLoader: ${extension.toUpperCase()} loader not found, creating placeholder texture for`, + textureNode.RelativeFilename + ); + return new Texture(); + } + const loaderPath = loader.path; + if (!loaderPath) { + loader.setPath(this.textureLoader.path); + } + const children = connections.get(textureNode.id).children; + let fileName; + if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) { + fileName = images[children[0].ID]; + if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) { + loader.setPath(void 0); + } + } + const texture = loader.load(fileName); + loader.setPath(loaderPath); + return texture; + } + // Parse nodes in FBXTree.Objects.Material + parseMaterials(textureMap) { + const materialMap = /* @__PURE__ */ new Map(); + if ("Material" in fbxTree.Objects) { + const materialNodes = fbxTree.Objects.Material; + for (const nodeID in materialNodes) { + const material = this.parseMaterial(materialNodes[nodeID], textureMap); + if (material !== null) materialMap.set(parseInt(nodeID), material); + } + } + return materialMap; + } + // Parse single node in FBXTree.Objects.Material + // Materials are connected to texture maps in FBXTree.Objects.Textures + // FBX format currently only supports Lambert and Phong shading models + parseMaterial(materialNode, textureMap) { + const ID = materialNode.id; + const name2 = materialNode.attrName; + let type = materialNode.ShadingModel; + if (typeof type === "object") { + type = type.value; + } + if (!connections.has(ID)) return null; + const parameters = this.parseParameters(materialNode, textureMap, ID); + let material; + switch (type.toLowerCase()) { + case "phong": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type); + material = new MeshPhongMaterial(); + break; + } + material.setValues(parameters); + material.name = name2; + return material; + } + // Parse FBX material and return parameters suitable for a three.js material + // Also parse the texture map and return any textures associated with the material + parseParameters(materialNode, textureMap, ID) { + const parameters = {}; + if (materialNode.BumpFactor) { + parameters.bumpScale = materialNode.BumpFactor.value; + } + if (materialNode.Diffuse) { + parameters.color = new Color().fromArray(materialNode.Diffuse.value).convertSRGBToLinear(); + } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) { + parameters.color = new Color().fromArray(materialNode.DiffuseColor.value).convertSRGBToLinear(); + } + if (materialNode.DisplacementFactor) { + parameters.displacementScale = materialNode.DisplacementFactor.value; + } + if (materialNode.Emissive) { + parameters.emissive = new Color().fromArray(materialNode.Emissive.value).convertSRGBToLinear(); + } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) { + parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value).convertSRGBToLinear(); + } + if (materialNode.EmissiveFactor) { + parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value); + } + if (materialNode.Opacity) { + parameters.opacity = parseFloat(materialNode.Opacity.value); + } + if (parameters.opacity < 1) { + parameters.transparent = true; + } + if (materialNode.ReflectionFactor) { + parameters.reflectivity = materialNode.ReflectionFactor.value; + } + if (materialNode.Shininess) { + parameters.shininess = materialNode.Shininess.value; + } + if (materialNode.Specular) { + parameters.specular = new Color().fromArray(materialNode.Specular.value).convertSRGBToLinear(); + } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") { + parameters.specular = new Color().fromArray(materialNode.SpecularColor.value).convertSRGBToLinear(); + } + const scope = this; + connections.get(ID).children.forEach(function(child) { + const type = child.relationship; + switch (type) { + case "Bump": + parameters.bumpMap = scope.getTexture(textureMap, child.ID); + break; + case "Maya|TEX_ao_map": + parameters.aoMap = scope.getTexture(textureMap, child.ID); + break; + case "DiffuseColor": + case "Maya|TEX_color_map": + parameters.map = scope.getTexture(textureMap, child.ID); + if (parameters.map !== void 0) { + parameters.map.colorSpace = SRGBColorSpace; + } + break; + case "DisplacementColor": + parameters.displacementMap = scope.getTexture(textureMap, child.ID); + break; + case "EmissiveColor": + parameters.emissiveMap = scope.getTexture(textureMap, child.ID); + if (parameters.emissiveMap !== void 0) { + parameters.emissiveMap.colorSpace = SRGBColorSpace; + } + break; + case "NormalMap": + case "Maya|TEX_normal_map": + parameters.normalMap = scope.getTexture(textureMap, child.ID); + break; + case "ReflectionColor": + parameters.envMap = scope.getTexture(textureMap, child.ID); + if (parameters.envMap !== void 0) { + parameters.envMap.mapping = EquirectangularReflectionMapping; + parameters.envMap.colorSpace = SRGBColorSpace; + } + break; + case "SpecularColor": + parameters.specularMap = scope.getTexture(textureMap, child.ID); + if (parameters.specularMap !== void 0) { + parameters.specularMap.colorSpace = SRGBColorSpace; + } + break; + case "TransparentColor": + case "TransparencyFactor": + parameters.alphaMap = scope.getTexture(textureMap, child.ID); + parameters.transparent = true; + break; + case "AmbientColor": + case "ShininessExponent": + case "SpecularFactor": + case "VectorDisplacementColor": + default: + console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type); + break; + } + }); + return parameters; + } + // get a texture from the textureMap for use by a material. + getTexture(textureMap, id) { + if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) { + console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."); + id = connections.get(id).children[0].ID; + } + return textureMap.get(id); + } + // Parse nodes in FBXTree.Objects.Deformer + // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here + // Generates map of Skeleton-like objects for use later when generating and binding skeletons. + parseDeformers() { + const skeletons = {}; + const morphTargets = {}; + if ("Deformer" in fbxTree.Objects) { + const DeformerNodes = fbxTree.Objects.Deformer; + for (const nodeID in DeformerNodes) { + const deformerNode = DeformerNodes[nodeID]; + const relationships = connections.get(parseInt(nodeID)); + if (deformerNode.attrType === "Skin") { + const skeleton = this.parseSkeleton(relationships, DeformerNodes); + skeleton.ID = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."); + skeleton.geometryID = relationships.parents[0].ID; + skeletons[nodeID] = skeleton; + } else if (deformerNode.attrType === "BlendShape") { + const morphTarget = { + id: nodeID + }; + morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes); + morphTarget.id = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."); + morphTargets[nodeID] = morphTarget; + } + } + } + return { + skeletons, + morphTargets + }; + } + // Parse single nodes in FBXTree.Objects.Deformer + // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster' + // Each skin node represents a skeleton and each cluster node represents a bone + parseSkeleton(relationships, deformerNodes) { + const rawBones = []; + relationships.children.forEach(function(child) { + const boneNode = deformerNodes[child.ID]; + if (boneNode.attrType !== "Cluster") return; + const rawBone = { + ID: child.ID, + indices: [], + weights: [], + transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) + // transform: new Matrix4().fromArray( boneNode.Transform.a ), + // linkMode: boneNode.Mode, + }; + if ("Indexes" in boneNode) { + rawBone.indices = boneNode.Indexes.a; + rawBone.weights = boneNode.Weights.a; + } + rawBones.push(rawBone); + }); + return { + rawBones, + bones: [] + }; + } + // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel" + parseMorphTargets(relationships, deformerNodes) { + const rawMorphTargets = []; + for (let i = 0; i < relationships.children.length; i++) { + const child = relationships.children[i]; + const morphTargetNode = deformerNodes[child.ID]; + const rawMorphTarget = { + name: morphTargetNode.attrName, + initialWeight: morphTargetNode.DeformPercent, + id: morphTargetNode.id, + fullWeights: morphTargetNode.FullWeights.a + }; + if (morphTargetNode.attrType !== "BlendShapeChannel") return; + rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) { + return child2.relationship === void 0; + })[0].ID; + rawMorphTargets.push(rawMorphTarget); + } + return rawMorphTargets; + } + // create the main Group() to be returned by the loader + parseScene(deformers, geometryMap, materialMap) { + sceneGraph = new Group(); + const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap); + const modelNodes = fbxTree.Objects.Model; + const scope = this; + modelMap.forEach(function(model) { + const modelNode = modelNodes[model.ID]; + scope.setLookAtProperties(model, modelNode); + const parentConnections = connections.get(model.ID).parents; + parentConnections.forEach(function(connection) { + const parent2 = modelMap.get(connection.ID); + if (parent2 !== void 0) parent2.add(model); + }); + if (model.parent === null) { + sceneGraph.add(model); + } + }); + this.bindSkeleton(deformers.skeletons, geometryMap, modelMap); + this.addGlobalSceneSettings(); + sceneGraph.traverse(function(node) { + if (node.userData.transformData) { + if (node.parent) { + node.userData.transformData.parentMatrix = node.parent.matrix; + node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld; + } + const transform2 = generateTransform(node.userData.transformData); + node.applyMatrix4(transform2); + node.updateWorldMatrix(); + } + }); + const animations = new AnimationParser().parse(); + if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) { + sceneGraph.children[0].animations = animations; + sceneGraph = sceneGraph.children[0]; + } + sceneGraph.animations = animations; + } + // parse nodes in FBXTree.Objects.Model + parseModels(skeletons, geometryMap, materialMap) { + const modelMap = /* @__PURE__ */ new Map(); + const modelNodes = fbxTree.Objects.Model; + for (const nodeID in modelNodes) { + const id = parseInt(nodeID); + const node = modelNodes[nodeID]; + const relationships = connections.get(id); + let model = this.buildSkeleton(relationships, skeletons, id, node.attrName); + if (!model) { + switch (node.attrType) { + case "Camera": + model = this.createCamera(relationships); + break; + case "Light": + model = this.createLight(relationships); + break; + case "Mesh": + model = this.createMesh(relationships, geometryMap, materialMap); + break; + case "NurbsCurve": + model = this.createCurve(relationships, geometryMap); + break; + case "LimbNode": + case "Root": + model = new Bone(); + break; + case "Null": + default: + model = new Group(); + break; + } + model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : ""; + model.userData.originalName = node.attrName; + model.ID = id; + } + this.getTransformData(model, node); + modelMap.set(id, model); + } + return modelMap; + } + buildSkeleton(relationships, skeletons, id, name2) { + let bone = null; + relationships.parents.forEach(function(parent2) { + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + skeleton.rawBones.forEach(function(rawBone, i) { + if (rawBone.ID === parent2.ID) { + const subBone = bone; + bone = new Bone(); + bone.matrixWorld.copy(rawBone.transformLink); + bone.name = name2 ? PropertyBinding.sanitizeNodeName(name2) : ""; + bone.userData.originalName = name2; + bone.ID = id; + skeleton.bones[i] = bone; + if (subBone !== null) { + bone.add(subBone); + } + } + }); + } + }); + return bone; + } + // create a PerspectiveCamera or OrthographicCamera + createCamera(relationships) { + let model; + let cameraAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + cameraAttribute = attr; + } + }); + if (cameraAttribute === void 0) { + model = new Object3D(); + } else { + let type = 0; + if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) { + type = 1; + } + let nearClippingPlane = 1; + if (cameraAttribute.NearPlane !== void 0) { + nearClippingPlane = cameraAttribute.NearPlane.value / 1e3; + } + let farClippingPlane = 1e3; + if (cameraAttribute.FarPlane !== void 0) { + farClippingPlane = cameraAttribute.FarPlane.value / 1e3; + } + let width2 = window.innerWidth; + let height2 = window.innerHeight; + if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) { + width2 = cameraAttribute.AspectWidth.value; + height2 = cameraAttribute.AspectHeight.value; + } + const aspect = width2 / height2; + let fov = 45; + if (cameraAttribute.FieldOfView !== void 0) { + fov = cameraAttribute.FieldOfView.value; + } + const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; + switch (type) { + case 0: + model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane); + if (focalLength !== null) model.setFocalLength(focalLength); + break; + case 1: + model = new OrthographicCamera(-width2 / 2, width2 / 2, height2 / 2, -height2 / 2, nearClippingPlane, farClippingPlane); + break; + default: + console.warn("THREE.FBXLoader: Unknown camera type " + type + "."); + model = new Object3D(); + break; + } + } + return model; + } + // Create a DirectionalLight, PointLight or SpotLight + createLight(relationships) { + let model; + let lightAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) { + lightAttribute = attr; + } + }); + if (lightAttribute === void 0) { + model = new Object3D(); + } else { + let type; + if (lightAttribute.LightType === void 0) { + type = 0; + } else { + type = lightAttribute.LightType.value; + } + let color = 16777215; + if (lightAttribute.Color !== void 0) { + color = new Color().fromArray(lightAttribute.Color.value).convertSRGBToLinear(); + } + let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100; + if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) { + intensity = 0; + } + let distance = 0; + if (lightAttribute.FarAttenuationEnd !== void 0) { + if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) { + distance = 0; + } else { + distance = lightAttribute.FarAttenuationEnd.value; + } + } + const decay = 1; + switch (type) { + case 0: + model = new PointLight(color, intensity, distance, decay); + break; + case 1: + model = new DirectionalLight(color, intensity); + break; + case 2: + let angle = Math.PI / 3; + if (lightAttribute.InnerAngle !== void 0) { + angle = MathUtils.degToRad(lightAttribute.InnerAngle.value); + } + let penumbra = 0; + if (lightAttribute.OuterAngle !== void 0) { + penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value); + penumbra = Math.max(penumbra, 1); + } + model = new SpotLight(color, intensity, distance, angle, penumbra, decay); + break; + default: + console.warn("THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."); + model = new PointLight(color, intensity); + break; + } + if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) { + model.castShadow = true; + } + } + return model; + } + createMesh(relationships, geometryMap, materialMap) { + let model; + let geometry = null; + let material = null; + const materials = []; + relationships.children.forEach(function(child) { + if (geometryMap.has(child.ID)) { + geometry = geometryMap.get(child.ID); + } + if (materialMap.has(child.ID)) { + materials.push(materialMap.get(child.ID)); + } + }); + if (materials.length > 1) { + material = materials; + } else if (materials.length > 0) { + material = materials[0]; + } else { + material = new MeshPhongMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 13421772 + }); + materials.push(material); + } + if ("color" in geometry.attributes) { + materials.forEach(function(material2) { + material2.vertexColors = true; + }); + } + if (geometry.FBX_Deformer) { + model = new SkinnedMesh(geometry, material); + model.normalizeSkinWeights(); + } else { + model = new Mesh(geometry, material); + } + return model; + } + createCurve(relationships, geometryMap) { + const geometry = relationships.children.reduce(function(geo, child) { + if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID); + return geo; + }, null); + const material = new LineBasicMaterial({ + name: Loader.DEFAULT_MATERIAL_NAME, + color: 3342591, + linewidth: 1 + }); + return new Line(geometry, material); + } + // parse the model node for transform data + getTransformData(model, modelNode) { + const transformData = {}; + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + else transformData.eulerOrder = "ZYX"; + if ("Lcl_Translation" in modelNode) transformData.translation = modelNode.Lcl_Translation.value; + if ("PreRotation" in modelNode) transformData.preRotation = modelNode.PreRotation.value; + if ("Lcl_Rotation" in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value; + if ("PostRotation" in modelNode) transformData.postRotation = modelNode.PostRotation.value; + if ("Lcl_Scaling" in modelNode) transformData.scale = modelNode.Lcl_Scaling.value; + if ("ScalingOffset" in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value; + if ("ScalingPivot" in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value; + if ("RotationOffset" in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value; + if ("RotationPivot" in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value; + model.userData.transformData = transformData; + } + setLookAtProperties(model, modelNode) { + if ("LookAtProperty" in modelNode) { + const children = connections.get(model.ID).children; + children.forEach(function(child) { + if (child.relationship === "LookAtProperty") { + const lookAtTarget = fbxTree.Objects.Model[child.ID]; + if ("Lcl_Translation" in lookAtTarget) { + const pos = lookAtTarget.Lcl_Translation.value; + if (model.target !== void 0) { + model.target.position.fromArray(pos); + sceneGraph.add(model.target); + } else { + model.lookAt(new Vector3().fromArray(pos)); + } + } + } + }); + } + } + bindSkeleton(skeletons, geometryMap, modelMap) { + const bindMatrices = this.parsePoseNodes(); + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + const parents = connections.get(parseInt(skeleton.ID)).parents; + parents.forEach(function(parent2) { + if (geometryMap.has(parent2.ID)) { + const geoID = parent2.ID; + const geoRelationships = connections.get(geoID); + geoRelationships.parents.forEach(function(geoConnParent) { + if (modelMap.has(geoConnParent.ID)) { + const model = modelMap.get(geoConnParent.ID); + model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]); + } + }); + } + }); + } + } + parsePoseNodes() { + const bindMatrices = {}; + if ("Pose" in fbxTree.Objects) { + const BindPoseNode = fbxTree.Objects.Pose; + for (const nodeID in BindPoseNode) { + if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) { + const poseNodes = BindPoseNode[nodeID].PoseNode; + if (Array.isArray(poseNodes)) { + poseNodes.forEach(function(poseNode) { + bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a); + }); + } else { + bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a); + } + } + } + } + return bindMatrices; + } + addGlobalSceneSettings() { + if ("GlobalSettings" in fbxTree) { + if ("AmbientColor" in fbxTree.GlobalSettings) { + const ambientColor = fbxTree.GlobalSettings.AmbientColor.value; + const r = ambientColor[0]; + const g2 = ambientColor[1]; + const b3 = ambientColor[2]; + if (r !== 0 || g2 !== 0 || b3 !== 0) { + const color = new Color(r, g2, b3).convertSRGBToLinear(); + sceneGraph.add(new AmbientLight(color, 1)); + } + } + if ("UnitScaleFactor" in fbxTree.GlobalSettings) { + sceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value; + } + } + } +}; +var GeometryParser = class { + constructor() { + this.negativeMaterialIndices = false; + } + // Parse nodes in FBXTree.Objects.Geometry + parse(deformers) { + const geometryMap = /* @__PURE__ */ new Map(); + if ("Geometry" in fbxTree.Objects) { + const geoNodes = fbxTree.Objects.Geometry; + for (const nodeID in geoNodes) { + const relationships = connections.get(parseInt(nodeID)); + const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers); + geometryMap.set(parseInt(nodeID), geo); + } + } + if (this.negativeMaterialIndices === true) { + console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."); + } + return geometryMap; + } + // Parse single node in FBXTree.Objects.Geometry + parseGeometry(relationships, geoNode, deformers) { + switch (geoNode.attrType) { + case "Mesh": + return this.parseMeshGeometry(relationships, geoNode, deformers); + break; + case "NurbsCurve": + return this.parseNurbsGeometry(geoNode); + break; + } + } + // Parse single node mesh geometry in FBXTree.Objects.Geometry + parseMeshGeometry(relationships, geoNode, deformers) { + const skeletons = deformers.skeletons; + const morphTargets = []; + const modelNodes = relationships.parents.map(function(parent2) { + return fbxTree.Objects.Model[parent2.ID]; + }); + if (modelNodes.length === 0) return; + const skeleton = relationships.children.reduce(function(skeleton2, child) { + if (skeletons[child.ID] !== void 0) skeleton2 = skeletons[child.ID]; + return skeleton2; + }, null); + relationships.children.forEach(function(child) { + if (deformers.morphTargets[child.ID] !== void 0) { + morphTargets.push(deformers.morphTargets[child.ID]); + } + }); + const modelNode = modelNodes[0]; + const transformData = {}; + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("GeometricTranslation" in modelNode) transformData.translation = modelNode.GeometricTranslation.value; + if ("GeometricRotation" in modelNode) transformData.rotation = modelNode.GeometricRotation.value; + if ("GeometricScaling" in modelNode) transformData.scale = modelNode.GeometricScaling.value; + const transform2 = generateTransform(transformData); + return this.genGeometry(geoNode, skeleton, morphTargets, transform2); + } + // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry + genGeometry(geoNode, skeleton, morphTargets, preTransform) { + const geo = new BufferGeometry(); + if (geoNode.attrName) geo.name = geoNode.attrName; + const geoInfo = this.parseGeoNode(geoNode, skeleton); + const buffers = this.genBuffers(geoInfo); + const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3); + positionAttribute.applyMatrix4(preTransform); + geo.setAttribute("position", positionAttribute); + if (buffers.colors.length > 0) { + geo.setAttribute("color", new Float32BufferAttribute(buffers.colors, 3)); + } + if (skeleton) { + geo.setAttribute("skinIndex", new Uint16BufferAttribute(buffers.weightsIndices, 4)); + geo.setAttribute("skinWeight", new Float32BufferAttribute(buffers.vertexWeights, 4)); + geo.FBX_Deformer = skeleton; + } + if (buffers.normal.length > 0) { + const normalMatrix = new Matrix3().getNormalMatrix(preTransform); + const normalAttribute = new Float32BufferAttribute(buffers.normal, 3); + normalAttribute.applyNormalMatrix(normalMatrix); + geo.setAttribute("normal", normalAttribute); + } + buffers.uvs.forEach(function(uvBuffer, i) { + const name2 = i === 0 ? "uv" : `uv${i}`; + geo.setAttribute(name2, new Float32BufferAttribute(buffers.uvs[i], 2)); + }); + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + let prevMaterialIndex = buffers.materialIndex[0]; + let startIndex = 0; + buffers.materialIndex.forEach(function(currentIndex, i) { + if (currentIndex !== prevMaterialIndex) { + geo.addGroup(startIndex, i - startIndex, prevMaterialIndex); + prevMaterialIndex = currentIndex; + startIndex = i; + } + }); + if (geo.groups.length > 0) { + const lastGroup = geo.groups[geo.groups.length - 1]; + const lastIndex = lastGroup.start + lastGroup.count; + if (lastIndex !== buffers.materialIndex.length) { + geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex); + } + } + if (geo.groups.length === 0) { + geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]); + } + } + this.addMorphTargets(geo, geoNode, morphTargets, preTransform); + return geo; + } + parseGeoNode(geoNode, skeleton) { + const geoInfo = {}; + geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : []; + geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : []; + if (geoNode.LayerElementColor) { + geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]); + } + if (geoNode.LayerElementMaterial) { + geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]); + } + if (geoNode.LayerElementNormal) { + geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]); + } + if (geoNode.LayerElementUV) { + geoInfo.uv = []; + let i = 0; + while (geoNode.LayerElementUV[i]) { + if (geoNode.LayerElementUV[i].UV) { + geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i])); + } + i++; + } + } + geoInfo.weightTable = {}; + if (skeleton !== null) { + geoInfo.skeleton = skeleton; + skeleton.rawBones.forEach(function(rawBone, i) { + rawBone.indices.forEach(function(index2, j) { + if (geoInfo.weightTable[index2] === void 0) geoInfo.weightTable[index2] = []; + geoInfo.weightTable[index2].push({ + id: i, + weight: rawBone.weights[j] + }); + }); + }); + } + return geoInfo; + } + genBuffers(geoInfo) { + const buffers = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [] + }; + let polygonIndex = 0; + let faceLength = 0; + let displayedWeightsWarning = false; + let facePositionIndexes = []; + let faceNormals = []; + let faceColors = []; + let faceUVs = []; + let faceWeights = []; + let faceWeightIndices = []; + const scope = this; + geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) { + let materialIndex; + let endOfFace = false; + if (vertexIndex < 0) { + vertexIndex = vertexIndex ^ -1; + endOfFace = true; + } + let weightIndices = []; + let weights = []; + facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2); + if (geoInfo.color) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color); + faceColors.push(data2[0], data2[1], data2[2]); + } + if (geoInfo.skeleton) { + if (geoInfo.weightTable[vertexIndex] !== void 0) { + geoInfo.weightTable[vertexIndex].forEach(function(wt) { + weights.push(wt.weight); + weightIndices.push(wt.id); + }); + } + if (weights.length > 4) { + if (!displayedWeightsWarning) { + console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."); + displayedWeightsWarning = true; + } + const wIndex = [0, 0, 0, 0]; + const Weight = [0, 0, 0, 0]; + weights.forEach(function(weight, weightIndex) { + let currentWeight = weight; + let currentIndex = weightIndices[weightIndex]; + Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) { + if (currentWeight > comparedWeight) { + comparedWeightArray[comparedWeightIndex] = currentWeight; + currentWeight = comparedWeight; + const tmp = wIndex[comparedWeightIndex]; + wIndex[comparedWeightIndex] = currentIndex; + currentIndex = tmp; + } + }); + }); + weightIndices = wIndex; + weights = Weight; + } + while (weights.length < 4) { + weights.push(0); + weightIndices.push(0); + } + for (let i = 0; i < 4; ++i) { + faceWeights.push(weights[i]); + faceWeightIndices.push(weightIndices[i]); + } + } + if (geoInfo.normal) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal); + faceNormals.push(data2[0], data2[1], data2[2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0]; + if (materialIndex < 0) { + scope.negativeMaterialIndices = true; + materialIndex = 0; + } + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, i) { + const data2 = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv); + if (faceUVs[i] === void 0) { + faceUVs[i] = []; + } + faceUVs[i].push(data2[0]); + faceUVs[i].push(data2[1]); + }); + } + faceLength++; + if (endOfFace) { + scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength); + polygonIndex++; + faceLength = 0; + facePositionIndexes = []; + faceNormals = []; + faceColors = []; + faceUVs = []; + faceWeights = []; + faceWeightIndices = []; + } + }); + return buffers; + } + // See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal + getNormalNewell(vertices) { + const normal = new Vector3(0, 0, 0); + for (let i = 0; i < vertices.length; i++) { + const current = vertices[i]; + const next = vertices[(i + 1) % vertices.length]; + normal.x += (current.y - next.y) * (current.z + next.z); + normal.y += (current.z - next.z) * (current.x + next.x); + normal.z += (current.x - next.x) * (current.y + next.y); + } + normal.normalize(); + return normal; + } + getNormalTangentAndBitangent(vertices) { + const normalVector = this.getNormalNewell(vertices); + const up = Math.abs(normalVector.z) > 0.5 ? new Vector3(0, 1, 0) : new Vector3(0, 0, 1); + const tangent = up.cross(normalVector).normalize(); + const bitangent = normalVector.clone().cross(tangent).normalize(); + return { + normal: normalVector, + tangent, + bitangent + }; + } + flattenVertex(vertex, normalTangent, normalBitangent) { + return new Vector2( + vertex.dot(normalTangent), + vertex.dot(normalBitangent) + ); + } + // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris + genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) { + let triangles; + if (faceLength > 3) { + const vertices = []; + const positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions; + for (let i = 0; i < facePositionIndexes.length; i += 3) { + vertices.push( + new Vector3( + positions[facePositionIndexes[i]], + positions[facePositionIndexes[i + 1]], + positions[facePositionIndexes[i + 2]] + ) + ); + } + const { tangent, bitangent } = this.getNormalTangentAndBitangent(vertices); + const triangulationInput = []; + for (const vertex of vertices) { + triangulationInput.push(this.flattenVertex(vertex, tangent, bitangent)); + } + triangles = ShapeUtils.triangulateShape(triangulationInput, []); + } else { + triangles = [[0, 1, 2]]; + } + for (const [i0, i1, i2] of triangles) { + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i0 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i1 * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i2 * 3 + 2]]); + if (geoInfo.skeleton) { + buffers.vertexWeights.push(faceWeights[i0 * 4]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i0 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i1 * 4]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i1 * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i2 * 4]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i2 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i0 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i1 * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i2 * 4 + 3]); + } + if (geoInfo.color) { + buffers.colors.push(faceColors[i0 * 3]); + buffers.colors.push(faceColors[i0 * 3 + 1]); + buffers.colors.push(faceColors[i0 * 3 + 2]); + buffers.colors.push(faceColors[i1 * 3]); + buffers.colors.push(faceColors[i1 * 3 + 1]); + buffers.colors.push(faceColors[i1 * 3 + 2]); + buffers.colors.push(faceColors[i2 * 3]); + buffers.colors.push(faceColors[i2 * 3 + 1]); + buffers.colors.push(faceColors[i2 * 3 + 2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + } + if (geoInfo.normal) { + buffers.normal.push(faceNormals[i0 * 3]); + buffers.normal.push(faceNormals[i0 * 3 + 1]); + buffers.normal.push(faceNormals[i0 * 3 + 2]); + buffers.normal.push(faceNormals[i1 * 3]); + buffers.normal.push(faceNormals[i1 * 3 + 1]); + buffers.normal.push(faceNormals[i1 * 3 + 2]); + buffers.normal.push(faceNormals[i2 * 3]); + buffers.normal.push(faceNormals[i2 * 3 + 1]); + buffers.normal.push(faceNormals[i2 * 3 + 2]); + } + if (geoInfo.uv) { + geoInfo.uv.forEach(function(uv, j) { + if (buffers.uvs[j] === void 0) buffers.uvs[j] = []; + buffers.uvs[j].push(faceUVs[j][i0 * 2]); + buffers.uvs[j].push(faceUVs[j][i0 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i1 * 2]); + buffers.uvs[j].push(faceUVs[j][i1 * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i2 * 2]); + buffers.uvs[j].push(faceUVs[j][i2 * 2 + 1]); + }); + } + } + } + addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) { + if (morphTargets.length === 0) return; + parentGeo.morphTargetsRelative = true; + parentGeo.morphAttributes.position = []; + const scope = this; + morphTargets.forEach(function(morphTarget) { + morphTarget.rawTargets.forEach(function(rawTarget) { + const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID]; + if (morphGeoNode !== void 0) { + scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name); + } + }); + }); + } + // a morph geometry node is similar to a standard node, and the node is also contained + // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal + // and a special attribute Index defining which vertices of the original geometry are affected + // Normal and position attributes only have data for the vertices that are affected by the morph + genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name2) { + const basePositions = parentGeoNode.Vertices !== void 0 ? parentGeoNode.Vertices.a : []; + const baseIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : []; + const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : []; + const morphIndices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : []; + const length2 = parentGeo.attributes.position.count * 3; + const morphPositions = new Float32Array(length2); + for (let i = 0; i < morphIndices.length; i++) { + const morphIndex = morphIndices[i] * 3; + morphPositions[morphIndex] = morphPositionsSparse[i * 3]; + morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1]; + morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2]; + } + const morphGeoInfo = { + vertexIndices: baseIndices, + vertexPositions: morphPositions, + baseVertexPositions: basePositions + }; + const morphBuffers = this.genBuffers(morphGeoInfo); + const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3); + positionAttribute.name = name2 || morphGeoNode.attrName; + positionAttribute.applyMatrix4(preTransform); + parentGeo.morphAttributes.position.push(positionAttribute); + } + // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists + parseNormals(NormalNode) { + const mappingType = NormalNode.MappingInformationType; + const referenceType = NormalNode.ReferenceInformationType; + const buffer = NormalNode.Normals.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + if ("NormalIndex" in NormalNode) { + indexBuffer = NormalNode.NormalIndex.a; + } else if ("NormalsIndex" in NormalNode) { + indexBuffer = NormalNode.NormalsIndex.a; + } + } + return { + dataSize: 3, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists + parseUVs(UVNode) { + const mappingType = UVNode.MappingInformationType; + const referenceType = UVNode.ReferenceInformationType; + const buffer = UVNode.UV.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = UVNode.UVIndex.a; + } + return { + dataSize: 2, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists + parseVertexColors(ColorNode) { + const mappingType = ColorNode.MappingInformationType; + const referenceType = ColorNode.ReferenceInformationType; + const buffer = ColorNode.Colors.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + indexBuffer = ColorNode.ColorIndex.a; + } + for (let i = 0, c2 = new Color(); i < buffer.length; i += 4) { + c2.fromArray(buffer, i).convertSRGBToLinear().toArray(buffer, i); + } + return { + dataSize: 4, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists + parseMaterialIndices(MaterialNode) { + const mappingType = MaterialNode.MappingInformationType; + const referenceType = MaterialNode.ReferenceInformationType; + if (mappingType === "NoMappingInformation") { + return { + dataSize: 1, + buffer: [0], + indices: [0], + mappingType: "AllSame", + referenceType + }; + } + const materialIndexBuffer = MaterialNode.Materials.a; + const materialIndices = []; + for (let i = 0; i < materialIndexBuffer.length; ++i) { + materialIndices.push(i); + } + return { + dataSize: 1, + buffer: materialIndexBuffer, + indices: materialIndices, + mappingType, + referenceType + }; + } + // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry + parseNurbsGeometry(geoNode) { + const order = parseInt(geoNode.Order); + if (isNaN(order)) { + console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id); + return new BufferGeometry(); + } + const degree = order - 1; + const knots = geoNode.KnotVector.a; + const controlPoints = []; + const pointsValues = geoNode.Points.a; + for (let i = 0, l2 = pointsValues.length; i < l2; i += 4) { + controlPoints.push(new Vector4().fromArray(pointsValues, i)); + } + let startKnot, endKnot; + if (geoNode.Form === "Closed") { + controlPoints.push(controlPoints[0]); + } else if (geoNode.Form === "Periodic") { + startKnot = degree; + endKnot = knots.length - 1 - startKnot; + for (let i = 0; i < degree; ++i) { + controlPoints.push(controlPoints[i]); + } + } + const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot); + const points = curve.getPoints(controlPoints.length * 12); + return new BufferGeometry().setFromPoints(points); + } +}; +var AnimationParser = class { + // take raw animation clips and turn them into three.js animation clips + parse() { + const animationClips = []; + const rawClips = this.parseClips(); + if (rawClips !== void 0) { + for (const key2 in rawClips) { + const rawClip = rawClips[key2]; + const clip = this.addClip(rawClip); + animationClips.push(clip); + } + } + return animationClips; + } + parseClips() { + if (fbxTree.Objects.AnimationCurve === void 0) return void 0; + const curveNodesMap = this.parseAnimationCurveNodes(); + this.parseAnimationCurves(curveNodesMap); + const layersMap = this.parseAnimationLayers(curveNodesMap); + const rawClips = this.parseAnimStacks(layersMap); + return rawClips; + } + // parse nodes in FBXTree.Objects.AnimationCurveNode + // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation ) + // and is referenced by an AnimationLayer + parseAnimationCurveNodes() { + const rawCurveNodes = fbxTree.Objects.AnimationCurveNode; + const curveNodesMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawCurveNodes) { + const rawCurveNode = rawCurveNodes[nodeID]; + if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) { + const curveNode = { + id: rawCurveNode.id, + attr: rawCurveNode.attrName, + curves: {} + }; + curveNodesMap.set(curveNode.id, curveNode); + } + } + return curveNodesMap; + } + // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to + // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated + // axis ( e.g. times and values of x rotation) + parseAnimationCurves(curveNodesMap) { + const rawCurves = fbxTree.Objects.AnimationCurve; + for (const nodeID in rawCurves) { + const animationCurve = { + id: rawCurves[nodeID].id, + times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds), + values: rawCurves[nodeID].KeyValueFloat.a + }; + const relationships = connections.get(animationCurve.id); + if (relationships !== void 0) { + const animationCurveID = relationships.parents[0].ID; + const animationCurveRelationship = relationships.parents[0].relationship; + if (animationCurveRelationship.match(/X/)) { + curveNodesMap.get(animationCurveID).curves["x"] = animationCurve; + } else if (animationCurveRelationship.match(/Y/)) { + curveNodesMap.get(animationCurveID).curves["y"] = animationCurve; + } else if (animationCurveRelationship.match(/Z/)) { + curveNodesMap.get(animationCurveID).curves["z"] = animationCurve; + } else if (animationCurveRelationship.match(/DeformPercent/) && curveNodesMap.has(animationCurveID)) { + curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve; + } + } + } + } + // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references + // to various AnimationCurveNodes and is referenced by an AnimationStack node + // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack + parseAnimationLayers(curveNodesMap) { + const rawLayers = fbxTree.Objects.AnimationLayer; + const layersMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawLayers) { + const layerCurveNodes = []; + const connection = connections.get(parseInt(nodeID)); + if (connection !== void 0) { + const children = connection.children; + children.forEach(function(child, i) { + if (curveNodesMap.has(child.ID)) { + const curveNode = curveNodesMap.get(child.ID); + if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) { + if (layerCurveNodes[i] === void 0) { + const modelID = connections.get(child.ID).parents.filter(function(parent2) { + return parent2.relationship !== void 0; + })[0].ID; + if (modelID !== void 0) { + const rawModel = fbxTree.Objects.Model[modelID.toString()]; + if (rawModel === void 0) { + console.warn("THREE.FBXLoader: Encountered a unused curve.", child); + return; + } + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + ID: rawModel.id, + initialPosition: [0, 0, 0], + initialRotation: [0, 0, 0], + initialScale: [1, 1, 1] + }; + sceneGraph.traverse(function(child2) { + if (child2.ID === rawModel.id) { + node.transform = child2.matrix; + if (child2.userData.transformData) node.eulerOrder = child2.userData.transformData.eulerOrder; + } + }); + if (!node.transform) node.transform = new Matrix4(); + if ("PreRotation" in rawModel) node.preRotation = rawModel.PreRotation.value; + if ("PostRotation" in rawModel) node.postRotation = rawModel.PostRotation.value; + layerCurveNodes[i] = node; + } + } + if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode; + } else if (curveNode.curves.morph !== void 0) { + if (layerCurveNodes[i] === void 0) { + const deformerID = connections.get(child.ID).parents.filter(function(parent2) { + return parent2.relationship !== void 0; + })[0].ID; + const morpherID = connections.get(deformerID).parents[0].ID; + const geoID = connections.get(morpherID).parents[0].ID; + const modelID = connections.get(geoID).parents[0].ID; + const rawModel = fbxTree.Objects.Model[modelID]; + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + morphName: fbxTree.Objects.Deformer[deformerID].attrName + }; + layerCurveNodes[i] = node; + } + layerCurveNodes[i][curveNode.attr] = curveNode; + } + } + }); + layersMap.set(parseInt(nodeID), layerCurveNodes); + } + } + return layersMap; + } + // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation + // hierarchy. Each Stack node will be used to create a AnimationClip + parseAnimStacks(layersMap) { + const rawStacks = fbxTree.Objects.AnimationStack; + const rawClips = {}; + for (const nodeID in rawStacks) { + const children = connections.get(parseInt(nodeID)).children; + if (children.length > 1) { + console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); + } + const layer = layersMap.get(children[0].ID); + rawClips[nodeID] = { + name: rawStacks[nodeID].attrName, + layer + }; + } + return rawClips; + } + addClip(rawClip) { + let tracks = []; + const scope = this; + rawClip.layer.forEach(function(rawTracks) { + tracks = tracks.concat(scope.generateTracks(rawTracks)); + }); + return new AnimationClip(rawClip.name, -1, tracks); + } + generateTracks(rawTracks) { + const tracks = []; + let initialPosition = new Vector3(); + let initialScale = new Vector3(); + if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, new Quaternion(), initialScale); + initialPosition = initialPosition.toArray(); + initialScale = initialScale.toArray(); + if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) { + const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, "position"); + if (positionTrack !== void 0) tracks.push(positionTrack); + } + if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) { + const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder); + if (rotationTrack !== void 0) tracks.push(rotationTrack); + } + if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) { + const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale"); + if (scaleTrack !== void 0) tracks.push(scaleTrack); + } + if (rawTracks.DeformPercent !== void 0) { + const morphTrack = this.generateMorphTrack(rawTracks); + if (morphTrack !== void 0) tracks.push(morphTrack); + } + return tracks; + } + generateVectorTrack(modelName, curves, initialValue, type) { + const times = this.getTimesForAllAxes(curves); + const values2 = this.getKeyframeTrackValues(times, curves, initialValue); + return new VectorKeyframeTrack(modelName + "." + type, times, values2); + } + generateRotationTrack(modelName, curves, preRotation, postRotation, eulerOrder) { + let times; + let values2; + if (curves.x !== void 0 && curves.y !== void 0 && curves.z !== void 0) { + const result = this.interpolateRotations(curves.x, curves.y, curves.z, eulerOrder); + times = result[0]; + values2 = result[1]; + } + if (preRotation !== void 0) { + preRotation = preRotation.map(MathUtils.degToRad); + preRotation.push(eulerOrder); + preRotation = new Euler().fromArray(preRotation); + preRotation = new Quaternion().setFromEuler(preRotation); + } + if (postRotation !== void 0) { + postRotation = postRotation.map(MathUtils.degToRad); + postRotation.push(eulerOrder); + postRotation = new Euler().fromArray(postRotation); + postRotation = new Quaternion().setFromEuler(postRotation).invert(); + } + const quaternion = new Quaternion(); + const euler = new Euler(); + const quaternionValues = []; + if (!values2 || !times) return new QuaternionKeyframeTrack(modelName + ".quaternion", [0], [0]); + for (let i = 0; i < values2.length; i += 3) { + euler.set(values2[i], values2[i + 1], values2[i + 2], eulerOrder); + quaternion.setFromEuler(euler); + if (preRotation !== void 0) quaternion.premultiply(preRotation); + if (postRotation !== void 0) quaternion.multiply(postRotation); + if (i > 2) { + const prevQuat = new Quaternion().fromArray( + quaternionValues, + (i - 3) / 3 * 4 + ); + if (prevQuat.dot(quaternion) < 0) { + quaternion.set(-quaternion.x, -quaternion.y, -quaternion.z, -quaternion.w); + } + } + quaternion.toArray(quaternionValues, i / 3 * 4); + } + return new QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues); + } + generateMorphTrack(rawTracks) { + const curves = rawTracks.DeformPercent.curves.morph; + const values2 = curves.values.map(function(val2) { + return val2 / 100; + }); + const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName]; + return new NumberKeyframeTrack(rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]", curves.times, values2); + } + // For all animated objects, times are defined separately for each axis + // Here we'll combine the times into one sorted array without duplicates + getTimesForAllAxes(curves) { + let times = []; + if (curves.x !== void 0) times = times.concat(curves.x.times); + if (curves.y !== void 0) times = times.concat(curves.y.times); + if (curves.z !== void 0) times = times.concat(curves.z.times); + times = times.sort(function(a2, b3) { + return a2 - b3; + }); + if (times.length > 1) { + let targetIndex = 1; + let lastValue = times[0]; + for (let i = 1; i < times.length; i++) { + const currentValue = times[i]; + if (currentValue !== lastValue) { + times[targetIndex] = currentValue; + lastValue = currentValue; + targetIndex++; + } + } + times = times.slice(0, targetIndex); + } + return times; + } + getKeyframeTrackValues(times, curves, initialValue) { + const prevValue = initialValue; + const values2 = []; + let xIndex = -1; + let yIndex = -1; + let zIndex = -1; + times.forEach(function(time2) { + if (curves.x) xIndex = curves.x.times.indexOf(time2); + if (curves.y) yIndex = curves.y.times.indexOf(time2); + if (curves.z) zIndex = curves.z.times.indexOf(time2); + if (xIndex !== -1) { + const xValue = curves.x.values[xIndex]; + values2.push(xValue); + prevValue[0] = xValue; + } else { + values2.push(prevValue[0]); + } + if (yIndex !== -1) { + const yValue = curves.y.values[yIndex]; + values2.push(yValue); + prevValue[1] = yValue; + } else { + values2.push(prevValue[1]); + } + if (zIndex !== -1) { + const zValue = curves.z.values[zIndex]; + values2.push(zValue); + prevValue[2] = zValue; + } else { + values2.push(prevValue[2]); + } + }); + return values2; + } + // Rotations are defined as Euler angles which can have values of any size + // These will be converted to quaternions which don't support values greater than + // PI, so we'll interpolate large rotations + interpolateRotations(curvex, curvey, curvez, eulerOrder) { + const times = []; + const values2 = []; + times.push(curvex.times[0]); + values2.push(MathUtils.degToRad(curvex.values[0])); + values2.push(MathUtils.degToRad(curvey.values[0])); + values2.push(MathUtils.degToRad(curvez.values[0])); + for (let i = 1; i < curvex.values.length; i++) { + const initialValue = [ + curvex.values[i - 1], + curvey.values[i - 1], + curvez.values[i - 1] + ]; + if (isNaN(initialValue[0]) || isNaN(initialValue[1]) || isNaN(initialValue[2])) { + continue; + } + const initialValueRad = initialValue.map(MathUtils.degToRad); + const currentValue = [ + curvex.values[i], + curvey.values[i], + curvez.values[i] + ]; + if (isNaN(currentValue[0]) || isNaN(currentValue[1]) || isNaN(currentValue[2])) { + continue; + } + const currentValueRad = currentValue.map(MathUtils.degToRad); + const valuesSpan = [ + currentValue[0] - initialValue[0], + currentValue[1] - initialValue[1], + currentValue[2] - initialValue[2] + ]; + const absoluteSpan = [ + Math.abs(valuesSpan[0]), + Math.abs(valuesSpan[1]), + Math.abs(valuesSpan[2]) + ]; + if (absoluteSpan[0] >= 180 || absoluteSpan[1] >= 180 || absoluteSpan[2] >= 180) { + const maxAbsSpan = Math.max(...absoluteSpan); + const numSubIntervals = maxAbsSpan / 180; + const E1 = new Euler(...initialValueRad, eulerOrder); + const E2 = new Euler(...currentValueRad, eulerOrder); + const Q1 = new Quaternion().setFromEuler(E1); + const Q22 = new Quaternion().setFromEuler(E2); + if (Q1.dot(Q22)) { + Q22.set(-Q22.x, -Q22.y, -Q22.z, -Q22.w); + } + const initialTime = curvex.times[i - 1]; + const timeSpan = curvex.times[i] - initialTime; + const Q3 = new Quaternion(); + const E3 = new Euler(); + for (let t3 = 0; t3 < 1; t3 += 1 / numSubIntervals) { + Q3.copy(Q1.clone().slerp(Q22.clone(), t3)); + times.push(initialTime + t3 * timeSpan); + E3.setFromQuaternion(Q3, eulerOrder); + values2.push(E3.x); + values2.push(E3.y); + values2.push(E3.z); + } + } else { + times.push(curvex.times[i]); + values2.push(MathUtils.degToRad(curvex.values[i])); + values2.push(MathUtils.degToRad(curvey.values[i])); + values2.push(MathUtils.degToRad(curvez.values[i])); + } + } + return [times, values2]; + } +}; +var TextParser = class { + getPrevNode() { + return this.nodeStack[this.currentIndent - 2]; + } + getCurrentNode() { + return this.nodeStack[this.currentIndent - 1]; + } + getCurrentProp() { + return this.currentProp; + } + pushStack(node) { + this.nodeStack.push(node); + this.currentIndent += 1; + } + popStack() { + this.nodeStack.pop(); + this.currentIndent -= 1; + } + setCurrentProp(val2, name2) { + this.currentProp = val2; + this.currentPropName = name2; + } + parse(text2) { + this.currentIndent = 0; + this.allNodes = new FBXTree(); + this.nodeStack = []; + this.currentProp = []; + this.currentPropName = ""; + const scope = this; + const split = text2.split(/[\r\n]+/); + split.forEach(function(line2, i) { + const matchComment = line2.match(/^[\s\t]*;/); + const matchEmpty = line2.match(/^[\s\t]*$/); + if (matchComment || matchEmpty) return; + const matchBeginning = line2.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", ""); + const matchProperty = line2.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"); + const matchEnd = line2.match("^\\t{" + (scope.currentIndent - 1) + "}}"); + if (matchBeginning) { + scope.parseNodeBegin(line2, matchBeginning); + } else if (matchProperty) { + scope.parseNodeProperty(line2, matchProperty, split[++i]); + } else if (matchEnd) { + scope.popStack(); + } else if (line2.match(/^[^\s\t}]/)) { + scope.parseNodePropertyContinued(line2); + } + }); + return this.allNodes; + } + parseNodeBegin(line2, property2) { + const nodeName = property2[1].trim().replace(/^"/, "").replace(/"$/, ""); + const nodeAttrs = property2[2].split(",").map(function(attr) { + return attr.trim().replace(/^"/, "").replace(/"$/, ""); + }); + const node = { name: nodeName }; + const attrs = this.parseNodeAttr(nodeAttrs); + const currentNode = this.getCurrentNode(); + if (this.currentIndent === 0) { + this.allNodes.add(nodeName, node); + } else { + if (nodeName in currentNode) { + if (nodeName === "PoseNode") { + currentNode.PoseNode.push(node); + } else if (currentNode[nodeName].id !== void 0) { + currentNode[nodeName] = {}; + currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName]; + } + if (attrs.id !== "") currentNode[nodeName][attrs.id] = node; + } else if (typeof attrs.id === "number") { + currentNode[nodeName] = {}; + currentNode[nodeName][attrs.id] = node; + } else if (nodeName !== "Properties70") { + if (nodeName === "PoseNode") currentNode[nodeName] = [node]; + else currentNode[nodeName] = node; + } + } + if (typeof attrs.id === "number") node.id = attrs.id; + if (attrs.name !== "") node.attrName = attrs.name; + if (attrs.type !== "") node.attrType = attrs.type; + this.pushStack(node); + } + parseNodeAttr(attrs) { + let id = attrs[0]; + if (attrs[0] !== "") { + id = parseInt(attrs[0]); + if (isNaN(id)) { + id = attrs[0]; + } + } + let name2 = "", type = ""; + if (attrs.length > 1) { + name2 = attrs[1].replace(/^(\w+)::/, ""); + type = attrs[2]; + } + return { id, name: name2, type }; + } + parseNodeProperty(line2, property2, contentLine) { + let propName = property2[1].replace(/^"/, "").replace(/"$/, "").trim(); + let propValue = property2[2].replace(/^"/, "").replace(/"$/, "").trim(); + if (propName === "Content" && propValue === ",") { + propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim(); + } + const currentNode = this.getCurrentNode(); + const parentName = currentNode.name; + if (parentName === "Properties70") { + this.parseNodeSpecialProperty(line2, propName, propValue); + return; + } + if (propName === "C") { + const connProps = propValue.split(",").slice(1); + const from = parseInt(connProps[0]); + const to = parseInt(connProps[1]); + let rest = propValue.split(",").slice(3); + rest = rest.map(function(elem2) { + return elem2.trim().replace(/^"/, ""); + }); + propName = "connections"; + propValue = [from, to]; + append(propValue, rest); + if (currentNode[propName] === void 0) { + currentNode[propName] = []; + } + } + if (propName === "Node") currentNode.id = propValue; + if (propName in currentNode && Array.isArray(currentNode[propName])) { + currentNode[propName].push(propValue); + } else { + if (propName !== "a") currentNode[propName] = propValue; + else currentNode.a = propValue; + } + this.setCurrentProp(currentNode, propName); + if (propName === "a" && propValue.slice(-1) !== ",") { + currentNode.a = parseNumberArray(propValue); + } + } + parseNodePropertyContinued(line2) { + const currentNode = this.getCurrentNode(); + currentNode.a += line2; + if (line2.slice(-1) !== ",") { + currentNode.a = parseNumberArray(currentNode.a); + } + } + // parse "Property70" + parseNodeSpecialProperty(line2, propName, propValue) { + const props = propValue.split('",').map(function(prop) { + return prop.trim().replace(/^\"/, "").replace(/\s/, "_"); + }); + const innerPropName = props[0]; + const innerPropType1 = props[1]; + const innerPropType2 = props[2]; + const innerPropFlag = props[3]; + let innerPropValue = props[4]; + switch (innerPropType1) { + case "int": + case "enum": + case "bool": + case "ULongLong": + case "double": + case "Number": + case "FieldOfView": + innerPropValue = parseFloat(innerPropValue); + break; + case "Color": + case "ColorRGB": + case "Vector3D": + case "Lcl_Translation": + case "Lcl_Rotation": + case "Lcl_Scaling": + innerPropValue = parseNumberArray(innerPropValue); + break; + } + this.getPrevNode()[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + this.setCurrentProp(this.getPrevNode(), innerPropName); + } +}; +var BinaryParser = class { + parse(buffer) { + const reader = new BinaryReader(buffer); + reader.skip(23); + const version = reader.getUint32(); + if (version < 6400) { + throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version); + } + const allNodes = new FBXTree(); + while (!this.endOfContent(reader)) { + const node = this.parseNode(reader, version); + if (node !== null) allNodes.add(node.name, node); + } + return allNodes; + } + // Check if reader has reached the end of content. + endOfContent(reader) { + if (reader.size() % 16 === 0) { + return (reader.getOffset() + 160 + 16 & ~15) >= reader.size(); + } else { + return reader.getOffset() + 160 + 16 >= reader.size(); + } + } + // recursively parse nodes until the end of the file is reached + parseNode(reader, version) { + const node = {}; + const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32(); + const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32(); + version >= 7500 ? reader.getUint64() : reader.getUint32(); + const nameLen = reader.getUint8(); + const name2 = reader.getString(nameLen); + if (endOffset === 0) return null; + const propertyList = []; + for (let i = 0; i < numProperties; i++) { + propertyList.push(this.parseProperty(reader)); + } + const id = propertyList.length > 0 ? propertyList[0] : ""; + const attrName = propertyList.length > 1 ? propertyList[1] : ""; + const attrType = propertyList.length > 2 ? propertyList[2] : ""; + node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false; + while (endOffset > reader.getOffset()) { + const subNode = this.parseNode(reader, version); + if (subNode !== null) this.parseSubNode(name2, node, subNode); + } + node.propertyList = propertyList; + if (typeof id === "number") node.id = id; + if (attrName !== "") node.attrName = attrName; + if (attrType !== "") node.attrType = attrType; + if (name2 !== "") node.name = name2; + return node; + } + parseSubNode(name2, node, subNode) { + if (subNode.singleProperty === true) { + const value2 = subNode.propertyList[0]; + if (Array.isArray(value2)) { + node[subNode.name] = subNode; + subNode.a = value2; + } else { + node[subNode.name] = value2; + } + } else if (name2 === "Connections" && subNode.name === "C") { + const array = []; + subNode.propertyList.forEach(function(property2, i) { + if (i !== 0) array.push(property2); + }); + if (node.connections === void 0) { + node.connections = []; + } + node.connections.push(array); + } else if (subNode.name === "Properties70") { + const keys2 = Object.keys(subNode); + keys2.forEach(function(key2) { + node[key2] = subNode[key2]; + }); + } else if (name2 === "Properties70" && subNode.name === "P") { + let innerPropName = subNode.propertyList[0]; + let innerPropType1 = subNode.propertyList[1]; + const innerPropType2 = subNode.propertyList[2]; + const innerPropFlag = subNode.propertyList[3]; + let innerPropValue; + if (innerPropName.indexOf("Lcl ") === 0) innerPropName = innerPropName.replace("Lcl ", "Lcl_"); + if (innerPropType1.indexOf("Lcl ") === 0) innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_"); + if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) { + innerPropValue = [ + subNode.propertyList[4], + subNode.propertyList[5], + subNode.propertyList[6] + ]; + } else { + innerPropValue = subNode.propertyList[4]; + } + node[innerPropName] = { + "type": innerPropType1, + "type2": innerPropType2, + "flag": innerPropFlag, + "value": innerPropValue + }; + } else if (node[subNode.name] === void 0) { + if (typeof subNode.id === "number") { + node[subNode.name] = {}; + node[subNode.name][subNode.id] = subNode; + } else { + node[subNode.name] = subNode; + } + } else { + if (subNode.name === "PoseNode") { + if (!Array.isArray(node[subNode.name])) { + node[subNode.name] = [node[subNode.name]]; + } + node[subNode.name].push(subNode); + } else if (node[subNode.name][subNode.id] === void 0) { + node[subNode.name][subNode.id] = subNode; + } + } + } + parseProperty(reader) { + const type = reader.getString(1); + let length2; + switch (type) { + case "C": + return reader.getBoolean(); + case "D": + return reader.getFloat64(); + case "F": + return reader.getFloat32(); + case "I": + return reader.getInt32(); + case "L": + return reader.getInt64(); + case "R": + length2 = reader.getUint32(); + return reader.getArrayBuffer(length2); + case "S": + length2 = reader.getUint32(); + return reader.getString(length2); + case "Y": + return reader.getInt16(); + case "b": + case "c": + case "d": + case "f": + case "i": + case "l": + const arrayLength = reader.getUint32(); + const encoding = reader.getUint32(); + const compressedLength = reader.getUint32(); + if (encoding === 0) { + switch (type) { + case "b": + case "c": + return reader.getBooleanArray(arrayLength); + case "d": + return reader.getFloat64Array(arrayLength); + case "f": + return reader.getFloat32Array(arrayLength); + case "i": + return reader.getInt32Array(arrayLength); + case "l": + return reader.getInt64Array(arrayLength); + } + } + const data2 = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))); + const reader2 = new BinaryReader(data2.buffer); + switch (type) { + case "b": + case "c": + return reader2.getBooleanArray(arrayLength); + case "d": + return reader2.getFloat64Array(arrayLength); + case "f": + return reader2.getFloat32Array(arrayLength); + case "i": + return reader2.getInt32Array(arrayLength); + case "l": + return reader2.getInt64Array(arrayLength); + } + break; + default: + throw new Error("THREE.FBXLoader: Unknown property type " + type); + } + } +}; +var BinaryReader = class { + constructor(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + this._textDecoder = new TextDecoder(); + } + getOffset() { + return this.offset; + } + size() { + return this.dv.buffer.byteLength; + } + skip(length2) { + this.offset += length2; + } + // seems like true/false representation depends on exporter. + // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54) + // then sees LSB. + getBoolean() { + return (this.getUint8() & 1) === 1; + } + getBooleanArray(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getBoolean()); + } + return a2; + } + getUint8() { + const value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + } + getInt16() { + const value2 = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value2; + } + getInt32() { + const value2 = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + getInt32Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getInt32()); + } + return a2; + } + getUint32() { + const value2 = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + // JavaScript doesn't support 64-bit integer so calculate this here + // 1 << 32 will return 1 so using multiply operation instead here. + // There's a possibility that this method returns wrong value if the value + // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER. + // TODO: safely handle 64-bit integer + getInt64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + if (high & 2147483648) { + high = ~high & 4294967295; + low = ~low & 4294967295; + if (low === 4294967295) high = high + 1 & 4294967295; + low = low + 1 & 4294967295; + return -(high * 4294967296 + low); + } + return high * 4294967296 + low; + } + getInt64Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getInt64()); + } + return a2; + } + // Note: see getInt64() comment + getUint64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + return high * 4294967296 + low; + } + getFloat32() { + const value2 = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value2; + } + getFloat32Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + } + getFloat64() { + const value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + } + getFloat64Array(size2) { + const a2 = []; + for (let i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + } + getArrayBuffer(size2) { + const value2 = this.dv.buffer.slice(this.offset, this.offset + size2); + this.offset += size2; + return value2; + } + getString(size2) { + const start = this.offset; + let a2 = new Uint8Array(this.dv.buffer, start, size2); + this.skip(size2); + const nullByte = a2.indexOf(0); + if (nullByte >= 0) a2 = new Uint8Array(this.dv.buffer, start, nullByte); + return this._textDecoder.decode(a2); + } +}; +var FBXTree = class { + add(key2, val2) { + this[key2] = val2; + } +}; +function isFbxFormatBinary(buffer) { + const CORRECT = "Kaydara FBX Binary \0"; + return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length); +} +function isFbxFormatASCII(text2) { + const CORRECT = ["K", "a", "y", "d", "a", "r", "a", "\\", "F", "B", "X", "\\", "B", "i", "n", "a", "r", "y", "\\", "\\"]; + let cursor = 0; + function read(offset) { + const result = text2[offset - 1]; + text2 = text2.slice(cursor + offset); + cursor++; + return result; + } + for (let i = 0; i < CORRECT.length; ++i) { + const num = read(1); + if (num === CORRECT[i]) { + return false; + } + } + return true; +} +function getFbxVersion(text2) { + const versionRegExp = /FBXVersion: (\d+)/; + const match = text2.match(versionRegExp); + if (match) { + const version = parseInt(match[1]); + return version; + } + throw new Error("THREE.FBXLoader: Cannot find the version number for the file given."); +} +function convertFBXTimeToSeconds(time2) { + return time2 / 46186158e3; +} +var dataArray = []; +function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) { + let index2; + switch (infoObject.mappingType) { + case "ByPolygonVertex": + index2 = polygonVertexIndex; + break; + case "ByPolygon": + index2 = polygonIndex; + break; + case "ByVertice": + index2 = vertexIndex; + break; + case "AllSame": + index2 = infoObject.indices[0]; + break; + default: + console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType); + } + if (infoObject.referenceType === "IndexToDirect") index2 = infoObject.indices[index2]; + const from = index2 * infoObject.dataSize; + const to = from + infoObject.dataSize; + return slice(dataArray, infoObject.buffer, from, to); +} +var tempEuler = new Euler(); +var tempVec = new Vector3(); +function generateTransform(transformData) { + const lTranslationM = new Matrix4(); + const lPreRotationM = new Matrix4(); + const lRotationM = new Matrix4(); + const lPostRotationM = new Matrix4(); + const lScalingM = new Matrix4(); + const lScalingPivotM = new Matrix4(); + const lScalingOffsetM = new Matrix4(); + const lRotationOffsetM = new Matrix4(); + const lRotationPivotM = new Matrix4(); + const lParentGX = new Matrix4(); + const lParentLX = new Matrix4(); + const lGlobalT = new Matrix4(); + const inheritType = transformData.inheritType ? transformData.inheritType : 0; + if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation)); + if (transformData.preRotation) { + const array = transformData.preRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.rotation) { + const array = transformData.rotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.postRotation) { + const array = transformData.postRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder || Euler.DEFAULT_ORDER); + lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + lPostRotationM.invert(); + } + if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); + if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset)); + if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot)); + if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset)); + if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); + if (transformData.parentMatrixWorld) { + lParentLX.copy(transformData.parentMatrix); + lParentGX.copy(transformData.parentMatrixWorld); + } + const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); + const lParentGRM = new Matrix4(); + lParentGRM.extractRotation(lParentGX); + const lParentTM = new Matrix4(); + lParentTM.copyPosition(lParentGX); + const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX); + const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM); + const lLSM = lScalingM; + const lGlobalRS = new Matrix4(); + if (inheritType === 0) { + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM); + } else if (inheritType === 1) { + lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM); + } else { + const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX)); + const lParentLSM_inv = lParentLSM.clone().invert(); + const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv); + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM); + } + const lRotationPivotM_inv = lRotationPivotM.clone().invert(); + const lScalingPivotM_inv = lScalingPivotM.clone().invert(); + let 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); + const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform); + const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo); + lGlobalT.copyPosition(lGlobalTranslation); + lTransform = lGlobalT.clone().multiply(lGlobalRS); + lTransform.premultiply(lParentGX.invert()); + return lTransform; +} +function getEulerOrder(order) { + order = order || 0; + const enums = [ + "ZYX", + // -> XYZ extrinsic + "YZX", + // -> XZY extrinsic + "XZY", + // -> YZX extrinsic + "ZXY", + // -> YXZ extrinsic + "YXZ", + // -> ZXY extrinsic + "XYZ" + // -> ZYX extrinsic + //'SphericXYZ', // not possible to support + ]; + if (order === 6) { + console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."); + return enums[0]; + } + return enums[order]; +} +function parseNumberArray(value2) { + const array = value2.split(",").map(function(val2) { + return parseFloat(val2); + }); + return array; +} +function convertArrayBufferToString(buffer, from, to) { + if (from === void 0) from = 0; + if (to === void 0) to = buffer.byteLength; + return new TextDecoder().decode(new Uint8Array(buffer, from, to)); +} +function append(a2, b3) { + for (let i = 0, j = a2.length, l2 = b3.length; i < l2; i++, j++) { + a2[j] = b3[i]; + } +} +function slice(a2, b3, from, to) { + for (let i = from, j = 0; i < to; i++, j++) { + a2[j] = b3[i]; + } + return a2; +} + +// node_modules/three/examples/jsm/loaders/FontLoader.js +var FontLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + const font = scope.parse(JSON.parse(text2)); + if (onLoad) onLoad(font); + }, onProgress, onError); + } + parse(json) { + return new Font(json); + } +}; +var Font = class { + constructor(data2) { + this.isFont = true; + this.type = "Font"; + this.data = data2; + } + generateShapes(text2, size2 = 100) { + const shapes = []; + const paths = createPaths(text2, size2, this.data); + for (let p2 = 0, pl = paths.length; p2 < pl; p2++) { + shapes.push(...paths[p2].toShapes()); + } + return shapes; + } +}; +function createPaths(text2, size2, data2) { + const chars = Array.from(text2); + const scale2 = size2 / data2.resolution; + const line_height = (data2.boundingBox.yMax - data2.boundingBox.yMin + data2.underlineThickness) * scale2; + const paths = []; + let offsetX = 0, offsetY = 0; + for (let i = 0; i < chars.length; i++) { + const char = chars[i]; + if (char === "\n") { + offsetX = 0; + offsetY -= line_height; + } else { + const ret = createPath2(char, scale2, offsetX, offsetY, data2); + offsetX += ret.offsetX; + paths.push(ret.path); + } + } + return paths; +} +function createPath2(char, scale2, offsetX, offsetY, data2) { + const glyph = data2.glyphs[char] || data2.glyphs["?"]; + if (!glyph) { + console.error('THREE.Font: character "' + char + '" does not exists in font family ' + data2.familyName + "."); + return; + } + const path = new ShapePath2(); + let x2, y2, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + if (glyph.o) { + const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(" ")); + for (let i = 0, l2 = outline.length; i < l2; ) { + const action = outline[i++]; + switch (action) { + case "m": + x2 = outline[i++] * scale2 + offsetX; + y2 = outline[i++] * scale2 + offsetY; + path.moveTo(x2, y2); + break; + case "l": + x2 = outline[i++] * scale2 + offsetX; + y2 = outline[i++] * scale2 + offsetY; + path.lineTo(x2, y2); + break; + case "q": + cpx = outline[i++] * scale2 + offsetX; + cpy = outline[i++] * scale2 + offsetY; + cpx1 = outline[i++] * scale2 + offsetX; + cpy1 = outline[i++] * scale2 + offsetY; + path.quadraticCurveTo(cpx1, cpy1, cpx, cpy); + break; + case "b": + cpx = outline[i++] * scale2 + offsetX; + cpy = outline[i++] * scale2 + offsetY; + cpx1 = outline[i++] * scale2 + offsetX; + cpy1 = outline[i++] * scale2 + offsetY; + cpx2 = outline[i++] * scale2 + offsetX; + cpy2 = outline[i++] * scale2 + offsetY; + path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy); + break; + } + } + } + return { offsetX: glyph.ha * scale2, path }; +} + +// node_modules/three/examples/jsm/loaders/GCodeLoader.js +var GCodeLoader = class extends Loader { + constructor(manager) { + super(manager); + this.splitLayer = false; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + let state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false }; + const layers = []; + let currentLayer = void 0; + const pathMaterial = new LineBasicMaterial({ color: 16711680 }); + pathMaterial.name = "path"; + const extrudingMaterial = new LineBasicMaterial({ color: 65280 }); + extrudingMaterial.name = "extruded"; + function newLayer(line2) { + currentLayer = { vertex: [], pathVertex: [], z: line2.z }; + layers.push(currentLayer); + } + function addSegment2(p1, p2) { + if (currentLayer === void 0) { + newLayer(p1); + } + if (state.extruding) { + currentLayer.vertex.push(p1.x, p1.y, p1.z); + currentLayer.vertex.push(p2.x, p2.y, p2.z); + } else { + currentLayer.pathVertex.push(p1.x, p1.y, p1.z); + currentLayer.pathVertex.push(p2.x, p2.y, p2.z); + } + } + function delta(v12, v2) { + return state.relative ? v2 : v2 - v12; + } + function absolute(v12, v2) { + return state.relative ? v12 + v2 : v2; + } + const lines = data2.replace(/;.+/g, "").split("\n"); + for (let i = 0; i < lines.length; i++) { + const tokens = lines[i].split(" "); + const cmd = tokens[0].toUpperCase(); + const args = {}; + tokens.splice(1).forEach(function(token) { + if (token[0] !== void 0) { + const key2 = token[0].toLowerCase(); + const value2 = parseFloat(token.substring(1)); + args[key2] = value2; + } + }); + if (cmd === "G0" || cmd === "G1") { + const line2 = { + x: args.x !== void 0 ? absolute(state.x, args.x) : state.x, + y: args.y !== void 0 ? absolute(state.y, args.y) : state.y, + z: args.z !== void 0 ? absolute(state.z, args.z) : state.z, + e: args.e !== void 0 ? absolute(state.e, args.e) : state.e, + f: args.f !== void 0 ? absolute(state.f, args.f) : state.f + }; + if (delta(state.e, line2.e) > 0) { + state.extruding = delta(state.e, line2.e) > 0; + if (currentLayer == void 0 || line2.z != currentLayer.z) { + newLayer(line2); + } + } + addSegment2(state, line2); + state = line2; + } else if (cmd === "G2" || cmd === "G3") { + } else if (cmd === "G90") { + state.relative = false; + } else if (cmd === "G91") { + state.relative = true; + } else if (cmd === "G92") { + const line2 = state; + line2.x = args.x !== void 0 ? args.x : line2.x; + line2.y = args.y !== void 0 ? args.y : line2.y; + line2.z = args.z !== void 0 ? args.z : line2.z; + line2.e = args.e !== void 0 ? args.e : line2.e; + } else { + } + } + function addObject(vertex, extruding, i) { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertex, 3)); + const segments = new LineSegments(geometry, extruding ? extrudingMaterial : pathMaterial); + segments.name = "layer" + i; + object.add(segments); + } + const object = new Group(); + object.name = "gcode"; + if (this.splitLayer) { + for (let i = 0; i < layers.length; i++) { + const layer = layers[i]; + addObject(layer.vertex, true, i); + addObject(layer.pathVertex, false, i); + } + } else { + const vertex = [], pathVertex = []; + for (let i = 0; i < layers.length; i++) { + const layer = layers[i]; + const layerVertex = layer.vertex; + const layerPathVertex = layer.pathVertex; + for (let j = 0; j < layerVertex.length; j++) { + vertex.push(layerVertex[j]); + } + for (let j = 0; j < layerPathVertex.length; j++) { + pathVertex.push(layerPathVertex[j]); + } + } + addObject(vertex, true, layers.length); + addObject(pathVertex, false, layers.length); + } + object.rotation.set(-Math.PI / 2, 0, 0); + return object; + } +}; + +// node_modules/three/examples/jsm/loaders/GLTFLoader.js +var GLTFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.dracoLoader = null; + this.ktx2Loader = null; + this.meshoptDecoder = null; + this.pluginCallbacks = []; + this.register(function(parser) { + return new GLTFMaterialsClearcoatExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsDispersionExtension2(parser); + }); + this.register(function(parser) { + return new GLTFTextureBasisUExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureWebPExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureAVIFExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSheenExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsTransmissionExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsVolumeExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIorExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsEmissiveStrengthExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSpecularExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIridescenceExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsAnisotropyExtension2(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsBumpExtension2(parser); + }); + this.register(function(parser) { + return new GLTFLightsExtension(parser); + }); + this.register(function(parser) { + return new GLTFMeshoptCompression(parser); + }); + this.register(function(parser) { + return new GLTFMeshGpuInstancing2(parser); + }); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + let resourcePath; + if (this.resourcePath !== "") { + resourcePath = this.resourcePath; + } else if (this.path !== "") { + const relativeUrl = LoaderUtils.extractUrlBase(url); + resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); + } else { + resourcePath = LoaderUtils.extractUrlBase(url); + } + this.manager.itemStart(url); + const _onError = function(e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data2) { + try { + scope.parse(data2, resourcePath, function(gltf) { + onLoad(gltf); + scope.manager.itemEnd(url); + }, _onError); + } catch (e) { + _onError(e); + } + }, onProgress, _onError); + } + setDRACOLoader(dracoLoader) { + this.dracoLoader = dracoLoader; + return this; + } + setDDSLoader() { + throw new Error( + 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".' + ); + } + setKTX2Loader(ktx2Loader) { + this.ktx2Loader = ktx2Loader; + return this; + } + setMeshoptDecoder(meshoptDecoder) { + this.meshoptDecoder = meshoptDecoder; + return this; + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) { + this.pluginCallbacks.push(callback); + } + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) { + this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + } + return this; + } + parse(data2, path, onLoad, onError) { + let json; + const extensions = {}; + const plugins = {}; + const textDecoder = new TextDecoder(); + if (typeof data2 === "string") { + json = JSON.parse(data2); + } else if (data2 instanceof ArrayBuffer) { + const magic = textDecoder.decode(new Uint8Array(data2, 0, 4)); + if (magic === BINARY_EXTENSION_HEADER_MAGIC) { + try { + extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data2); + } catch (error) { + if (onError) onError(error); + return; + } + json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); + } else { + json = JSON.parse(textDecoder.decode(data2)); + } + } else { + json = data2; + } + if (json.asset === void 0 || json.asset.version[0] < 2) { + if (onError) onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + return; + } + const parser = new GLTFParser(json, { + path: path || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + parser.fileLoader.setRequestHeader(this.requestHeader); + for (let i = 0; i < this.pluginCallbacks.length; i++) { + const plugin = this.pluginCallbacks[i](parser); + if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); + plugins[plugin.name] = plugin; + extensions[plugin.name] = true; + } + if (json.extensionsUsed) { + for (let i = 0; i < json.extensionsUsed.length; ++i) { + const extensionName = json.extensionsUsed[i]; + const extensionsRequired = json.extensionsRequired || []; + switch (extensionName) { + case EXTENSIONS.KHR_MATERIALS_UNLIT: + extensions[extensionName] = new GLTFMaterialsUnlitExtension2(); + break; + case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: + extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); + break; + case EXTENSIONS.KHR_TEXTURE_TRANSFORM: + extensions[extensionName] = new GLTFTextureTransformExtension(); + break; + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[extensionName] = new GLTFMeshQuantizationExtension(); + break; + default: + if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) { + console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".'); + } + } + } + } + parser.setExtensions(extensions); + parser.setPlugins(plugins); + parser.parse(onLoad, onError); + } + parseAsync(data2, path) { + const scope = this; + return new Promise(function(resolve, reject2) { + scope.parse(data2, path, resolve, reject2); + }); + } +}; +function GLTFRegistry() { + let objects = {}; + return { + get: function(key2) { + return objects[key2]; + }, + add: function(key2, object) { + objects[key2] = object; + }, + remove: function(key2) { + delete objects[key2]; + }, + removeAll: function() { + objects = {}; + } + }; +} +var EXTENSIONS = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" +}; +var GLTFLightsExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; + this.cache = { refs: {}, uses: {} }; + } + _markDefs() { + const parser = this.parser; + const nodeDefs = this.parser.json.nodes || []; + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) { + parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); + } + } + } + _loadLight(lightIndex) { + const parser = this.parser; + const cacheKey = "light:" + lightIndex; + let dependency = parser.cache.get(cacheKey); + if (dependency) return dependency; + const json = parser.json; + const extensions = json.extensions && json.extensions[this.name] || {}; + const lightDefs = extensions.lights || []; + const lightDef = lightDefs[lightIndex]; + let lightNode; + const color = new Color(16777215); + if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace); + const range = lightDef.range !== void 0 ? lightDef.range : 0; + switch (lightDef.type) { + case "directional": + lightNode = new DirectionalLight(color); + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + case "point": + lightNode = new PointLight(color); + lightNode.distance = range; + break; + case "spot": + lightNode = new SpotLight(color); + lightNode.distance = range; + lightDef.spot = lightDef.spot || {}; + lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; + lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; + lightNode.angle = lightDef.spot.outerConeAngle; + lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + default: + throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); + } + lightNode.position.set(0, 0, 0); + lightNode.decay = 2; + assignExtrasToUserData(lightNode, lightDef); + if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; + lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); + dependency = Promise.resolve(lightNode); + parser.cache.add(cacheKey, dependency); + return dependency; + } + getDependency(type, index2) { + if (type !== "light") return; + return this._loadLight(index2); + } + createNodeAttachment(nodeIndex) { + const self2 = this; + const parser = this.parser; + const json = parser.json; + const nodeDef = json.nodes[nodeIndex]; + const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {}; + const lightIndex = lightDef.light; + if (lightIndex === void 0) return null; + return this._loadLight(lightIndex).then(function(light) { + return parser._getNodeRef(self2.cache, lightIndex, light); + }); + } +}; +var GLTFMaterialsUnlitExtension2 = class { + constructor() { + this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; + } + getMaterialType() { + return MeshBasicMaterial; + } + extendParams(materialParams, materialDef, parser) { + const pending = []; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + const metallicRoughness = materialDef.pbrMetallicRoughness; + if (metallicRoughness) { + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + } + return Promise.all(pending); + } +}; +var GLTFMaterialsEmissiveStrengthExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; + if (emissiveStrength !== void 0) { + materialParams.emissiveIntensity = emissiveStrength; + } + return Promise.resolve(); + } +}; +var GLTFMaterialsClearcoatExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.clearcoatFactor !== void 0) { + materialParams.clearcoat = extension.clearcoatFactor; + } + if (extension.clearcoatTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); + } + if (extension.clearcoatRoughnessFactor !== void 0) { + materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; + } + if (extension.clearcoatRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); + } + if (extension.clearcoatNormalTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); + if (extension.clearcoatNormalTexture.scale !== void 0) { + const scale2 = extension.clearcoatNormalTexture.scale; + materialParams.clearcoatNormalScale = new Vector2(scale2, scale2); + } + } + return Promise.all(pending); + } +}; +var GLTFMaterialsDispersionExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; + return Promise.resolve(); + } +}; +var GLTFMaterialsIridescenceExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.iridescenceFactor !== void 0) { + materialParams.iridescence = extension.iridescenceFactor; + } + if (extension.iridescenceTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); + } + if (extension.iridescenceIor !== void 0) { + materialParams.iridescenceIOR = extension.iridescenceIor; + } + if (materialParams.iridescenceThicknessRange === void 0) { + materialParams.iridescenceThicknessRange = [100, 400]; + } + if (extension.iridescenceThicknessMinimum !== void 0) { + materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; + } + if (extension.iridescenceThicknessMaximum !== void 0) { + materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; + } + if (extension.iridescenceThicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsSheenExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + materialParams.sheenColor = new Color(0, 0, 0); + materialParams.sheenRoughness = 0; + materialParams.sheen = 1; + const extension = materialDef.extensions[this.name]; + if (extension.sheenColorFactor !== void 0) { + const colorFactor = extension.sheenColorFactor; + materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace); + } + if (extension.sheenRoughnessFactor !== void 0) { + materialParams.sheenRoughness = extension.sheenRoughnessFactor; + } + if (extension.sheenColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace)); + } + if (extension.sheenRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsTransmissionExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.transmissionFactor !== void 0) { + materialParams.transmission = extension.transmissionFactor; + } + if (extension.transmissionTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsVolumeExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; + if (extension.thicknessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); + } + materialParams.attenuationDistance = extension.attenuationDistance || Infinity; + const colorArray = extension.attenuationColor || [1, 1, 1]; + materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + return Promise.all(pending); + } +}; +var GLTFMaterialsIorExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IOR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const extension = materialDef.extensions[this.name]; + materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; + return Promise.resolve(); + } +}; +var GLTFMaterialsSpecularExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; + if (extension.specularTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); + } + const colorArray = extension.specularColorFactor || [1, 1, 1]; + materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); + if (extension.specularColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsBumpExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_MATERIALS_BUMP; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; + if (extension.bumpTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsAnisotropyExtension2 = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; + } + getMaterialType(materialIndex) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) { + return Promise.resolve(); + } + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.anisotropyStrength !== void 0) { + materialParams.anisotropy = extension.anisotropyStrength; + } + if (extension.anisotropyRotation !== void 0) { + materialParams.anisotropyRotation = extension.anisotropyRotation; + } + if (extension.anisotropyTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); + } + return Promise.all(pending); + } +}; +var GLTFTextureBasisUExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_TEXTURE_BASISU; + } + loadTexture(textureIndex) { + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[this.name]) { + return null; + } + const extension = textureDef.extensions[this.name]; + const loader = parser.options.ktx2Loader; + if (!loader) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + } else { + return null; + } + } + return parser.loadTextureImage(textureIndex, extension.source, loader); + } +}; +var GLTFTextureWebPExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_WEBP; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name2 = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name2]) { + return null; + } + const extension = textureDef.extensions[name2]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name2) >= 0) { + throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +}; +var GLTFTextureAVIFExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_AVIF; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name2 = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name2]) { + return null; + } + const extension = textureDef.extensions[name2]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name2) >= 0) { + throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + } + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) { + this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + } + return this.isSupported; + } +}; +var GLTFMeshoptCompression = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; + this.parser = parser; + } + loadBufferView(index2) { + const json = this.parser.json; + const bufferView = json.bufferViews[index2]; + if (bufferView.extensions && bufferView.extensions[this.name]) { + const extensionDef = bufferView.extensions[this.name]; + const buffer = this.parser.getDependency("buffer", extensionDef.buffer); + const decoder = this.parser.options.meshoptDecoder; + if (!decoder || !decoder.supported) { + if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { + throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + } else { + return null; + } + } + return buffer.then(function(res) { + const byteOffset = extensionDef.byteOffset || 0; + const byteLength = extensionDef.byteLength || 0; + const count = extensionDef.count; + const stride = extensionDef.byteStride; + const source = new Uint8Array(res, byteOffset, byteLength); + if (decoder.decodeGltfBufferAsync) { + return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { + return res2.buffer; + }); + } else { + return decoder.ready.then(function() { + const result = new ArrayBuffer(count * stride); + decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); + return result; + }); + } + }); + } else { + return null; + } + } +}; +var GLTFMeshGpuInstancing2 = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; + this.parser = parser; + } + createNodeMesh(nodeIndex) { + const json = this.parser.json; + const nodeDef = json.nodes[nodeIndex]; + if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) { + return null; + } + const meshDef = json.meshes[nodeDef.mesh]; + for (const primitive of meshDef.primitives) { + if (primitive.mode !== WEBGL_CONSTANTS2.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS2.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS2.TRIANGLE_FAN && primitive.mode !== void 0) { + return null; + } + } + const extensionDef = nodeDef.extensions[this.name]; + const attributesDef = extensionDef.attributes; + const pending = []; + const attributes = {}; + for (const key2 in attributesDef) { + pending.push(this.parser.getDependency("accessor", attributesDef[key2]).then((accessor) => { + attributes[key2] = accessor; + return attributes[key2]; + })); + } + if (pending.length < 1) { + return null; + } + pending.push(this.parser.createNodeMesh(nodeIndex)); + return Promise.all(pending).then((results) => { + const nodeObject = results.pop(); + const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; + const count = results[0].count; + const instancedMeshes = []; + for (const mesh of meshes) { + const m = new Matrix4(); + const p2 = new Vector3(); + const q2 = new Quaternion(); + const s = new Vector3(1, 1, 1); + const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); + for (let i = 0; i < count; i++) { + if (attributes.TRANSLATION) { + p2.fromBufferAttribute(attributes.TRANSLATION, i); + } + if (attributes.ROTATION) { + q2.fromBufferAttribute(attributes.ROTATION, i); + } + if (attributes.SCALE) { + s.fromBufferAttribute(attributes.SCALE, i); + } + instancedMesh.setMatrixAt(i, m.compose(p2, q2, s)); + } + for (const attributeName in attributes) { + if (attributeName === "_COLOR_0") { + const attr = attributes[attributeName]; + instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); + } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") { + mesh.geometry.setAttribute(attributeName, attributes[attributeName]); + } + } + Object3D.prototype.copy.call(instancedMesh, mesh); + this.parser.assignFinalMaterial(instancedMesh); + instancedMeshes.push(instancedMesh); + } + if (nodeObject.isGroup) { + nodeObject.clear(); + nodeObject.add(...instancedMeshes); + return nodeObject; + } + return instancedMeshes[0]; + }); + } +}; +var BINARY_EXTENSION_HEADER_MAGIC = "glTF"; +var BINARY_EXTENSION_HEADER_LENGTH = 12; +var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 }; +var GLTFBinaryExtension = class { + constructor(data2) { + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + const headerView = new DataView(data2, 0, BINARY_EXTENSION_HEADER_LENGTH); + const textDecoder = new TextDecoder(); + this.header = { + magic: textDecoder.decode(new Uint8Array(data2.slice(0, 4))), + version: headerView.getUint32(4, true), + length: headerView.getUint32(8, true) + }; + if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) { + throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + } else if (this.header.version < 2) { + throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + } + const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; + const chunkView = new DataView(data2, BINARY_EXTENSION_HEADER_LENGTH); + let chunkIndex = 0; + while (chunkIndex < chunkContentsLength) { + const chunkLength = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + const chunkType = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { + const contentArray = new Uint8Array(data2, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); + this.content = textDecoder.decode(contentArray); + } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { + const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data2.slice(byteOffset, byteOffset + chunkLength); + } + chunkIndex += chunkLength; + } + if (this.content === null) { + throw new Error("THREE.GLTFLoader: JSON content not found."); + } + } +}; +var GLTFDracoMeshCompressionExtension = class { + constructor(json, dracoLoader) { + if (!dracoLoader) { + throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + } + this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; + this.json = json; + this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); + } + decodePrimitive(primitive, parser) { + const json = this.json; + const dracoLoader = this.dracoLoader; + const bufferViewIndex = primitive.extensions[this.name].bufferView; + const gltfAttributeMap = primitive.extensions[this.name].attributes; + const threeAttributeMap = {}; + const attributeNormalizedMap = {}; + const attributeTypeMap = {}; + for (const attributeName in gltfAttributeMap) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; + } + for (const attributeName in primitive.attributes) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + if (gltfAttributeMap[attributeName] !== void 0) { + const accessorDef = json.accessors[primitive.attributes[attributeName]]; + const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + attributeTypeMap[threeAttributeName] = componentType.name; + attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; + } + } + return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { + return new Promise(function(resolve, reject2) { + dracoLoader.decodeDracoFile(bufferView, function(geometry) { + for (const attributeName in geometry.attributes) { + const attribute = geometry.attributes[attributeName]; + const normalized = attributeNormalizedMap[attributeName]; + if (normalized !== void 0) attribute.normalized = normalized; + } + resolve(geometry); + }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject2); + }); + }); + } +}; +var GLTFTextureTransformExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; + } + extendTexture(texture, transform2) { + if ((transform2.texCoord === void 0 || transform2.texCoord === texture.channel) && transform2.offset === void 0 && transform2.rotation === void 0 && transform2.scale === void 0) { + return texture; + } + texture = texture.clone(); + if (transform2.texCoord !== void 0) { + texture.channel = transform2.texCoord; + } + if (transform2.offset !== void 0) { + texture.offset.fromArray(transform2.offset); + } + if (transform2.rotation !== void 0) { + texture.rotation = transform2.rotation; + } + if (transform2.scale !== void 0) { + texture.repeat.fromArray(transform2.scale); + } + texture.needsUpdate = true; + return texture; + } +}; +var GLTFMeshQuantizationExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + } +}; +var GLTFCubicSplineInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + copySampleValue_(index2) { + const result = this.resultBuffer, values2 = this.sampleValues, valueSize = this.valueSize, offset = index2 * valueSize * 3 + valueSize; + for (let i = 0; i !== valueSize; i++) { + result[i] = values2[offset + i]; + } + return result; + } + interpolate_(i1, t0, t3, t1) { + const result = this.resultBuffer; + const values2 = this.sampleValues; + const stride = this.valueSize; + const stride2 = stride * 2; + const stride3 = stride * 3; + const td2 = t1 - t0; + const p2 = (t3 - t0) / td2; + const pp = p2 * p2; + const ppp = pp * p2; + const offset1 = i1 * stride3; + const offset0 = offset1 - stride3; + const s2 = -2 * ppp + 3 * pp; + const s3 = ppp - pp; + const s0 = 1 - s2; + const s1 = s3 - pp + p2; + for (let i = 0; i !== stride; i++) { + const p0 = values2[offset0 + i + stride]; + const m0 = values2[offset0 + i + stride2] * td2; + const p1 = values2[offset1 + i + stride]; + const m1 = values2[offset1 + i] * td2; + result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; + } + return result; + } +}; +var _q3 = new Quaternion(); +var GLTFCubicSplineQuaternionInterpolant = class extends GLTFCubicSplineInterpolant { + interpolate_(i1, t0, t3, t1) { + const result = super.interpolate_(i1, t0, t3, t1); + _q3.fromArray(result).normalize().toArray(result); + return result; + } +}; +var WEBGL_CONSTANTS2 = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 +}; +var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array +}; +var WEBGL_FILTERS = { + 9728: NearestFilter, + 9729: LinearFilter, + 9984: NearestMipmapNearestFilter, + 9985: LinearMipmapNearestFilter, + 9986: NearestMipmapLinearFilter, + 9987: LinearMipmapLinearFilter +}; +var WEBGL_WRAPPINGS = { + 33071: ClampToEdgeWrapping, + 33648: MirroredRepeatWrapping, + 10497: RepeatWrapping +}; +var WEBGL_TYPE_SIZES = { + "SCALAR": 1, + "VEC2": 2, + "VEC3": 3, + "VEC4": 4, + "MAT2": 4, + "MAT3": 9, + "MAT4": 16 +}; +var ATTRIBUTES = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3", + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" +}; +var PATH_PROPERTIES2 = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" +}; +var INTERPOLATION = { + CUBICSPLINE: void 0, + // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each + // keyframe track will be initialized with a default interpolation type, then modified. + LINEAR: InterpolateLinear, + STEP: InterpolateDiscrete +}; +var ALPHA_MODES = { + OPAQUE: "OPAQUE", + MASK: "MASK", + BLEND: "BLEND" +}; +function createDefaultMaterial(cache) { + if (cache["DefaultMaterial"] === void 0) { + cache["DefaultMaterial"] = new MeshStandardMaterial({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: FrontSide + }); + } + return cache["DefaultMaterial"]; +} +function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { + for (const name2 in objectDef.extensions) { + if (knownExtensions[name2] === void 0) { + object.userData.gltfExtensions = object.userData.gltfExtensions || {}; + object.userData.gltfExtensions[name2] = objectDef.extensions[name2]; + } + } +} +function assignExtrasToUserData(object, gltfDef) { + if (gltfDef.extras !== void 0) { + if (typeof gltfDef.extras === "object") { + Object.assign(object.userData, gltfDef.extras); + } else { + console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); + } + } +} +function addMorphTargets(geometry, targets, parser) { + let hasMorphPosition = false; + let hasMorphNormal = false; + let hasMorphColor = false; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) hasMorphPosition = true; + if (target.NORMAL !== void 0) hasMorphNormal = true; + if (target.COLOR_0 !== void 0) hasMorphColor = true; + if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; + } + if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); + const pendingPositionAccessors = []; + const pendingNormalAccessors = []; + const pendingColorAccessors = []; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (hasMorphPosition) { + const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; + pendingPositionAccessors.push(pendingAccessor); + } + if (hasMorphNormal) { + const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; + pendingNormalAccessors.push(pendingAccessor); + } + if (hasMorphColor) { + const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; + pendingColorAccessors.push(pendingAccessor); + } + } + return Promise.all([ + Promise.all(pendingPositionAccessors), + Promise.all(pendingNormalAccessors), + Promise.all(pendingColorAccessors) + ]).then(function(accessors) { + const morphPositions = accessors[0]; + const morphNormals = accessors[1]; + const morphColors = accessors[2]; + if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; + if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; + if (hasMorphColor) geometry.morphAttributes.color = morphColors; + geometry.morphTargetsRelative = true; + return geometry; + }); +} +function updateMorphTargets(mesh, meshDef) { + mesh.updateMorphTargets(); + if (meshDef.weights !== void 0) { + for (let i = 0, il = meshDef.weights.length; i < il; i++) { + mesh.morphTargetInfluences[i] = meshDef.weights[i]; + } + } + if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { + const targetNames = meshDef.extras.targetNames; + if (mesh.morphTargetInfluences.length === targetNames.length) { + mesh.morphTargetDictionary = {}; + for (let i = 0, il = targetNames.length; i < il; i++) { + mesh.morphTargetDictionary[targetNames[i]] = i; + } + } else { + console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); + } + } +} +function createPrimitiveKey(primitiveDef) { + let geometryKey; + const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; + if (dracoExtension) { + geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); + } else { + geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; + } + if (primitiveDef.targets !== void 0) { + for (let i = 0, il = primitiveDef.targets.length; i < il; i++) { + geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); + } + } + return geometryKey; +} +function createAttributesKey(attributes) { + let attributesKey = ""; + const keys2 = Object.keys(attributes).sort(); + for (let i = 0, il = keys2.length; i < il; i++) { + attributesKey += keys2[i] + ":" + attributes[keys2[i]] + ";"; + } + return attributesKey; +} +function getNormalizedComponentScale(constructor) { + switch (constructor) { + case Int8Array: + return 1 / 127; + case Uint8Array: + return 1 / 255; + case Int16Array: + return 1 / 32767; + case Uint16Array: + return 1 / 65535; + default: + throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); + } +} +function getImageURIMimeType(uri) { + if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; + if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; + return "image/png"; +} +var _identityMatrix = new Matrix4(); +var GLTFParser = class { + constructor(json = {}, options = {}) { + this.json = json; + this.extensions = {}; + this.plugins = {}; + this.options = options; + this.cache = new GLTFRegistry(); + this.associations = /* @__PURE__ */ new Map(); + this.primitiveCache = {}; + this.nodeCache = {}; + this.meshCache = { refs: {}, uses: {} }; + this.cameraCache = { refs: {}, uses: {} }; + this.lightCache = { refs: {}, uses: {} }; + this.sourceCache = {}; + this.textureCache = {}; + this.nodeNamesUsed = {}; + let isSafari2 = false; + let safariVersion = -1; + let isFirefox = false; + let firefoxVersion = -1; + if (typeof navigator !== "undefined") { + const userAgent = navigator.userAgent; + isSafari2 = /^((?!chrome|android).)*safari/i.test(userAgent) === true; + const safariMatch = userAgent.match(/Version\/(\d+)/); + safariVersion = isSafari2 && safariMatch ? parseInt(safariMatch[1], 10) : -1; + isFirefox = userAgent.indexOf("Firefox") > -1; + firefoxVersion = isFirefox ? userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; + } + if (typeof createImageBitmap === "undefined" || isSafari2 && safariVersion < 17 || isFirefox && firefoxVersion < 98) { + this.textureLoader = new TextureLoader(this.options.manager); + } else { + this.textureLoader = new ImageBitmapLoader(this.options.manager); + } + this.textureLoader.setCrossOrigin(this.options.crossOrigin); + this.textureLoader.setRequestHeader(this.options.requestHeader); + this.fileLoader = new FileLoader(this.options.manager); + this.fileLoader.setResponseType("arraybuffer"); + if (this.options.crossOrigin === "use-credentials") { + this.fileLoader.setWithCredentials(true); + } + } + setExtensions(extensions) { + this.extensions = extensions; + } + setPlugins(plugins) { + this.plugins = plugins; + } + parse(onLoad, onError) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + this.cache.removeAll(); + this.nodeCache = {}; + this._invokeAll(function(ext) { + return ext._markDefs && ext._markDefs(); + }); + Promise.all(this._invokeAll(function(ext) { + return ext.beforeRoot && ext.beforeRoot(); + })).then(function() { + return Promise.all([ + parser.getDependencies("scene"), + parser.getDependencies("animation"), + parser.getDependencies("camera") + ]); + }).then(function(dependencies) { + const result = { + scene: dependencies[0][json.scene || 0], + scenes: dependencies[0], + animations: dependencies[1], + cameras: dependencies[2], + asset: json.asset, + parser, + userData: {} + }; + addUnknownExtensionsToUserData(extensions, result, json); + assignExtrasToUserData(result, json); + return Promise.all(parser._invokeAll(function(ext) { + return ext.afterRoot && ext.afterRoot(result); + })).then(function() { + for (const scene of result.scenes) { + scene.updateMatrixWorld(); + } + onLoad(result); + }); + }).catch(onError); + } + /** + * Marks the special nodes/meshes in json for efficient parse. + */ + _markDefs() { + const nodeDefs = this.json.nodes || []; + const skinDefs = this.json.skins || []; + const meshDefs = this.json.meshes || []; + for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { + const joints = skinDefs[skinIndex].joints; + for (let i = 0, il = joints.length; i < il; i++) { + nodeDefs[joints[i]].isBone = true; + } + } + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.mesh !== void 0) { + this._addNodeRef(this.meshCache, nodeDef.mesh); + if (nodeDef.skin !== void 0) { + meshDefs[nodeDef.mesh].isSkinnedMesh = true; + } + } + if (nodeDef.camera !== void 0) { + this._addNodeRef(this.cameraCache, nodeDef.camera); + } + } + } + /** + * Counts references to shared node / Object3D resources. These resources + * can be reused, or "instantiated", at multiple nodes in the scene + * hierarchy. Mesh, Camera, and Light instances are instantiated and must + * be marked. Non-scenegraph resources (like Materials, Geometries, and + * Textures) can be reused directly and are not marked here. + * + * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. + */ + _addNodeRef(cache, index2) { + if (index2 === void 0) return; + if (cache.refs[index2] === void 0) { + cache.refs[index2] = cache.uses[index2] = 0; + } + cache.refs[index2]++; + } + /** Returns a reference to a shared resource, cloning it if necessary. */ + _getNodeRef(cache, index2, object) { + if (cache.refs[index2] <= 1) return object; + const ref = object.clone(); + const updateMappings = (original, clone2) => { + const mappings = this.associations.get(original); + if (mappings != null) { + this.associations.set(clone2, mappings); + } + for (const [i, child] of original.children.entries()) { + updateMappings(child, clone2.children[i]); + } + }; + updateMappings(object, ref); + ref.name += "_instance_" + cache.uses[index2]++; + return ref; + } + _invokeOne(func) { + const extensions = Object.values(this.plugins); + extensions.push(this); + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) return result; + } + return null; + } + _invokeAll(func) { + const extensions = Object.values(this.plugins); + extensions.unshift(this); + const pending = []; + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) pending.push(result); + } + return pending; + } + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + getDependency(type, index2) { + const cacheKey = type + ":" + index2; + let dependency = this.cache.get(cacheKey); + if (!dependency) { + switch (type) { + case "scene": + dependency = this.loadScene(index2); + break; + case "node": + dependency = this._invokeOne(function(ext) { + return ext.loadNode && ext.loadNode(index2); + }); + break; + case "mesh": + dependency = this._invokeOne(function(ext) { + return ext.loadMesh && ext.loadMesh(index2); + }); + break; + case "accessor": + dependency = this.loadAccessor(index2); + break; + case "bufferView": + dependency = this._invokeOne(function(ext) { + return ext.loadBufferView && ext.loadBufferView(index2); + }); + break; + case "buffer": + dependency = this.loadBuffer(index2); + break; + case "material": + dependency = this._invokeOne(function(ext) { + return ext.loadMaterial && ext.loadMaterial(index2); + }); + break; + case "texture": + dependency = this._invokeOne(function(ext) { + return ext.loadTexture && ext.loadTexture(index2); + }); + break; + case "skin": + dependency = this.loadSkin(index2); + break; + case "animation": + dependency = this._invokeOne(function(ext) { + return ext.loadAnimation && ext.loadAnimation(index2); + }); + break; + case "camera": + dependency = this.loadCamera(index2); + break; + default: + dependency = this._invokeOne(function(ext) { + return ext != this && ext.getDependency && ext.getDependency(type, index2); + }); + if (!dependency) { + throw new Error("Unknown type: " + type); + } + break; + } + this.cache.add(cacheKey, dependency); + } + return dependency; + } + /** + * Requests all dependencies of the specified type asynchronously, with caching. + * @param {string} type + * @return {Promise>} + */ + getDependencies(type) { + let dependencies = this.cache.get(type); + if (!dependencies) { + const parser = this; + const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; + dependencies = Promise.all(defs.map(function(def, index2) { + return parser.getDependency(type, index2); + })); + this.cache.add(type, dependencies); + } + return dependencies; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + loadBuffer(bufferIndex) { + const bufferDef = this.json.buffers[bufferIndex]; + const loader = this.fileLoader; + if (bufferDef.type && bufferDef.type !== "arraybuffer") { + throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); + } + if (bufferDef.uri === void 0 && bufferIndex === 0) { + return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); + } + const options = this.options; + return new Promise(function(resolve, reject2) { + loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { + reject2(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".')); + }); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + loadBufferView(bufferViewIndex) { + const bufferViewDef = this.json.bufferViews[bufferViewIndex]; + return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { + const byteLength = bufferViewDef.byteLength || 0; + const byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice(byteOffset, byteOffset + byteLength); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors + * @param {number} accessorIndex + * @return {Promise} + */ + loadAccessor(accessorIndex) { + const parser = this; + const json = this.json; + const accessorDef = this.json.accessors[accessorIndex]; + if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const normalized = accessorDef.normalized === true; + const array = new TypedArray(accessorDef.count * itemSize); + return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); + } + const pendingBufferViews = []; + if (accessorDef.bufferView !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); + } else { + pendingBufferViews.push(null); + } + if (accessorDef.sparse !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); + } + return Promise.all(pendingBufferViews).then(function(bufferViews) { + const bufferView = bufferViews[0]; + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const elementBytes = TypedArray.BYTES_PER_ELEMENT; + const itemBytes = elementBytes * itemSize; + const byteOffset = accessorDef.byteOffset || 0; + const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; + const normalized = accessorDef.normalized === true; + let array, bufferAttribute; + if (byteStride && byteStride !== itemBytes) { + const ibSlice = Math.floor(byteOffset / byteStride); + const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; + let ib = parser.cache.get(ibCacheKey); + if (!ib) { + array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); + ib = new InterleavedBuffer(array, byteStride / elementBytes); + parser.cache.add(ibCacheKey, ib); + } + bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); + } else { + if (bufferView === null) { + array = new TypedArray(accessorDef.count * itemSize); + } else { + array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); + } + bufferAttribute = new BufferAttribute(array, itemSize, normalized); + } + if (accessorDef.sparse !== void 0) { + const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; + const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; + const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; + const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; + const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); + const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); + if (bufferView !== null) { + bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); + } + for (let i = 0, il = sparseIndices.length; i < il; i++) { + const index2 = sparseIndices[i]; + bufferAttribute.setX(index2, sparseValues[i * itemSize]); + if (itemSize >= 2) bufferAttribute.setY(index2, sparseValues[i * itemSize + 1]); + if (itemSize >= 3) bufferAttribute.setZ(index2, sparseValues[i * itemSize + 2]); + if (itemSize >= 4) bufferAttribute.setW(index2, sparseValues[i * itemSize + 3]); + if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); + } + } + return bufferAttribute; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + loadTexture(textureIndex) { + const json = this.json; + const options = this.options; + const textureDef = json.textures[textureIndex]; + const sourceIndex = textureDef.source; + const sourceDef = json.images[sourceIndex]; + let loader = this.textureLoader; + if (sourceDef.uri) { + const handler = options.manager.getHandler(sourceDef.uri); + if (handler !== null) loader = handler; + } + return this.loadTextureImage(textureIndex, sourceIndex, loader); + } + loadTextureImage(textureIndex, sourceIndex, loader) { + const parser = this; + const json = this.json; + const textureDef = json.textures[textureIndex]; + const sourceDef = json.images[sourceIndex]; + const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; + if (this.textureCache[cacheKey]) { + return this.textureCache[cacheKey]; + } + const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { + texture.flipY = false; + texture.name = textureDef.name || sourceDef.name || ""; + if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) { + texture.name = sourceDef.uri; + } + const samplers = json.samplers || {}; + const sampler = samplers[textureDef.sampler] || {}; + texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter; + texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping; + parser.associations.set(texture, { textures: textureIndex }); + return texture; + }).catch(function() { + return null; + }); + this.textureCache[cacheKey] = promise; + return promise; + } + loadImageSource(sourceIndex, loader) { + const parser = this; + const json = this.json; + const options = this.options; + if (this.sourceCache[sourceIndex] !== void 0) { + return this.sourceCache[sourceIndex].then((texture) => texture.clone()); + } + const sourceDef = json.images[sourceIndex]; + const URL2 = self.URL || self.webkitURL; + let sourceURI = sourceDef.uri || ""; + let isObjectURL = false; + if (sourceDef.bufferView !== void 0) { + sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { + isObjectURL = true; + const blob = new Blob([bufferView], { type: sourceDef.mimeType }); + sourceURI = URL2.createObjectURL(blob); + return sourceURI; + }); + } else if (sourceDef.uri === void 0) { + throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); + } + const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { + return new Promise(function(resolve, reject2) { + let onLoad = resolve; + if (loader.isImageBitmapLoader === true) { + onLoad = function(imageBitmap) { + const texture = new Texture(imageBitmap); + texture.needsUpdate = true; + resolve(texture); + }; + } + loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject2); + }); + }).then(function(texture) { + if (isObjectURL === true) { + URL2.revokeObjectURL(sourceURI); + } + assignExtrasToUserData(texture, sourceDef); + texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); + return texture; + }).catch(function(error) { + console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); + throw error; + }); + this.sourceCache[sourceIndex] = promise; + return promise; + } + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} mapName + * @param {Object} mapDef + * @return {Promise} + */ + assignTexture(materialParams, mapName, mapDef, colorSpace) { + const parser = this; + return this.getDependency("texture", mapDef.index).then(function(texture) { + if (!texture) return null; + if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { + texture = texture.clone(); + texture.channel = mapDef.texCoord; + } + if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { + const transform2 = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; + if (transform2) { + const gltfReference = parser.associations.get(texture); + texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform2); + parser.associations.set(texture, gltfReference); + } + } + if (colorSpace !== void 0) { + texture.colorSpace = colorSpace; + } + materialParams[mapName] = texture; + return texture; + }); + } + /** + * Assigns final material to a Mesh, Line, or Points instance. The instance + * already has a material (generated from the glTF material options alone) + * but reuse of the same glTF material may require multiple threejs materials + * to accommodate different primitive types, defines, etc. New materials will + * be created if necessary, and reused from a cache. + * @param {Object3D} mesh Mesh, Line, or Points instance. + */ + assignFinalMaterial(mesh) { + const geometry = mesh.geometry; + let material = mesh.material; + const useDerivativeTangents = geometry.attributes.tangent === void 0; + const useVertexColors = geometry.attributes.color !== void 0; + const useFlatShading = geometry.attributes.normal === void 0; + if (mesh.isPoints) { + const cacheKey = "PointsMaterial:" + material.uuid; + let pointsMaterial = this.cache.get(cacheKey); + if (!pointsMaterial) { + pointsMaterial = new PointsMaterial(); + Material.prototype.copy.call(pointsMaterial, material); + pointsMaterial.color.copy(material.color); + pointsMaterial.map = material.map; + pointsMaterial.sizeAttenuation = false; + this.cache.add(cacheKey, pointsMaterial); + } + material = pointsMaterial; + } else if (mesh.isLine) { + const cacheKey = "LineBasicMaterial:" + material.uuid; + let lineMaterial = this.cache.get(cacheKey); + if (!lineMaterial) { + lineMaterial = new LineBasicMaterial(); + Material.prototype.copy.call(lineMaterial, material); + lineMaterial.color.copy(material.color); + lineMaterial.map = material.map; + this.cache.add(cacheKey, lineMaterial); + } + material = lineMaterial; + } + if (useDerivativeTangents || useVertexColors || useFlatShading) { + let cacheKey = "ClonedMaterial:" + material.uuid + ":"; + if (useDerivativeTangents) cacheKey += "derivative-tangents:"; + if (useVertexColors) cacheKey += "vertex-colors:"; + if (useFlatShading) cacheKey += "flat-shading:"; + let cachedMaterial = this.cache.get(cacheKey); + if (!cachedMaterial) { + cachedMaterial = material.clone(); + if (useVertexColors) cachedMaterial.vertexColors = true; + if (useFlatShading) cachedMaterial.flatShading = true; + if (useDerivativeTangents) { + if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; + if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; + } + this.cache.add(cacheKey, cachedMaterial); + this.associations.set(cachedMaterial, this.associations.get(material)); + } + material = cachedMaterial; + } + mesh.material = material; + } + getMaterialType() { + return MeshStandardMaterial; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @param {number} materialIndex + * @return {Promise} + */ + loadMaterial(materialIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const materialDef = json.materials[materialIndex]; + let materialType; + const materialParams = {}; + const materialExtensions = materialDef.extensions || {}; + const pending = []; + if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { + const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; + materialType = kmuExtension.getMaterialType(); + pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); + } else { + const metallicRoughness = materialDef.pbrMetallicRoughness || {}; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); + } + materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; + materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; + if (metallicRoughness.metallicRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); + pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); + } + materialType = this._invokeOne(function(ext) { + return ext.getMaterialType && ext.getMaterialType(materialIndex); + }); + pending.push(Promise.all(this._invokeAll(function(ext) { + return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams); + }))); + } + if (materialDef.doubleSided === true) { + materialParams.side = DoubleSide; + } + const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; + if (alphaMode === ALPHA_MODES.BLEND) { + materialParams.transparent = true; + materialParams.depthWrite = false; + } else { + materialParams.transparent = false; + if (alphaMode === ALPHA_MODES.MASK) { + materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5; + } + } + if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); + materialParams.normalScale = new Vector2(1, 1); + if (materialDef.normalTexture.scale !== void 0) { + const scale2 = materialDef.normalTexture.scale; + materialParams.normalScale.set(scale2, scale2); + } + } + if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); + if (materialDef.occlusionTexture.strength !== void 0) { + materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; + } + } + if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { + const emissiveFactor = materialDef.emissiveFactor; + materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace); + } + if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace)); + } + return Promise.all(pending).then(function() { + const material = new materialType(materialParams); + if (materialDef.name) material.name = materialDef.name; + assignExtrasToUserData(material, materialDef); + parser.associations.set(material, { materials: materialIndex }); + if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); + return material; + }); + } + /** When Object3D instances are targeted by animation, they need unique names. */ + createUniqueName(originalName) { + const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); + if (sanitizedName in this.nodeNamesUsed) { + return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; + } else { + this.nodeNamesUsed[sanitizedName] = 0; + return sanitizedName; + } + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry + * + * Creates BufferGeometries from primitives. + * + * @param {Array} primitives + * @return {Promise>} + */ + loadGeometries(primitives) { + const parser = this; + const extensions = this.extensions; + const cache = this.primitiveCache; + function createDracoPrimitive(primitive) { + return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { + return addPrimitiveAttributes(geometry, primitive, parser); + }); + } + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const primitive = primitives[i]; + const cacheKey = createPrimitiveKey(primitive); + const cached = cache[cacheKey]; + if (cached) { + pending.push(cached.promise); + } else { + let geometryPromise; + if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) { + geometryPromise = createDracoPrimitive(primitive); + } else { + geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); + } + cache[cacheKey] = { primitive, promise: geometryPromise }; + pending.push(geometryPromise); + } + } + return Promise.all(pending); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + * @param {number} meshIndex + * @return {Promise} + */ + loadMesh(meshIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const meshDef = json.meshes[meshIndex]; + const primitives = meshDef.primitives; + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); + pending.push(material); + } + pending.push(parser.loadGeometries(primitives)); + return Promise.all(pending).then(function(results) { + const materials = results.slice(0, results.length - 1); + const geometries = results[results.length - 1]; + const meshes = []; + for (let i = 0, il = geometries.length; i < il; i++) { + const geometry = geometries[i]; + const primitive = primitives[i]; + let mesh; + const material = materials[i]; + if (primitive.mode === WEBGL_CONSTANTS2.TRIANGLES || primitive.mode === WEBGL_CONSTANTS2.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS2.TRIANGLE_FAN || primitive.mode === void 0) { + mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); + if (mesh.isSkinnedMesh === true) { + mesh.normalizeSkinWeights(); + } + if (primitive.mode === WEBGL_CONSTANTS2.TRIANGLE_STRIP) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode); + } else if (primitive.mode === WEBGL_CONSTANTS2.TRIANGLE_FAN) { + mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode); + } + } else if (primitive.mode === WEBGL_CONSTANTS2.LINES) { + mesh = new LineSegments(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS2.LINE_STRIP) { + mesh = new Line(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS2.LINE_LOOP) { + mesh = new LineLoop(geometry, material); + } else if (primitive.mode === WEBGL_CONSTANTS2.POINTS) { + mesh = new Points(geometry, material); + } else { + throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); + } + if (Object.keys(mesh.geometry.morphAttributes).length > 0) { + updateMorphTargets(mesh, meshDef); + } + mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); + assignExtrasToUserData(mesh, meshDef); + if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); + parser.assignFinalMaterial(mesh); + meshes.push(mesh); + } + for (let i = 0, il = meshes.length; i < il; i++) { + parser.associations.set(meshes[i], { + meshes: meshIndex, + primitives: i + }); + } + if (meshes.length === 1) { + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); + return meshes[0]; + } + const group = new Group(); + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); + parser.associations.set(group, { meshes: meshIndex }); + for (let i = 0, il = meshes.length; i < il; i++) { + group.add(meshes[i]); + } + return group; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + * @param {number} cameraIndex + * @return {Promise} + */ + loadCamera(cameraIndex) { + let camera; + const cameraDef = this.json.cameras[cameraIndex]; + const params = cameraDef[cameraDef.type]; + if (!params) { + console.warn("THREE.GLTFLoader: Missing camera parameters."); + return; + } + if (cameraDef.type === "perspective") { + camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); + } else if (cameraDef.type === "orthographic") { + camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); + } + if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); + assignExtrasToUserData(camera, cameraDef); + return Promise.resolve(camera); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins + * @param {number} skinIndex + * @return {Promise} + */ + loadSkin(skinIndex) { + const skinDef = this.json.skins[skinIndex]; + const pending = []; + for (let i = 0, il = skinDef.joints.length; i < il; i++) { + pending.push(this._loadNodeShallow(skinDef.joints[i])); + } + if (skinDef.inverseBindMatrices !== void 0) { + pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); + } else { + pending.push(null); + } + return Promise.all(pending).then(function(results) { + const inverseBindMatrices = results.pop(); + const jointNodes = results; + const bones = []; + const boneInverses = []; + for (let i = 0, il = jointNodes.length; i < il; i++) { + const jointNode = jointNodes[i]; + if (jointNode) { + bones.push(jointNode); + const mat = new Matrix4(); + if (inverseBindMatrices !== null) { + mat.fromArray(inverseBindMatrices.array, i * 16); + } + boneInverses.push(mat); + } else { + console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]); + } + } + return new Skeleton(bones, boneInverses); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations + * @param {number} animationIndex + * @return {Promise} + */ + loadAnimation(animationIndex) { + const json = this.json; + const parser = this; + const animationDef = json.animations[animationIndex]; + const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; + const pendingNodes = []; + const pendingInputAccessors = []; + const pendingOutputAccessors = []; + const pendingSamplers = []; + const pendingTargets = []; + for (let i = 0, il = animationDef.channels.length; i < il; i++) { + const channel = animationDef.channels[i]; + const sampler = animationDef.samplers[channel.sampler]; + const target = channel.target; + const name2 = target.node; + const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; + const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; + if (target.node === void 0) continue; + pendingNodes.push(this.getDependency("node", name2)); + pendingInputAccessors.push(this.getDependency("accessor", input)); + pendingOutputAccessors.push(this.getDependency("accessor", output)); + pendingSamplers.push(sampler); + pendingTargets.push(target); + } + return Promise.all([ + Promise.all(pendingNodes), + Promise.all(pendingInputAccessors), + Promise.all(pendingOutputAccessors), + Promise.all(pendingSamplers), + Promise.all(pendingTargets) + ]).then(function(dependencies) { + const nodes = dependencies[0]; + const inputAccessors = dependencies[1]; + const outputAccessors = dependencies[2]; + const samplers = dependencies[3]; + const targets = dependencies[4]; + const tracks = []; + for (let i = 0, il = nodes.length; i < il; i++) { + const node = nodes[i]; + const inputAccessor = inputAccessors[i]; + const outputAccessor = outputAccessors[i]; + const sampler = samplers[i]; + const target = targets[i]; + if (node === void 0) continue; + if (node.updateMatrix) { + node.updateMatrix(); + } + const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); + if (createdTracks) { + for (let k2 = 0; k2 < createdTracks.length; k2++) { + tracks.push(createdTracks[k2]); + } + } + } + return new AnimationClip(animationName, void 0, tracks); + }); + } + createNodeMesh(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + if (nodeDef.mesh === void 0) return null; + return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { + const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); + if (nodeDef.weights !== void 0) { + node.traverse(function(o) { + if (!o.isMesh) return; + for (let i = 0, il = nodeDef.weights.length; i < il; i++) { + o.morphTargetInfluences[i] = nodeDef.weights[i]; + } + }); + } + return node; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy + * @param {number} nodeIndex + * @return {Promise} + */ + loadNode(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + const nodePending = parser._loadNodeShallow(nodeIndex); + const childPending = []; + const childrenDef = nodeDef.children || []; + for (let i = 0, il = childrenDef.length; i < il; i++) { + childPending.push(parser.getDependency("node", childrenDef[i])); + } + const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); + return Promise.all([ + nodePending, + Promise.all(childPending), + skeletonPending + ]).then(function(results) { + const node = results[0]; + const children = results[1]; + const skeleton = results[2]; + if (skeleton !== null) { + node.traverse(function(mesh) { + if (!mesh.isSkinnedMesh) return; + mesh.bind(skeleton, _identityMatrix); + }); + } + for (let i = 0, il = children.length; i < il; i++) { + node.add(children[i]); + } + return node; + }); + } + // ._loadNodeShallow() parses a single node. + // skin and child nodes are created and added in .loadNode() (no '_' prefix). + _loadNodeShallow(nodeIndex) { + const json = this.json; + const extensions = this.extensions; + const parser = this; + if (this.nodeCache[nodeIndex] !== void 0) { + return this.nodeCache[nodeIndex]; + } + const nodeDef = json.nodes[nodeIndex]; + const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; + const pending = []; + const meshPromise = parser._invokeOne(function(ext) { + return ext.createNodeMesh && ext.createNodeMesh(nodeIndex); + }); + if (meshPromise) { + pending.push(meshPromise); + } + if (nodeDef.camera !== void 0) { + pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { + return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); + })); + } + parser._invokeAll(function(ext) { + return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex); + }).forEach(function(promise) { + pending.push(promise); + }); + this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { + let node; + if (nodeDef.isBone === true) { + node = new Bone(); + } else if (objects.length > 1) { + node = new Group(); + } else if (objects.length === 1) { + node = objects[0]; + } else { + node = new Object3D(); + } + if (node !== objects[0]) { + for (let i = 0, il = objects.length; i < il; i++) { + node.add(objects[i]); + } + } + if (nodeDef.name) { + node.userData.name = nodeDef.name; + node.name = nodeName; + } + assignExtrasToUserData(node, nodeDef); + if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); + if (nodeDef.matrix !== void 0) { + const matrix3 = new Matrix4(); + matrix3.fromArray(nodeDef.matrix); + node.applyMatrix4(matrix3); + } else { + if (nodeDef.translation !== void 0) { + node.position.fromArray(nodeDef.translation); + } + if (nodeDef.rotation !== void 0) { + node.quaternion.fromArray(nodeDef.rotation); + } + if (nodeDef.scale !== void 0) { + node.scale.fromArray(nodeDef.scale); + } + } + if (!parser.associations.has(node)) { + parser.associations.set(node, {}); + } + parser.associations.get(node).nodes = nodeIndex; + return node; + }); + return this.nodeCache[nodeIndex]; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes + * @param {number} sceneIndex + * @return {Promise} + */ + loadScene(sceneIndex) { + const extensions = this.extensions; + const sceneDef = this.json.scenes[sceneIndex]; + const parser = this; + const scene = new Group(); + if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); + assignExtrasToUserData(scene, sceneDef); + if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); + const nodeIds = sceneDef.nodes || []; + const pending = []; + for (let i = 0, il = nodeIds.length; i < il; i++) { + pending.push(parser.getDependency("node", nodeIds[i])); + } + return Promise.all(pending).then(function(nodes) { + for (let i = 0, il = nodes.length; i < il; i++) { + scene.add(nodes[i]); + } + const reduceAssociations = (node) => { + const reducedAssociations = /* @__PURE__ */ new Map(); + for (const [key2, value2] of parser.associations) { + if (key2 instanceof Material || key2 instanceof Texture) { + reducedAssociations.set(key2, value2); + } + } + node.traverse((node2) => { + const mappings = parser.associations.get(node2); + if (mappings != null) { + reducedAssociations.set(node2, mappings); + } + }); + return reducedAssociations; + }; + parser.associations = reduceAssociations(scene); + return scene; + }); + } + _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { + const tracks = []; + const targetName = node.name ? node.name : node.uuid; + const targetNames = []; + if (PATH_PROPERTIES2[target.path] === PATH_PROPERTIES2.weights) { + node.traverse(function(object) { + if (object.morphTargetInfluences) { + targetNames.push(object.name ? object.name : object.uuid); + } + }); + } else { + targetNames.push(targetName); + } + let TypedKeyframeTrack; + switch (PATH_PROPERTIES2[target.path]) { + case PATH_PROPERTIES2.weights: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case PATH_PROPERTIES2.rotation: + TypedKeyframeTrack = QuaternionKeyframeTrack; + break; + case PATH_PROPERTIES2.position: + case PATH_PROPERTIES2.scale: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + default: + switch (outputAccessor.itemSize) { + case 1: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case 2: + case 3: + default: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + } + break; + } + const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; + const outputArray = this._getArrayFromAccessor(outputAccessor); + for (let j = 0, jl = targetNames.length; j < jl; j++) { + const track = new TypedKeyframeTrack( + targetNames[j] + "." + PATH_PROPERTIES2[target.path], + inputAccessor.array, + outputArray, + interpolation + ); + if (sampler.interpolation === "CUBICSPLINE") { + this._createCubicSplineTrackInterpolant(track); + } + tracks.push(track); + } + return tracks; + } + _getArrayFromAccessor(accessor) { + let outputArray = accessor.array; + if (accessor.normalized) { + const scale2 = getNormalizedComponentScale(outputArray.constructor); + const scaled = new Float32Array(outputArray.length); + for (let j = 0, jl = outputArray.length; j < jl; j++) { + scaled[j] = outputArray[j] * scale2; + } + outputArray = scaled; + } + return outputArray; + } + _createCubicSplineTrackInterpolant(track) { + track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) { + const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant; + return new interpolantType(this.times, this.values, this.getValueSize() / 3, result); + }; + track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; + } +}; +function computeBounds(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const box = new Box3(); + if (attributes.POSITION !== void 0) { + const accessor = parser.json.accessors[attributes.POSITION]; + const min = accessor.min; + const max2 = accessor.max; + if (min !== void 0 && max2 !== void 0) { + box.set( + new Vector3(min[0], min[1], min[2]), + new Vector3(max2[0], max2[1], max2[2]) + ); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + box.min.multiplyScalar(boxScale); + box.max.multiplyScalar(boxScale); + } + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + return; + } + } else { + return; + } + const targets = primitiveDef.targets; + if (targets !== void 0) { + const maxDisplacement = new Vector3(); + const vector = new Vector3(); + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) { + const accessor = parser.json.accessors[target.POSITION]; + const min = accessor.min; + const max2 = accessor.max; + if (min !== void 0 && max2 !== void 0) { + vector.setX(Math.max(Math.abs(min[0]), Math.abs(max2[0]))); + vector.setY(Math.max(Math.abs(min[1]), Math.abs(max2[1]))); + vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max2[2]))); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + vector.multiplyScalar(boxScale); + } + maxDisplacement.max(vector); + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + } + } + } + box.expandByVector(maxDisplacement); + } + geometry.boundingBox = box; + const sphere = new Sphere(); + box.getCenter(sphere.center); + sphere.radius = box.min.distanceTo(box.max) / 2; + geometry.boundingSphere = sphere; +} +function addPrimitiveAttributes(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const pending = []; + function assignAttributeAccessor(accessorIndex, attributeName) { + return parser.getDependency("accessor", accessorIndex).then(function(accessor) { + geometry.setAttribute(attributeName, accessor); + }); + } + for (const gltfAttributeName in attributes) { + const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); + if (threeAttributeName in geometry.attributes) continue; + pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); + } + if (primitiveDef.indices !== void 0 && !geometry.index) { + const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { + geometry.setIndex(accessor2); + }); + pending.push(accessor); + } + if (ColorManagement.workingColorSpace !== LinearSRGBColorSpace && "COLOR_0" in attributes) { + console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.`); + } + assignExtrasToUserData(geometry, primitiveDef); + computeBounds(geometry, primitiveDef, parser); + return Promise.all(pending).then(function() { + return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; + }); +} + +// node_modules/three/examples/jsm/loaders/RGBELoader.js +var RGBELoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html + parse(buffer) { + const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) { + switch (rgbe_error_code) { + case rgbe_read_error: + throw new Error("THREE.RGBELoader: Read Error: " + (msg || "")); + case rgbe_write_error: + throw new Error("THREE.RGBELoader: Write Error: " + (msg || "")); + case rgbe_format_error: + throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || "")); + default: + case rgbe_memory_error: + throw new Error("THREE.RGBELoader: Memory Error: " + (msg || "")); + } + }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) { + const chunkSize = 128; + lineLimit = !lineLimit ? 1024 : lineLimit; + let p2 = buffer2.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p2, p2 + chunkSize))); + while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p2 < buffer2.byteLength) { + s += chunk; + len += chunk.length; + p2 += chunkSize; + chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p2, p2 + chunkSize))); + } + if (-1 < i) { + if (false !== consume) buffer2.pos += len + i + 1; + return s + chunk.slice(0, i); + } + return false; + }, RGBE_ReadHeader = function(buffer2) { + const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/, dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/, header = { + valid: 0, + /* indicate which fields are valid */ + string: "", + /* the actual header string */ + comments: "", + /* comments found in header */ + programtype: "RGBE", + /* listed at beginning of file to identify it after "#?". defaults to "RGBE" */ + format: "", + /* RGBE format, default 32-bit_rle_rgbe */ + gamma: 1, + /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */ + exposure: 1, + /* a value of 1.0 in an image corresponds to watts/steradian/m^2. defaults to 1.0 */ + width: 0, + height: 0 + /* image dimensions, width/height */ + }; + let line2, match; + if (buffer2.pos >= buffer2.byteLength || !(line2 = fgets(buffer2))) { + rgbe_error(rgbe_read_error, "no header found"); + } + if (!(match = line2.match(magic_token_re))) { + rgbe_error(rgbe_format_error, "bad initial token"); + } + header.valid |= RGBE_VALID_PROGRAMTYPE; + header.programtype = match[1]; + header.string += line2 + "\n"; + while (true) { + line2 = fgets(buffer2); + if (false === line2) break; + header.string += line2 + "\n"; + if ("#" === line2.charAt(0)) { + header.comments += line2 + "\n"; + continue; + } + if (match = line2.match(gamma_re)) { + header.gamma = parseFloat(match[1]); + } + if (match = line2.match(exposure_re)) { + header.exposure = parseFloat(match[1]); + } + if (match = line2.match(format_re)) { + header.valid |= RGBE_VALID_FORMAT; + header.format = match[1]; + } + if (match = line2.match(dimensions_re)) { + header.valid |= RGBE_VALID_DIMENSIONS; + header.height = parseInt(match[1], 10); + header.width = parseInt(match[2], 10); + } + if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break; + } + if (!(header.valid & RGBE_VALID_FORMAT)) { + rgbe_error(rgbe_format_error, "missing format specifier"); + } + if (!(header.valid & RGBE_VALID_DIMENSIONS)) { + rgbe_error(rgbe_format_error, "missing image size specifier"); + } + return header; + }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) { + const scanline_width = w2; + if ( + // run length encoding is not allowed so read flat + scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded + (2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128) + ) { + return new Uint8Array(buffer2); + } + if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) { + rgbe_error(rgbe_format_error, "wrong scanline width"); + } + const data_rgba = new Uint8Array(4 * w2 * h2); + if (!data_rgba.length) { + rgbe_error(rgbe_memory_error, "unable to allocate buffer space"); + } + let offset = 0, pos = 0; + const ptr_end = 4 * scanline_width; + const rgbeStart = new Uint8Array(4); + const scanline_buffer = new Uint8Array(ptr_end); + let num_scanlines = h2; + while (num_scanlines > 0 && pos < buffer2.byteLength) { + if (pos + 4 > buffer2.byteLength) { + rgbe_error(rgbe_read_error); + } + rgbeStart[0] = buffer2[pos++]; + rgbeStart[1] = buffer2[pos++]; + rgbeStart[2] = buffer2[pos++]; + rgbeStart[3] = buffer2[pos++]; + if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) { + rgbe_error(rgbe_format_error, "bad rgbe scanline format"); + } + let ptr = 0, count; + while (ptr < ptr_end && pos < buffer2.byteLength) { + count = buffer2[pos++]; + const isEncodedRun = count > 128; + if (isEncodedRun) count -= 128; + if (0 === count || ptr + count > ptr_end) { + rgbe_error(rgbe_format_error, "bad scanline data"); + } + if (isEncodedRun) { + const byteValue = buffer2[pos++]; + for (let i = 0; i < count; i++) { + scanline_buffer[ptr++] = byteValue; + } + } else { + scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr); + ptr += count; + pos += count; + } + } + const l2 = scanline_width; + for (let i = 0; i < l2; i++) { + let off = 0; + data_rgba[offset] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 1] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 2] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 3] = scanline_buffer[i + off]; + offset += 4; + } + num_scanlines--; + } + return data_rgba; + }; + const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale2 = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale2; + destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale2; + destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale2; + destArray[destOffset + 3] = 1; + }; + const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale2 = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale2, 65504)); + destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale2, 65504)); + destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale2, 65504)); + destArray[destOffset + 3] = DataUtils.toHalfFloat(1); + }; + const byteArray = new Uint8Array(buffer); + byteArray.pos = 0; + const rgbe_header_info = RGBE_ReadHeader(byteArray); + const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h); + let data2, type; + let numElements; + switch (this.type) { + case FloatType: + numElements = image_rgba_data.length / 4; + const floatArray = new Float32Array(numElements * 4); + for (let j = 0; j < numElements; j++) { + RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4); + } + data2 = floatArray; + type = FloatType; + break; + case HalfFloatType: + numElements = image_rgba_data.length / 4; + const halfArray = new Uint16Array(numElements * 4); + for (let j = 0; j < numElements; j++) { + RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4); + } + data2 = halfArray; + type = HalfFloatType; + break; + default: + throw new Error("THREE.RGBELoader: Unsupported type: " + this.type); + break; + } + return { + width: w, + height: h, + data: data2, + header: rgbe_header_info.string, + gamma: rgbe_header_info.gamma, + exposure: rgbe_header_info.exposure, + type + }; + } + setDataType(value2) { + this.type = value2; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + switch (texture.type) { + case FloatType: + case HalfFloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = true; + break; + } + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; + +// node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js +var HDRCubeTextureLoader = class extends Loader { + constructor(manager) { + super(manager); + this.hdrLoader = new RGBELoader(); + this.type = HalfFloatType; + } + load(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + texture.type = this.type; + switch (texture.type) { + case FloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + break; + case HalfFloatType: + texture.colorSpace = LinearSRGBColorSpace; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + break; + } + const scope = this; + let loaded = 0; + function loadHDRData(i, onLoad2, onProgress2, onError2) { + new FileLoader(scope.manager).setPath(scope.path).setResponseType("arraybuffer").setWithCredentials(scope.withCredentials).load(urls[i], function(buffer) { + loaded++; + const texData = scope.hdrLoader.parse(buffer); + if (!texData) return; + if (texData.data !== void 0) { + const dataTexture = new DataTexture(texData.data, texData.width, texData.height); + dataTexture.type = texture.type; + dataTexture.colorSpace = texture.colorSpace; + dataTexture.format = texture.format; + dataTexture.minFilter = texture.minFilter; + dataTexture.magFilter = texture.magFilter; + dataTexture.generateMipmaps = texture.generateMipmaps; + texture.images[i] = dataTexture; + } + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad2) onLoad2(texture); + } + }, onProgress2, onError2); + } + for (let i = 0; i < urls.length; i++) { + loadHDRData(i, onLoad, onProgress, onError); + } + return texture; + } + setDataType(value2) { + this.type = value2; + this.hdrLoader.setDataType(value2); + return this; + } +}; + +// node_modules/three/examples/jsm/loaders/IESLoader.js +var IESLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + _getIESValues(iesLamp, type) { + const width2 = 360; + const height2 = 180; + const size2 = width2 * height2; + const data2 = new Array(size2); + function interpolateCandelaValues(phi, theta) { + let phiIndex = 0, thetaIndex = 0; + let startTheta2 = 0, endTheta2 = 0, startPhi = 0, endPhi = 0; + for (let i = 0; i < iesLamp.numHorAngles - 1; ++i) { + if (theta < iesLamp.horAngles[i + 1] || i == iesLamp.numHorAngles - 2) { + thetaIndex = i; + startTheta2 = iesLamp.horAngles[i]; + endTheta2 = iesLamp.horAngles[i + 1]; + break; + } + } + for (let i = 0; i < iesLamp.numVerAngles - 1; ++i) { + if (phi < iesLamp.verAngles[i + 1] || i == iesLamp.numVerAngles - 2) { + phiIndex = i; + startPhi = iesLamp.verAngles[i]; + endPhi = iesLamp.verAngles[i + 1]; + break; + } + } + const deltaTheta = endTheta2 - startTheta2; + const deltaPhi = endPhi - startPhi; + if (deltaPhi === 0) + return 0; + const t1 = deltaTheta === 0 ? 0 : (theta - startTheta2) / deltaTheta; + const t22 = (phi - startPhi) / deltaPhi; + const nextThetaIndex = deltaTheta === 0 ? thetaIndex : thetaIndex + 1; + const v12 = MathUtils.lerp(iesLamp.candelaValues[thetaIndex][phiIndex], iesLamp.candelaValues[nextThetaIndex][phiIndex], t1); + const v2 = MathUtils.lerp(iesLamp.candelaValues[thetaIndex][phiIndex + 1], iesLamp.candelaValues[nextThetaIndex][phiIndex + 1], t1); + const v = MathUtils.lerp(v12, v2, t22); + return v; + } + const startTheta = iesLamp.horAngles[0], endTheta = iesLamp.horAngles[iesLamp.numHorAngles - 1]; + for (let i = 0; i < size2; ++i) { + let theta = i % width2; + const phi = Math.floor(i / width2); + if (endTheta - startTheta !== 0 && (theta < startTheta || theta >= endTheta)) { + theta %= endTheta * 2; + if (theta > endTheta) + theta = endTheta * 2 - theta; + } + data2[phi + theta * height2] = interpolateCandelaValues(phi, theta); + } + let result = null; + if (type === UnsignedByteType) result = Uint8Array.from(data2.map((v) => Math.min(v * 255, 255))); + else if (type === HalfFloatType) result = Uint16Array.from(data2.map((v) => DataUtils.toHalfFloat(v))); + else if (type === FloatType) result = Float32Array.from(data2); + else console.error("IESLoader: Unsupported type:", type); + return result; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setResponseType("text"); + loader.setCrossOrigin(this.crossOrigin); + loader.setWithCredentials(this.withCredentials); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.load(url, (text2) => { + onLoad(this.parse(text2)); + }, onProgress, onError); + } + parse(text2) { + const type = this.type; + const iesLamp = new IESLamp(text2); + const data2 = this._getIESValues(iesLamp, type); + const texture = new DataTexture(data2, 180, 1, RedFormat, type); + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.needsUpdate = true; + return texture; + } +}; +function IESLamp(text2) { + const _self = this; + const textArray = text2.split("\n"); + let lineNumber = 0; + let line2; + _self.verAngles = []; + _self.horAngles = []; + _self.candelaValues = []; + _self.tiltData = {}; + _self.tiltData.angles = []; + _self.tiltData.mulFactors = []; + function textToArray(text3) { + text3 = text3.replace(/^\s+|\s+$/g, ""); + text3 = text3.replace(/,/g, " "); + text3 = text3.replace(/\s\s+/g, " "); + const array = text3.split(" "); + return array; + } + function readArray(count, array) { + while (true) { + const line3 = textArray[lineNumber++]; + const lineData = textToArray(line3); + for (let i = 0; i < lineData.length; ++i) { + array.push(Number(lineData[i])); + } + if (array.length === count) + break; + } + } + function readTilt() { + let line3 = textArray[lineNumber++]; + let lineData = textToArray(line3); + _self.tiltData.lampToLumGeometry = Number(lineData[0]); + line3 = textArray[lineNumber++]; + lineData = textToArray(line3); + _self.tiltData.numAngles = Number(lineData[0]); + readArray(_self.tiltData.numAngles, _self.tiltData.angles); + readArray(_self.tiltData.numAngles, _self.tiltData.mulFactors); + } + function readLampValues() { + const values2 = []; + readArray(10, values2); + _self.count = Number(values2[0]); + _self.lumens = Number(values2[1]); + _self.multiplier = Number(values2[2]); + _self.numVerAngles = Number(values2[3]); + _self.numHorAngles = Number(values2[4]); + _self.gonioType = Number(values2[5]); + _self.units = Number(values2[6]); + _self.width = Number(values2[7]); + _self.length = Number(values2[8]); + _self.height = Number(values2[9]); + } + function readLampFactors() { + const values2 = []; + readArray(3, values2); + _self.ballFactor = Number(values2[0]); + _self.blpFactor = Number(values2[1]); + _self.inputWatts = Number(values2[2]); + } + while (true) { + line2 = textArray[lineNumber++]; + if (line2.includes("TILT")) { + break; + } + } + if (!line2.includes("NONE")) { + if (line2.includes("INCLUDE")) { + readTilt(); + } else { + } + } + readLampValues(); + readLampFactors(); + for (let i = 0; i < _self.numHorAngles; ++i) { + _self.candelaValues.push([]); + } + readArray(_self.numVerAngles, _self.verAngles); + readArray(_self.numHorAngles, _self.horAngles); + for (let i = 0; i < _self.numHorAngles; ++i) { + readArray(_self.numVerAngles, _self.candelaValues[i]); + } + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + _self.candelaValues[i][j] *= _self.candelaValues[i][j] * _self.multiplier * _self.ballFactor * _self.blpFactor; + } + } + let maxVal = -1; + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + const value2 = _self.candelaValues[i][j]; + maxVal = maxVal < value2 ? value2 : maxVal; + } + } + const bNormalize = true; + if (bNormalize && maxVal > 0) { + for (let i = 0; i < _self.numHorAngles; ++i) { + for (let j = 0; j < _self.numVerAngles; ++j) { + _self.candelaValues[i][j] /= maxVal; + } + } + } +} + +// node_modules/three/examples/jsm/loaders/KMZLoader.js +var KMZLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function findFile(url) { + for (const path in zip) { + if (path.slice(-url.length) === url) { + return zip[path]; + } + } + } + const manager = new LoadingManager(); + manager.setURLModifier(function(url) { + const image = findFile(url); + if (image) { + console.log("Loading", url); + const blob = new Blob([image.buffer], { type: "application/octet-stream" }); + return URL.createObjectURL(blob); + } + return url; + }); + const zip = unzipSync(new Uint8Array(data2)); + if (zip["doc.kml"]) { + const xml = new DOMParser().parseFromString(strFromU8(zip["doc.kml"]), "application/xml"); + const model = xml.querySelector("Placemark Model Link href"); + if (model) { + const loader = new ColladaLoader(manager); + return loader.parse(strFromU8(zip[model.textContent])); + } + } else { + console.warn("KMZLoader: Missing doc.kml file."); + for (const path in zip) { + const extension = path.split(".").pop().toLowerCase(); + if (extension === "dae") { + const loader = new ColladaLoader(manager); + return loader.parse(strFromU8(zip[path])); + } + } + } + console.error("KMZLoader: Couldn't find .dae file."); + return { scene: new Group() }; + } +}; + +// node_modules/three/examples/jsm/utils/WorkerPool.js +var WorkerPool = class { + constructor(pool = 4) { + this.pool = pool; + this.queue = []; + this.workers = []; + this.workersResolve = []; + this.workerStatus = 0; + } + _initWorker(workerId) { + if (!this.workers[workerId]) { + const worker = this.workerCreator(); + worker.addEventListener("message", this._onMessage.bind(this, workerId)); + this.workers[workerId] = worker; + } + } + _getIdleWorker() { + for (let i = 0; i < this.pool; i++) + if (!(this.workerStatus & 1 << i)) return i; + return -1; + } + _onMessage(workerId, msg) { + const resolve = this.workersResolve[workerId]; + resolve && resolve(msg); + if (this.queue.length) { + const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift(); + this.workersResolve[workerId] = resolve2; + this.workers[workerId].postMessage(msg2, transfer); + } else { + this.workerStatus ^= 1 << workerId; + } + } + setWorkerCreator(workerCreator) { + this.workerCreator = workerCreator; + } + setWorkerLimit(pool) { + this.pool = pool; + } + postMessage(msg, transfer) { + return new Promise((resolve) => { + const workerId = this._getIdleWorker(); + if (workerId !== -1) { + this._initWorker(workerId); + this.workerStatus |= 1 << workerId; + this.workersResolve[workerId] = resolve; + this.workers[workerId].postMessage(msg, transfer); + } else { + this.queue.push({ resolve, msg, transfer }); + } + }); + } + dispose() { + this.workers.forEach((worker) => worker.terminate()); + this.workersResolve.length = 0; + this.workers.length = 0; + this.queue.length = 0; + this.workerStatus = 0; + } +}; + +// node_modules/three/examples/jsm/libs/zstddec.module.js +var A; +var I; +var B; +var g = { env: { emscripten_notify_memory_growth: function(A2) { + B = new Uint8Array(I.exports.memory.buffer); +} } }; +var Q2 = class { + init() { + return A || (A = "undefined" != typeof fetch ? fetch("data:application/wasm;base64," + C).then((A2) => A2.arrayBuffer()).then((A2) => WebAssembly.instantiate(A2, g)).then(this._init) : WebAssembly.instantiate(Buffer.from(C, "base64"), g).then(this._init), A); + } + _init(A2) { + I = A2.instance, g.env.emscripten_notify_memory_growth(0); + } + decode(A2, g2 = 0) { + if (!I) throw new Error("ZSTDDecoder: Await .init() before decoding."); + const Q3 = A2.byteLength, C2 = I.exports.malloc(Q3); + B.set(A2, C2), g2 = g2 || Number(I.exports.ZSTD_findDecompressedSize(C2, Q3)); + const E2 = I.exports.malloc(g2), i = I.exports.ZSTD_decompress(E2, g2, C2, Q3), D = B.slice(E2, E2 + i); + return I.exports.free(C2), I.exports.free(E2), D; + } +}; +var 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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"; + +// node_modules/three/examples/jsm/loaders/KTX2Loader.js +var _taskCache3 = /* @__PURE__ */ new WeakMap(); +var _activeLoaders = 0; +var _zstd; +var KTX2Loader = class _KTX2Loader extends Loader { + constructor(manager) { + super(manager); + this.transcoderPath = ""; + this.transcoderBinary = null; + this.transcoderPending = null; + this.workerPool = new WorkerPool(); + this.workerSourceURL = ""; + this.workerConfig = null; + if (typeof MSC_TRANSCODER !== "undefined") { + console.warn( + 'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.' + ); + } + } + setTranscoderPath(path) { + this.transcoderPath = path; + return this; + } + setWorkerLimit(num) { + this.workerPool.setWorkerLimit(num); + return this; + } + async detectSupportAsync(renderer2) { + this.workerConfig = { + astcSupported: await renderer2.hasFeatureAsync("texture-compression-astc"), + etc1Supported: await renderer2.hasFeatureAsync("texture-compression-etc1"), + etc2Supported: await renderer2.hasFeatureAsync("texture-compression-etc2"), + dxtSupported: await renderer2.hasFeatureAsync("texture-compression-bc"), + bptcSupported: await renderer2.hasFeatureAsync("texture-compression-bptc"), + pvrtcSupported: await renderer2.hasFeatureAsync("texture-compression-pvrtc") + }; + return this; + } + detectSupport(renderer2) { + if (renderer2.isWebGPURenderer === true) { + this.workerConfig = { + astcSupported: renderer2.hasFeature("texture-compression-astc"), + etc1Supported: renderer2.hasFeature("texture-compression-etc1"), + etc2Supported: renderer2.hasFeature("texture-compression-etc2"), + dxtSupported: renderer2.hasFeature("texture-compression-bc"), + bptcSupported: renderer2.hasFeature("texture-compression-bptc"), + pvrtcSupported: renderer2.hasFeature("texture-compression-pvrtc") + }; + } else { + this.workerConfig = { + astcSupported: renderer2.extensions.has("WEBGL_compressed_texture_astc"), + etc1Supported: renderer2.extensions.has("WEBGL_compressed_texture_etc1"), + etc2Supported: renderer2.extensions.has("WEBGL_compressed_texture_etc"), + dxtSupported: renderer2.extensions.has("WEBGL_compressed_texture_s3tc"), + bptcSupported: renderer2.extensions.has("EXT_texture_compression_bptc"), + pvrtcSupported: renderer2.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer2.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") + }; + } + return this; + } + init() { + if (!this.transcoderPending) { + const jsLoader = new FileLoader(this.manager); + jsLoader.setPath(this.transcoderPath); + jsLoader.setWithCredentials(this.withCredentials); + const jsContent = jsLoader.loadAsync("basis_transcoder.js"); + const binaryLoader = new FileLoader(this.manager); + binaryLoader.setPath(this.transcoderPath); + binaryLoader.setResponseType("arraybuffer"); + binaryLoader.setWithCredentials(this.withCredentials); + const binaryContent = binaryLoader.loadAsync("basis_transcoder.wasm"); + this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { + const fn = _KTX2Loader.BasisWorker.toString(); + const body = [ + "/* constants */", + "let _EngineFormat = " + JSON.stringify(_KTX2Loader.EngineFormat), + "let _TranscoderFormat = " + JSON.stringify(_KTX2Loader.TranscoderFormat), + "let _BasisFormat = " + JSON.stringify(_KTX2Loader.BasisFormat), + "/* basis_transcoder.js */", + jsContent2, + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + this.transcoderBinary = binaryContent2; + this.workerPool.setWorkerCreator(() => { + const worker = new Worker(this.workerSourceURL); + const transcoderBinary = this.transcoderBinary.slice(0); + worker.postMessage({ type: "init", config: this.workerConfig, transcoderBinary }, [transcoderBinary]); + return worker; + }); + }); + if (_activeLoaders > 0) { + console.warn( + "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances." + ); + } + _activeLoaders++; + } + return this.transcoderPending; + } + load(url, onLoad, onProgress, onError) { + if (this.workerConfig === null) { + throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`."); + } + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + if (_taskCache3.has(buffer)) { + const cachedTask = _taskCache3.get(buffer); + return cachedTask.promise.then(onLoad).catch(onError); + } + this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError); + }, onProgress, onError); + } + _createTextureFrom(transcodeResult, container) { + const { faces, width: width2, height: height2, format, type, error, dfdFlags } = transcodeResult; + if (type === "error") return Promise.reject(error); + let texture; + if (container.faceCount === 6) { + texture = new CompressedCubeTexture(faces, format, UnsignedByteType); + } else { + const mipmaps = faces[0].mipmaps; + texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width2, height2, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width2, height2, format, UnsignedByteType); + } + texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.needsUpdate = true; + texture.colorSpace = parseColorSpace(container); + texture.premultiplyAlpha = !!(dfdFlags & p); + return texture; + } + /** + * @param {ArrayBuffer} buffer + * @param {object?} config + * @return {Promise} + */ + async _createTexture(buffer, config = {}) { + const container = Pi(new Uint8Array(buffer)); + if (container.vkFormat !== nt) { + return createRawTexture(container); + } + const taskConfig = config; + const texturePending = this.init().then(() => { + return this.workerPool.postMessage({ type: "transcode", buffer, taskConfig }, [buffer]); + }).then((e) => this._createTextureFrom(e.data, container)); + _taskCache3.set(buffer, { promise: texturePending }); + return texturePending; + } + dispose() { + this.workerPool.dispose(); + if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL); + _activeLoaders--; + return this; + } +}; +KTX2Loader.BasisFormat = { + ETC1S: 0, + UASTC_4x4: 1 +}; +KTX2Loader.TranscoderFormat = { + ETC1: 0, + ETC2: 1, + BC1: 2, + BC3: 3, + BC4: 4, + BC5: 5, + BC7_M6_OPAQUE_ONLY: 6, + BC7_M5: 7, + PVRTC1_4_RGB: 8, + PVRTC1_4_RGBA: 9, + ASTC_4x4: 10, + ATC_RGB: 11, + ATC_RGBA_INTERPOLATED_ALPHA: 12, + RGBA32: 13, + RGB565: 14, + BGR565: 15, + RGBA4444: 16 +}; +KTX2Loader.EngineFormat = { + RGBAFormat, + RGBA_ASTC_4x4_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT5_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT1_Format +}; +KTX2Loader.BasisWorker = function() { + let config; + let transcoderPending; + let BasisModule; + const EngineFormat = _EngineFormat; + const TranscoderFormat = _TranscoderFormat; + const BasisFormat = _BasisFormat; + self.addEventListener("message", function(e) { + const message = e.data; + switch (message.type) { + case "init": + config = message.config; + init(message.transcoderBinary); + break; + case "transcode": + transcoderPending.then(() => { + try { + const { faces, buffers, width: width2, height: height2, hasAlpha, format, dfdFlags } = transcode(message.buffer); + self.postMessage({ type: "transcode", id: message.id, faces, width: width2, height: height2, hasAlpha, format, dfdFlags }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ type: "error", id: message.id, error: error.message }); + } + }); + break; + } + }); + function init(wasmBinary) { + transcoderPending = new Promise((resolve) => { + BasisModule = { wasmBinary, onRuntimeInitialized: resolve }; + BASIS(BasisModule); + }).then(() => { + BasisModule.initializeBasis(); + if (BasisModule.KTX2File === void 0) { + console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder."); + } + }); + } + function transcode(buffer) { + const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer)); + function cleanup() { + ktx2File.close(); + ktx2File.delete(); + } + if (!ktx2File.isValid()) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file"); + } + const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S; + const width2 = ktx2File.getWidth(); + const height2 = ktx2File.getHeight(); + const layerCount = ktx2File.getLayers() || 1; + const levelCount = ktx2File.getLevels(); + const faceCount = ktx2File.getFaces(); + const hasAlpha = ktx2File.getHasAlpha(); + const dfdFlags = ktx2File.getDFDFlags(); + const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width2, height2, hasAlpha); + if (!width2 || !height2 || !levelCount) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid texture"); + } + if (!ktx2File.startTranscoding()) { + cleanup(); + throw new Error("THREE.KTX2Loader: .startTranscoding failed"); + } + const faces = []; + const buffers = []; + for (let face = 0; face < faceCount; face++) { + const mipmaps = []; + for (let mip = 0; mip < levelCount; mip++) { + const layerMips = []; + let mipWidth, mipHeight; + for (let layer = 0; layer < layerCount; layer++) { + const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face); + if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) { + console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."); + } + if (levelCount > 1) { + mipWidth = levelInfo.origWidth; + mipHeight = levelInfo.origHeight; + } else { + mipWidth = levelInfo.width; + mipHeight = levelInfo.height; + } + const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat)); + const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1); + if (!status) { + cleanup(); + throw new Error("THREE.KTX2Loader: .transcodeImage failed."); + } + layerMips.push(dst); + } + const mipData = concat(layerMips); + mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight }); + buffers.push(mipData.buffer); + } + faces.push({ mipmaps, width: width2, height: height2, format: engineFormat }); + } + cleanup(); + return { faces, buffers, width: width2, height: height2, hasAlpha, format: engineFormat, dfdFlags }; + } + const FORMAT_OPTIONS = [ + { + if: "astcSupported", + basisFormat: [BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4], + engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format], + priorityETC1S: Infinity, + priorityUASTC: 1, + needsPowerOfTwo: false + }, + { + if: "bptcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5], + engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format], + priorityETC1S: 3, + priorityUASTC: 2, + needsPowerOfTwo: false + }, + { + if: "dxtSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3], + engineFormat: [EngineFormat.RGBA_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format], + priorityETC1S: 4, + priorityUASTC: 5, + needsPowerOfTwo: false + }, + { + if: "etc2Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2], + engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format], + priorityETC1S: 1, + priorityUASTC: 3, + needsPowerOfTwo: false + }, + { + if: "etc1Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1], + engineFormat: [EngineFormat.RGB_ETC1_Format], + priorityETC1S: 2, + priorityUASTC: 4, + needsPowerOfTwo: false + }, + { + if: "pvrtcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA], + engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format], + priorityETC1S: 5, + priorityUASTC: 6, + needsPowerOfTwo: true + } + ]; + const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a2, b3) { + return a2.priorityETC1S - b3.priorityETC1S; + }); + const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a2, b3) { + return a2.priorityUASTC - b3.priorityUASTC; + }); + function getTranscoderFormat(basisFormat, width2, height2, hasAlpha) { + let transcoderFormat; + let engineFormat; + const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS; + for (let i = 0; i < options.length; i++) { + const opt = options[i]; + if (!config[opt.if]) continue; + if (!opt.basisFormat.includes(basisFormat)) continue; + if (hasAlpha && opt.transcoderFormat.length < 2) continue; + if (opt.needsPowerOfTwo && !(isPowerOfTwo(width2) && isPowerOfTwo(height2))) continue; + transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]; + engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]; + return { transcoderFormat, engineFormat }; + } + console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."); + transcoderFormat = TranscoderFormat.RGBA32; + engineFormat = EngineFormat.RGBAFormat; + return { transcoderFormat, engineFormat }; + } + function isPowerOfTwo(value2) { + if (value2 <= 2) return true; + return (value2 & value2 - 1) === 0 && value2 !== 0; + } + function concat(arrays) { + if (arrays.length === 1) return arrays[0]; + let totalByteLength = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + totalByteLength += array.byteLength; + } + const result = new Uint8Array(totalByteLength); + let byteOffset = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + result.set(array, byteOffset); + byteOffset += array.byteLength; + } + return result; + } +}; +var UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([RGBAFormat, RGFormat, RedFormat]); +var FORMAT_MAP = { + [Ae]: RGBAFormat, + [pe]: RGBAFormat, + [Ot]: RGBAFormat, + [Ft]: RGBAFormat, + [de]: RGFormat, + [se]: RGFormat, + [yt]: RGFormat, + [dt]: RGFormat, + [xe]: RedFormat, + [$t]: RedFormat, + [gt]: RedFormat, + [ct]: RedFormat, + [In]: RGBA_ASTC_6x6_Format, + [Sn]: RGBA_ASTC_6x6_Format +}; +var TYPE_MAP = { + [Ae]: FloatType, + [pe]: HalfFloatType, + [Ot]: UnsignedByteType, + [Ft]: UnsignedByteType, + [de]: FloatType, + [se]: HalfFloatType, + [yt]: UnsignedByteType, + [dt]: UnsignedByteType, + [xe]: FloatType, + [$t]: HalfFloatType, + [gt]: UnsignedByteType, + [ct]: UnsignedByteType, + [In]: UnsignedByteType, + [Sn]: UnsignedByteType +}; +async function createRawTexture(container) { + const { vkFormat } = container; + if (FORMAT_MAP[vkFormat] === void 0) { + throw new Error("THREE.KTX2Loader: Unsupported vkFormat."); + } + let zstd; + if (container.supercompressionScheme === n) { + if (!_zstd) { + _zstd = new Promise(async (resolve) => { + const zstd2 = new Q2(); + await zstd2.init(); + resolve(zstd2); + }); + } + zstd = await _zstd; + } + const mipmaps = []; + for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) { + const levelWidth = Math.max(1, container.pixelWidth >> levelIndex); + const levelHeight = Math.max(1, container.pixelHeight >> levelIndex); + const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0; + const level = container.levels[levelIndex]; + let levelData; + if (container.supercompressionScheme === t) { + levelData = level.levelData; + } else if (container.supercompressionScheme === n) { + levelData = zstd.decode(level.levelData, level.uncompressedByteLength); + } else { + throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme."); + } + let data2; + if (TYPE_MAP[vkFormat] === FloatType) { + data2 = new Float32Array( + levelData.buffer, + levelData.byteOffset, + levelData.byteLength / Float32Array.BYTES_PER_ELEMENT + ); + } else if (TYPE_MAP[vkFormat] === HalfFloatType) { + data2 = new Uint16Array( + levelData.buffer, + levelData.byteOffset, + levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT + ); + } else { + data2 = levelData; + } + mipmaps.push({ + data: data2, + width: levelWidth, + height: levelHeight, + depth: levelDepth + }); + } + let texture; + if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) { + texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth); + } else { + if (container.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth."); + texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight); + } + texture.mipmaps = mipmaps; + texture.type = TYPE_MAP[vkFormat]; + texture.format = FORMAT_MAP[vkFormat]; + texture.colorSpace = parseColorSpace(container); + texture.needsUpdate = true; + return Promise.resolve(texture); +} +function parseColorSpace(container) { + const dfd = container.dataFormatDescriptor[0]; + if (dfd.colorPrimaries === F) { + return dfd.transferFunction === x ? SRGBColorSpace : LinearSRGBColorSpace; + } else if (dfd.colorPrimaries === X) { + return dfd.transferFunction === x ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace; + } else if (dfd.colorPrimaries === E) { + return NoColorSpace; + } else { + console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`); + return NoColorSpace; + } +} + +// node_modules/three/examples/jsm/loaders/KTXLoader.js +var KTXLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const ktx = new KhronosTextureContainer(buffer, 1); + return { + mipmaps: ktx.mipmaps(loadMipmaps), + width: ktx.pixelWidth, + height: ktx.pixelHeight, + format: ktx.glInternalFormat, + isCubemap: ktx.numberOfFaces === 6, + mipmapCount: ktx.numberOfMipmapLevels + }; + } +}; +var HEADER_LEN = 12 + 13 * 4; +var COMPRESSED_2D = 0; +var KhronosTextureContainer = class { + /** + * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file + * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or + * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented + * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented + */ + constructor(arrayBuffer, facesExpected) { + this.arrayBuffer = arrayBuffer; + const identifier = new Uint8Array(this.arrayBuffer, 0, 12); + if (identifier[0] !== 171 || identifier[1] !== 75 || identifier[2] !== 84 || identifier[3] !== 88 || identifier[4] !== 32 || identifier[5] !== 49 || identifier[6] !== 49 || identifier[7] !== 187 || identifier[8] !== 13 || identifier[9] !== 10 || identifier[10] !== 26 || identifier[11] !== 10) { + console.error("texture missing KTX identifier"); + return; + } + const dataSize = Uint32Array.BYTES_PER_ELEMENT; + const headerDataView = new DataView(this.arrayBuffer, 12, 13 * dataSize); + const endianness = headerDataView.getUint32(0, true); + const littleEndian = endianness === 67305985; + this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); + this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); + this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); + this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); + this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); + this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); + this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); + this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); + this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); + this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); + this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); + this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); + if (this.glType !== 0) { + console.warn("only compressed formats currently supported"); + return; + } else { + this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels); + } + if (this.pixelHeight === 0 || this.pixelDepth !== 0) { + console.warn("only 2D textures currently supported"); + return; + } + if (this.numberOfArrayElements !== 0) { + console.warn("texture arrays not currently supported"); + return; + } + if (this.numberOfFaces !== facesExpected) { + console.warn("number of faces expected" + facesExpected + ", but found " + this.numberOfFaces); + return; + } + this.loadType = COMPRESSED_2D; + } + mipmaps(loadMipmaps) { + const mipmaps = []; + let dataOffset = HEADER_LEN + this.bytesOfKeyValueData; + let width2 = this.pixelWidth; + let height2 = this.pixelHeight; + const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1; + for (let level = 0; level < mipmapCount; level++) { + const imageSize = new Int32Array(this.arrayBuffer, dataOffset, 1)[0]; + dataOffset += 4; + for (let face = 0; face < this.numberOfFaces; face++) { + const byteArray = new Uint8Array(this.arrayBuffer, dataOffset, imageSize); + mipmaps.push({ "data": byteArray, "width": width2, "height": height2 }); + dataOffset += imageSize; + dataOffset += 3 - (imageSize + 3) % 4; + } + width2 = Math.max(1, width2 * 0.5); + height2 = Math.max(1, height2 * 0.5); + } + return mipmaps; + } +}; + +// node_modules/three/examples/jsm/loaders/LDrawLoader.js +var FINISH_TYPE_DEFAULT = 0; +var FINISH_TYPE_CHROME = 1; +var FINISH_TYPE_PEARLESCENT = 2; +var FINISH_TYPE_RUBBER = 3; +var FINISH_TYPE_MATTE_METALLIC = 4; +var FINISH_TYPE_METAL = 5; +var FILE_LOCATION_TRY_PARTS = 0; +var FILE_LOCATION_TRY_P = 1; +var FILE_LOCATION_TRY_MODELS = 2; +var FILE_LOCATION_AS_IS = 3; +var FILE_LOCATION_TRY_RELATIVE = 4; +var FILE_LOCATION_TRY_ABSOLUTE = 5; +var FILE_LOCATION_NOT_FOUND = 6; +var MAIN_COLOUR_CODE = "16"; +var MAIN_EDGE_COLOUR_CODE = "24"; +var COLOR_SPACE_LDRAW = SRGBColorSpace; +var _tempVec0 = new Vector3(); +var _tempVec1 = new Vector3(); +var LDrawConditionalLineMaterial = class extends ShaderMaterial { + constructor(parameters) { + super({ + uniforms: UniformsUtils.merge([ + UniformsLib.fog, + { + diffuse: { + value: new Color() + }, + opacity: { + value: 1 + } + } + ]), + vertexShader: ( + /* glsl */ + ` + attribute vec3 control0; + attribute vec3 control1; + attribute vec3 direction; + varying float discardFlag; + + #include + #include + #include + #include + #include + void main() { + #include + + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + gl_Position = projectionMatrix * mvPosition; + + // Transform the line segment ends and control points into camera clip space + vec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 ); + vec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 ); + vec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + vec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 ); + + c0.xy /= c0.w; + c1.xy /= c1.w; + p0.xy /= p0.w; + p1.xy /= p1.w; + + // Get the direction of the segment and an orthogonal vector + vec2 dir = p1.xy - p0.xy; + vec2 norm = vec2( -dir.y, dir.x ); + + // Get control point directions from the line + vec2 c0dir = c0.xy - p1.xy; + vec2 c1dir = c1.xy - p1.xy; + + // If the vectors to the controls points are pointed in different directions away + // from the line segment then the line should not be drawn. + float d0 = dot( normalize( norm ), normalize( c0dir ) ); + float d1 = dot( normalize( norm ), normalize( c1dir ) ); + discardFlag = float( sign( d0 ) != sign( d1 ) ); + + #include + #include + #include + } + ` + ), + fragmentShader: ( + /* glsl */ + ` + uniform vec3 diffuse; + uniform float opacity; + varying float discardFlag; + + #include + #include + #include + #include + #include + void main() { + + if ( discardFlag > 0.5 ) discard; + + #include + vec3 outgoingLight = vec3( 0.0 ); + vec4 diffuseColor = vec4( diffuse, opacity ); + #include + #include + outgoingLight = diffuseColor.rgb; // simple shader + gl_FragColor = vec4( outgoingLight, diffuseColor.a ); + #include + #include + #include + #include + } + ` + ) + }); + Object.defineProperties(this, { + opacity: { + get: function() { + return this.uniforms.opacity.value; + }, + set: function(value2) { + this.uniforms.opacity.value = value2; + } + }, + color: { + get: function() { + return this.uniforms.diffuse.value; + } + } + }); + this.setValues(parameters); + this.isLDrawConditionalLineMaterial = true; + } +}; +var ConditionalLineSegments = class extends LineSegments { + constructor(geometry, material) { + super(geometry, material); + this.isConditionalLine = true; + } +}; +function generateFaceNormals(faces) { + for (let i = 0, l2 = faces.length; i < l2; i++) { + const face = faces[i]; + const vertices = face.vertices; + const v0 = vertices[0]; + const v12 = vertices[1]; + const v2 = vertices[2]; + _tempVec0.subVectors(v12, v0); + _tempVec1.subVectors(v2, v12); + face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); + } +} +var _ray2 = new Ray(); +function smoothNormals(faces, lineSegments, checkSubSegments = false) { + const hashMultiplier = (1 + 1e-10) * 100; + function hashVertex(v) { + const x2 = ~~(v.x * hashMultiplier); + const y2 = ~~(v.y * hashMultiplier); + const z = ~~(v.z * hashMultiplier); + return `${x2},${y2},${z}`; + } + function hashEdge(v0, v12) { + return `${hashVertex(v0)}_${hashVertex(v12)}`; + } + function toNormalizedRay(v0, v12, targetRay) { + targetRay.direction.subVectors(v12, v0).normalize(); + const scalar = v0.dot(targetRay.direction); + targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar); + return targetRay; + } + function hashRay(ray) { + return hashEdge(ray.origin, ray.direction); + } + const hardEdges = /* @__PURE__ */ new Set(); + const hardEdgeRays = /* @__PURE__ */ new Map(); + const halfEdgeList = {}; + const normals = []; + for (let i = 0, l2 = lineSegments.length; i < l2; i++) { + const ls = lineSegments[i]; + const vertices = ls.vertices; + const v0 = vertices[0]; + const v12 = vertices[1]; + hardEdges.add(hashEdge(v0, v12)); + hardEdges.add(hashEdge(v12, v0)); + if (checkSubSegments) { + const ray = toNormalizedRay(v0, v12, new Ray()); + const rh1 = hashRay(ray); + if (!hardEdgeRays.has(rh1)) { + toNormalizedRay(v12, v0, ray); + const rh2 = hashRay(ray); + const info2 = { + ray, + distances: [] + }; + hardEdgeRays.set(rh1, info2); + hardEdgeRays.set(rh2, info2); + } + const info = hardEdgeRays.get(rh1); + let d0 = info.ray.direction.dot(v0); + let d1 = info.ray.direction.dot(v12); + if (d0 > d1) { + [d0, d1] = [d1, d0]; + } + info.distances.push(d0, d1); + } + } + for (let i = 0, l2 = faces.length; i < l2; i++) { + const tri = faces[i]; + const vertices = tri.vertices; + const vertCount = vertices.length; + for (let i2 = 0; i2 < vertCount; i2++) { + const index2 = i2; + const next = (i2 + 1) % vertCount; + const v0 = vertices[index2]; + const v12 = vertices[next]; + const hash = hashEdge(v0, v12); + if (hardEdges.has(hash)) { + continue; + } + if (checkSubSegments) { + toNormalizedRay(v0, v12, _ray2); + const rayHash = hashRay(_ray2); + if (hardEdgeRays.has(rayHash)) { + const info2 = hardEdgeRays.get(rayHash); + const { ray, distances } = info2; + let d0 = ray.direction.dot(v0); + let d1 = ray.direction.dot(v12); + if (d0 > d1) { + [d0, d1] = [d1, d0]; + } + let found = false; + for (let i3 = 0, l3 = distances.length; i3 < l3; i3 += 2) { + if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) { + found = true; + break; + } + } + if (found) { + continue; + } + } + } + const info = { + index: index2, + tri + }; + halfEdgeList[hash] = info; + } + } + while (true) { + let halfEdge = null; + for (const key2 in halfEdgeList) { + halfEdge = halfEdgeList[key2]; + break; + } + if (halfEdge === null) { + break; + } + const queue = [halfEdge]; + while (queue.length > 0) { + const tri = queue.pop().tri; + const vertices = tri.vertices; + const vertNormals = tri.normals; + const faceNormal = tri.faceNormal; + const vertCount = vertices.length; + for (let i2 = 0; i2 < vertCount; i2++) { + const index2 = i2; + const next = (i2 + 1) % vertCount; + const v0 = vertices[index2]; + const v12 = vertices[next]; + const hash = hashEdge(v0, v12); + delete halfEdgeList[hash]; + const reverseHash = hashEdge(v12, v0); + const otherInfo = halfEdgeList[reverseHash]; + if (otherInfo) { + const otherTri = otherInfo.tri; + const otherIndex = otherInfo.index; + const otherNormals = otherTri.normals; + const otherVertCount = otherNormals.length; + const otherFaceNormal = otherTri.faceNormal; + if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < 0.25) { + continue; + } + if (reverseHash in halfEdgeList) { + queue.push(otherInfo); + delete halfEdgeList[reverseHash]; + } + const otherNext = (otherIndex + 1) % otherVertCount; + if (vertNormals[index2] && otherNormals[otherNext] && vertNormals[index2] !== otherNormals[otherNext]) { + otherNormals[otherNext].norm.add(vertNormals[index2].norm); + vertNormals[index2].norm = otherNormals[otherNext].norm; + } + let sharedNormal1 = vertNormals[index2] || otherNormals[otherNext]; + if (sharedNormal1 === null) { + sharedNormal1 = { norm: new Vector3() }; + normals.push(sharedNormal1.norm); + } + if (vertNormals[index2] === null) { + vertNormals[index2] = sharedNormal1; + sharedNormal1.norm.add(faceNormal); + } + if (otherNormals[otherNext] === null) { + otherNormals[otherNext] = sharedNormal1; + sharedNormal1.norm.add(otherFaceNormal); + } + if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) { + otherNormals[otherIndex].norm.add(vertNormals[next].norm); + vertNormals[next].norm = otherNormals[otherIndex].norm; + } + let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex]; + if (sharedNormal2 === null) { + sharedNormal2 = { norm: new Vector3() }; + normals.push(sharedNormal2.norm); + } + if (vertNormals[next] === null) { + vertNormals[next] = sharedNormal2; + sharedNormal2.norm.add(faceNormal); + } + if (otherNormals[otherIndex] === null) { + otherNormals[otherIndex] = sharedNormal2; + sharedNormal2.norm.add(otherFaceNormal); + } + } + } + } + } + for (let i = 0, l2 = normals.length; i < l2; i++) { + normals[i].normalize(); + } +} +function isPartType(type) { + return type === "Part" || type === "Unofficial_Part"; +} +function isPrimitiveType(type) { + return /primitive/i.test(type) || type === "Subpart"; +} +var LineParser = class { + constructor(line2, lineNumber) { + this.line = line2; + this.lineLength = line2.length; + this.currentCharIndex = 0; + this.currentChar = " "; + this.lineNumber = lineNumber; + } + seekNonSpace() { + while (this.currentCharIndex < this.lineLength) { + this.currentChar = this.line.charAt(this.currentCharIndex); + if (this.currentChar !== " " && this.currentChar !== " ") { + return; + } + this.currentCharIndex++; + } + } + getToken() { + const pos0 = this.currentCharIndex++; + while (this.currentCharIndex < this.lineLength) { + this.currentChar = this.line.charAt(this.currentCharIndex); + if (this.currentChar === " " || this.currentChar === " ") { + break; + } + this.currentCharIndex++; + } + const pos1 = this.currentCharIndex; + this.seekNonSpace(); + return this.line.substring(pos0, pos1); + } + getVector() { + return new Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken())); + } + getRemainingString() { + return this.line.substring(this.currentCharIndex, this.lineLength); + } + isAtTheEnd() { + return this.currentCharIndex >= this.lineLength; + } + setToEnd() { + this.currentCharIndex = this.lineLength; + } + getLineNumberString() { + return this.lineNumber >= 0 ? " at line " + this.lineNumber : ""; + } +}; +var LDrawParsedCache = class { + constructor(loader) { + this.loader = loader; + this._cache = {}; + } + cloneResult(original) { + const result = {}; + result.faces = original.faces.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()), + normals: face.normals.map(() => null), + faceNormal: null + }; + }); + result.conditionalSegments = original.conditionalSegments.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()), + controlPoints: face.controlPoints.map((v) => v.clone()) + }; + }); + result.lineSegments = original.lineSegments.map((face) => { + return { + colorCode: face.colorCode, + material: face.material, + vertices: face.vertices.map((v) => v.clone()) + }; + }); + result.type = original.type; + result.category = original.category; + result.keywords = original.keywords; + result.author = original.author; + result.subobjects = original.subobjects; + result.fileName = original.fileName; + result.totalFaces = original.totalFaces; + result.startingBuildingStep = original.startingBuildingStep; + result.materials = original.materials; + result.group = null; + return result; + } + async fetchData(fileName) { + let triedLowerCase = false; + let locationState = FILE_LOCATION_TRY_PARTS; + while (locationState !== FILE_LOCATION_NOT_FOUND) { + let subobjectURL = fileName; + switch (locationState) { + case FILE_LOCATION_AS_IS: + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_PARTS: + subobjectURL = "parts/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_P: + subobjectURL = "p/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_MODELS: + subobjectURL = "models/" + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_RELATIVE: + subobjectURL = fileName.substring(0, fileName.lastIndexOf("/") + 1) + subobjectURL; + locationState = locationState + 1; + break; + case FILE_LOCATION_TRY_ABSOLUTE: + if (triedLowerCase) { + locationState = FILE_LOCATION_NOT_FOUND; + } else { + fileName = fileName.toLowerCase(); + subobjectURL = fileName; + triedLowerCase = true; + locationState = FILE_LOCATION_TRY_PARTS; + } + break; + } + const loader = this.loader; + const fileLoader = new FileLoader(loader.manager); + fileLoader.setPath(loader.partsLibraryPath); + fileLoader.setRequestHeader(loader.requestHeader); + fileLoader.setWithCredentials(loader.withCredentials); + try { + const text2 = await fileLoader.loadAsync(subobjectURL); + return text2; + } catch (_) { + continue; + } + } + throw new Error('LDrawLoader: Subobject "' + fileName + '" could not be loaded.'); + } + parse(text2, fileName = null) { + const loader = this.loader; + const faces = []; + const lineSegments = []; + const conditionalSegments = []; + const subobjects = []; + const materials = {}; + const getLocalMaterial = (colorCode) => { + return materials[colorCode] || null; + }; + let type = "Model"; + let category = null; + let keywords = null; + let author = null; + let totalFaces = 0; + if (text2.indexOf("\r\n") !== -1) { + text2 = text2.replace(/\r\n/g, "\n"); + } + const lines = text2.split("\n"); + const numLines = lines.length; + let parsingEmbeddedFiles = false; + let currentEmbeddedFileName = null; + let currentEmbeddedText = null; + let bfcCertified = false; + let bfcCCW = true; + let bfcInverted = false; + let bfcCull = true; + let startingBuildingStep = false; + for (let lineIndex = 0; lineIndex < numLines; lineIndex++) { + const line2 = lines[lineIndex]; + if (line2.length === 0) continue; + if (parsingEmbeddedFiles) { + if (line2.startsWith("0 FILE ")) { + this.setData(currentEmbeddedFileName, currentEmbeddedText); + currentEmbeddedFileName = line2.substring(7); + currentEmbeddedText = ""; + } else { + currentEmbeddedText += line2 + "\n"; + } + continue; + } + const lp = new LineParser(line2, lineIndex + 1); + lp.seekNonSpace(); + if (lp.isAtTheEnd()) { + continue; + } + const lineType = lp.getToken(); + let material; + let colorCode; + let segment; + let ccw; + let doubleSided; + let v0, v12, v2, v3, c0, c1; + switch (lineType) { + case "0": + const meta2 = lp.getToken(); + if (meta2) { + switch (meta2) { + case "!LDRAW_ORG": + type = lp.getToken(); + break; + case "!COLOUR": + material = loader.parseColorMetaDirective(lp); + if (material) { + materials[material.userData.code] = material; + } else { + console.warn("LDrawLoader: Error parsing material" + lp.getLineNumberString()); + } + break; + case "!CATEGORY": + category = lp.getToken(); + break; + case "!KEYWORDS": + const newKeywords = lp.getRemainingString().split(","); + if (newKeywords.length > 0) { + if (!keywords) { + keywords = []; + } + newKeywords.forEach(function(keyword) { + keywords.push(keyword.trim()); + }); + } + break; + case "FILE": + if (lineIndex > 0) { + parsingEmbeddedFiles = true; + currentEmbeddedFileName = lp.getRemainingString(); + currentEmbeddedText = ""; + bfcCertified = false; + bfcCCW = true; + } + break; + case "BFC": + while (!lp.isAtTheEnd()) { + const token = lp.getToken(); + switch (token) { + case "CERTIFY": + case "NOCERTIFY": + bfcCertified = token === "CERTIFY"; + bfcCCW = true; + break; + case "CW": + case "CCW": + bfcCCW = token === "CCW"; + break; + case "INVERTNEXT": + bfcInverted = true; + break; + case "CLIP": + case "NOCLIP": + bfcCull = token === "CLIP"; + break; + default: + console.warn('THREE.LDrawLoader: BFC directive "' + token + '" is unknown.'); + break; + } + } + break; + case "STEP": + startingBuildingStep = true; + break; + case "Author:": + author = lp.getToken(); + break; + default: + break; + } + } + break; + case "1": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + const posX = parseFloat(lp.getToken()); + const posY = parseFloat(lp.getToken()); + const posZ = parseFloat(lp.getToken()); + const m0 = parseFloat(lp.getToken()); + const m1 = parseFloat(lp.getToken()); + const m2 = parseFloat(lp.getToken()); + const m3 = parseFloat(lp.getToken()); + const m4 = parseFloat(lp.getToken()); + const m5 = parseFloat(lp.getToken()); + const m6 = parseFloat(lp.getToken()); + const m7 = parseFloat(lp.getToken()); + const m8 = parseFloat(lp.getToken()); + const matrix3 = new Matrix4().set( + m0, + m1, + m2, + posX, + m3, + m4, + m5, + posY, + m6, + m7, + m8, + posZ, + 0, + 0, + 0, + 1 + ); + let fileName2 = lp.getRemainingString().trim().replace(/\\/g, "/"); + if (loader.fileMap[fileName2]) { + fileName2 = loader.fileMap[fileName2]; + } else { + if (fileName2.startsWith("s/")) { + fileName2 = "parts/" + fileName2; + } else if (fileName2.startsWith("48/")) { + fileName2 = "p/" + fileName2; + } + } + subobjects.push({ + material, + colorCode, + matrix: matrix3, + fileName: fileName2, + inverted: bfcInverted, + startingBuildingStep + }); + startingBuildingStep = false; + bfcInverted = false; + break; + case "2": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + v0 = lp.getVector(); + v12 = lp.getVector(); + segment = { + material, + colorCode, + vertices: [v0, v12] + }; + lineSegments.push(segment); + break; + case "5": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + v0 = lp.getVector(); + v12 = lp.getVector(); + c0 = lp.getVector(); + c1 = lp.getVector(); + segment = { + material, + colorCode, + vertices: [v0, v12], + controlPoints: [c0, c1] + }; + conditionalSegments.push(segment); + break; + case "3": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + ccw = bfcCCW; + doubleSided = !bfcCertified || !bfcCull; + if (ccw === true) { + v0 = lp.getVector(); + v12 = lp.getVector(); + v2 = lp.getVector(); + } else { + v2 = lp.getVector(); + v12 = lp.getVector(); + v0 = lp.getVector(); + } + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v0, v12, v2], + normals: [null, null, null] + }); + totalFaces++; + if (doubleSided === true) { + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v2, v12, v0], + normals: [null, null, null] + }); + totalFaces++; + } + break; + case "4": + colorCode = lp.getToken(); + material = getLocalMaterial(colorCode); + ccw = bfcCCW; + doubleSided = !bfcCertified || !bfcCull; + if (ccw === true) { + v0 = lp.getVector(); + v12 = lp.getVector(); + v2 = lp.getVector(); + v3 = lp.getVector(); + } else { + v3 = lp.getVector(); + v2 = lp.getVector(); + v12 = lp.getVector(); + v0 = lp.getVector(); + } + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v0, v12, v2, v3], + normals: [null, null, null, null] + }); + totalFaces += 2; + if (doubleSided === true) { + faces.push({ + material, + colorCode, + faceNormal: null, + vertices: [v3, v2, v12, v0], + normals: [null, null, null, null] + }); + totalFaces += 2; + } + break; + default: + throw new Error('LDrawLoader: Unknown line type "' + lineType + '"' + lp.getLineNumberString() + "."); + } + } + if (parsingEmbeddedFiles) { + this.setData(currentEmbeddedFileName, currentEmbeddedText); + } + return { + faces, + conditionalSegments, + lineSegments, + type, + category, + keywords, + author, + subobjects, + totalFaces, + startingBuildingStep, + materials, + fileName, + group: null + }; + } + // returns an (optionally cloned) instance of the data + getData(fileName, clone2 = true) { + const key2 = fileName.toLowerCase(); + const result = this._cache[key2]; + if (result === null || result instanceof Promise) { + return null; + } + if (clone2) { + return this.cloneResult(result); + } else { + return result; + } + } + // kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when + // the data is ready to use and can be retrieved synchronously with "getData". + async ensureDataLoaded(fileName) { + const key2 = fileName.toLowerCase(); + if (!(key2 in this._cache)) { + this._cache[key2] = this.fetchData(fileName).then((text2) => { + const info = this.parse(text2, fileName); + this._cache[key2] = info; + return info; + }); + } + await this._cache[key2]; + } + // sets the data in the cache from parsed data + setData(fileName, text2) { + const key2 = fileName.toLowerCase(); + this._cache[key2] = this.parse(text2, fileName); + } +}; +function getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) { + const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE; + if (isPassthrough) { + colorCode = parentColorCode; + } + return materialHierarchy[colorCode] || null; +} +var LDrawPartsGeometryCache = class { + constructor(loader) { + this.loader = loader; + this.parseCache = new LDrawParsedCache(loader); + this._cache = {}; + } + // Convert the given file information into a mesh by processing subobjects. + async processIntoMesh(info) { + const loader = this.loader; + const parseCache = this.parseCache; + const faceMaterials = /* @__PURE__ */ new Set(); + const processInfoSubobjects = async (info2, subobject = null) => { + const subobjects = info2.subobjects; + const promises = []; + for (let i = 0, l2 = subobjects.length; i < l2; i++) { + const subobject2 = subobjects[i]; + const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => { + const subobjectInfo = parseCache.getData(subobject2.fileName, false); + if (!isPrimitiveType(subobjectInfo.type)) { + return this.loadModel(subobject2.fileName).catch((error) => { + console.warn(error); + return null; + }); + } + return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2); + }); + promises.push(promise); + } + const group2 = new Group(); + group2.userData.category = info2.category; + group2.userData.keywords = info2.keywords; + group2.userData.author = info2.author; + group2.userData.type = info2.type; + group2.userData.fileName = info2.fileName; + info2.group = group2; + const subobjectInfos = await Promise.all(promises); + for (let i = 0, l2 = subobjectInfos.length; i < l2; i++) { + const subobject2 = info2.subobjects[i]; + const subobjectInfo = subobjectInfos[i]; + if (subobjectInfo === null) { + continue; + } + if (subobjectInfo.isGroup) { + const subobjectGroup = subobjectInfo; + subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale); + subobjectGroup.userData.startingBuildingStep = subobject2.startingBuildingStep; + subobjectGroup.name = subobject2.fileName; + loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials); + subobjectGroup.userData.colorCode = subobject2.colorCode; + group2.add(subobjectGroup); + continue; + } + if (subobjectInfo.group.children.length) { + group2.add(subobjectInfo.group); + } + const parentLineSegments = info2.lineSegments; + const parentConditionalSegments = info2.conditionalSegments; + const parentFaces = info2.faces; + const lineSegments = subobjectInfo.lineSegments; + const conditionalSegments = subobjectInfo.conditionalSegments; + const faces = subobjectInfo.faces; + const matrix3 = subobject2.matrix; + const inverted = subobject2.inverted; + const matrixScaleInverted = matrix3.determinant() < 0; + const colorCode = subobject2.colorCode; + const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode; + for (let i2 = 0, l3 = lineSegments.length; i2 < l3; i2++) { + const ls = lineSegments[i2]; + const vertices = ls.vertices; + vertices[0].applyMatrix4(matrix3); + vertices[1].applyMatrix4(matrix3); + ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode; + ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true); + parentLineSegments.push(ls); + } + for (let i2 = 0, l3 = conditionalSegments.length; i2 < l3; i2++) { + const os = conditionalSegments[i2]; + const vertices = os.vertices; + const controlPoints = os.controlPoints; + vertices[0].applyMatrix4(matrix3); + vertices[1].applyMatrix4(matrix3); + controlPoints[0].applyMatrix4(matrix3); + controlPoints[1].applyMatrix4(matrix3); + os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode; + os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true); + parentConditionalSegments.push(os); + } + for (let i2 = 0, l3 = faces.length; i2 < l3; i2++) { + const tri = faces[i2]; + const vertices = tri.vertices; + for (let i3 = 0, l4 = vertices.length; i3 < l4; i3++) { + vertices[i3].applyMatrix4(matrix3); + } + tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode; + tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false); + faceMaterials.add(tri.colorCode); + if (matrixScaleInverted !== inverted) { + vertices.reverse(); + } + parentFaces.push(tri); + } + info2.totalFaces += subobjectInfo.totalFaces; + } + if (subobject) { + loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials); + group2.userData.colorCode = subobject.colorCode; + } + return info2; + }; + for (let i = 0, l2 = info.faces; i < l2; i++) { + faceMaterials.add(info.faces[i].colorCode); + } + await processInfoSubobjects(info); + if (loader.smoothNormals) { + const checkSubSegments = faceMaterials.size > 1; + generateFaceNormals(info.faces); + smoothNormals(info.faces, info.lineSegments, checkSubSegments); + } + const group = info.group; + if (info.faces.length > 0) { + group.add(createObject(this.loader, info.faces, 3, false, info.totalFaces)); + } + if (info.lineSegments.length > 0) { + group.add(createObject(this.loader, info.lineSegments, 2)); + } + if (info.conditionalSegments.length > 0) { + group.add(createObject(this.loader, info.conditionalSegments, 2, true)); + } + return group; + } + hasCachedModel(fileName) { + return fileName !== null && fileName.toLowerCase() in this._cache; + } + async getCachedModel(fileName) { + if (fileName !== null && this.hasCachedModel(fileName)) { + const key2 = fileName.toLowerCase(); + const group = await this._cache[key2]; + return group.clone(); + } else { + return null; + } + } + // Loads and parses the model with the given file name. Returns a cached copy if available. + async loadModel(fileName) { + const parseCache = this.parseCache; + const key2 = fileName.toLowerCase(); + if (this.hasCachedModel(fileName)) { + return this.getCachedModel(fileName); + } else { + await parseCache.ensureDataLoaded(fileName); + const info = parseCache.getData(fileName); + const promise = this.processIntoMesh(info); + if (this.hasCachedModel(fileName)) { + return this.getCachedModel(fileName); + } + if (isPartType(info.type)) { + this._cache[key2] = promise; + } + const group = await promise; + return group.clone(); + } + } + // parses the given model text into a renderable object. Returns cached copy if available. + async parseModel(text2) { + const parseCache = this.parseCache; + const info = parseCache.parse(text2); + if (isPartType(info.type) && this.hasCachedModel(info.fileName)) { + return this.getCachedModel(info.fileName); + } + return this.processIntoMesh(info); + } +}; +function sortByMaterial(a2, b3) { + if (a2.colorCode === b3.colorCode) { + return 0; + } + if (a2.colorCode < b3.colorCode) { + return -1; + } + return 1; +} +function createObject(loader, elements, elementSize, isConditionalSegments = false, totalElements = null) { + elements.sort(sortByMaterial); + if (totalElements === null) { + totalElements = elements.length; + } + const positions = new Float32Array(elementSize * totalElements * 3); + const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null; + const materials = []; + const quadArray = new Array(6); + const bufferGeometry = new BufferGeometry(); + let prevMaterial = null; + let index0 = 0; + let numGroupVerts = 0; + let offset = 0; + for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) { + const elem2 = elements[iElem]; + let vertices = elem2.vertices; + if (vertices.length === 4) { + quadArray[0] = vertices[0]; + quadArray[1] = vertices[1]; + quadArray[2] = vertices[2]; + quadArray[3] = vertices[0]; + quadArray[4] = vertices[2]; + quadArray[5] = vertices[3]; + vertices = quadArray; + } + for (let j = 0, l2 = vertices.length; j < l2; j++) { + const v = vertices[j]; + const index2 = offset + j * 3; + positions[index2 + 0] = v.x; + positions[index2 + 1] = v.y; + positions[index2 + 2] = v.z; + } + if (elementSize === 3) { + if (!elem2.faceNormal) { + const v0 = vertices[0]; + const v12 = vertices[1]; + const v2 = vertices[2]; + _tempVec0.subVectors(v12, v0); + _tempVec1.subVectors(v2, v12); + elem2.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); + } + let elemNormals = elem2.normals; + if (elemNormals.length === 4) { + quadArray[0] = elemNormals[0]; + quadArray[1] = elemNormals[1]; + quadArray[2] = elemNormals[2]; + quadArray[3] = elemNormals[0]; + quadArray[4] = elemNormals[2]; + quadArray[5] = elemNormals[3]; + elemNormals = quadArray; + } + for (let j = 0, l2 = elemNormals.length; j < l2; j++) { + let n2 = elem2.faceNormal; + if (elemNormals[j]) { + n2 = elemNormals[j].norm; + } + const index2 = offset + j * 3; + normals[index2 + 0] = n2.x; + normals[index2 + 1] = n2.y; + normals[index2 + 2] = n2.z; + } + } + if (prevMaterial !== elem2.colorCode) { + if (prevMaterial !== null) { + bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1); + } + const material = elem2.material; + if (material !== null) { + if (elementSize === 3) { + materials.push(material); + } else if (elementSize === 2) { + if (isConditionalSegments) { + const edgeMaterial = loader.edgeMaterialCache.get(material); + materials.push(loader.conditionalEdgeMaterialCache.get(edgeMaterial)); + } else { + materials.push(loader.edgeMaterialCache.get(material)); + } + } + } else { + materials.push(elem2.colorCode); + } + prevMaterial = elem2.colorCode; + index0 = offset / 3; + numGroupVerts = vertices.length; + } else { + numGroupVerts += vertices.length; + } + offset += 3 * vertices.length; + } + if (numGroupVerts > 0) { + bufferGeometry.addGroup(index0, Infinity, materials.length - 1); + } + bufferGeometry.setAttribute("position", new BufferAttribute(positions, 3)); + if (normals !== null) { + bufferGeometry.setAttribute("normal", new BufferAttribute(normals, 3)); + } + let object3d = null; + if (elementSize === 2) { + if (isConditionalSegments) { + object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } else { + object3d = new LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } + } else if (elementSize === 3) { + object3d = new Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials); + } + if (isConditionalSegments) { + object3d.isConditionalLine = true; + const controlArray0 = new Float32Array(elements.length * 3 * 2); + const controlArray1 = new Float32Array(elements.length * 3 * 2); + const directionArray = new Float32Array(elements.length * 3 * 2); + for (let i = 0, l2 = elements.length; i < l2; i++) { + const os = elements[i]; + const vertices = os.vertices; + const controlPoints = os.controlPoints; + const c0 = controlPoints[0]; + const c1 = controlPoints[1]; + const v0 = vertices[0]; + const v12 = vertices[1]; + const index2 = i * 3 * 2; + controlArray0[index2 + 0] = c0.x; + controlArray0[index2 + 1] = c0.y; + controlArray0[index2 + 2] = c0.z; + controlArray0[index2 + 3] = c0.x; + controlArray0[index2 + 4] = c0.y; + controlArray0[index2 + 5] = c0.z; + controlArray1[index2 + 0] = c1.x; + controlArray1[index2 + 1] = c1.y; + controlArray1[index2 + 2] = c1.z; + controlArray1[index2 + 3] = c1.x; + controlArray1[index2 + 4] = c1.y; + controlArray1[index2 + 5] = c1.z; + directionArray[index2 + 0] = v12.x - v0.x; + directionArray[index2 + 1] = v12.y - v0.y; + directionArray[index2 + 2] = v12.z - v0.z; + directionArray[index2 + 3] = v12.x - v0.x; + directionArray[index2 + 4] = v12.y - v0.y; + directionArray[index2 + 5] = v12.z - v0.z; + } + bufferGeometry.setAttribute("control0", new BufferAttribute(controlArray0, 3, false)); + bufferGeometry.setAttribute("control1", new BufferAttribute(controlArray1, 3, false)); + bufferGeometry.setAttribute("direction", new BufferAttribute(directionArray, 3, false)); + } + return object3d; +} +var LDrawLoader = class extends Loader { + constructor(manager) { + super(manager); + this.materials = []; + this.materialLibrary = {}; + this.edgeMaterialCache = /* @__PURE__ */ new WeakMap(); + this.conditionalEdgeMaterialCache = /* @__PURE__ */ new WeakMap(); + this.partsCache = new LDrawPartsGeometryCache(this); + this.fileMap = {}; + this.setMaterials([]); + this.smoothNormals = true; + this.partsLibraryPath = ""; + this.missingColorMaterial = new MeshStandardMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935, roughness: 0.3, metalness: 0 }); + this.missingEdgeColorMaterial = new LineBasicMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, color: 16711935 }); + this.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial({ name: Loader.DEFAULT_MATERIAL_NAME, fog: true, color: 16711935 }); + this.edgeMaterialCache.set(this.missingColorMaterial, this.missingEdgeColorMaterial); + this.conditionalEdgeMaterialCache.set(this.missingEdgeColorMaterial, this.missingConditionalEdgeColorMaterial); + } + setPartsLibraryPath(path) { + this.partsLibraryPath = path; + return this; + } + async preloadMaterials(url) { + const fileLoader = new FileLoader(this.manager); + fileLoader.setPath(this.path); + fileLoader.setRequestHeader(this.requestHeader); + fileLoader.setWithCredentials(this.withCredentials); + const text2 = await fileLoader.loadAsync(url); + const colorLineRegex = /^0 !COLOUR/; + const lines = text2.split(/[\n\r]/g); + const materials = []; + for (let i = 0, l2 = lines.length; i < l2; i++) { + const line2 = lines[i]; + if (colorLineRegex.test(line2)) { + const directive = line2.replace(colorLineRegex, ""); + const material = this.parseColorMetaDirective(new LineParser(directive)); + materials.push(material); + } + } + this.setMaterials(materials); + } + load(url, onLoad, onProgress, onError) { + const fileLoader = new FileLoader(this.manager); + fileLoader.setPath(this.path); + fileLoader.setRequestHeader(this.requestHeader); + fileLoader.setWithCredentials(this.withCredentials); + fileLoader.load(url, (text2) => { + this.partsCache.parseModel(text2, this.materialLibrary).then((group) => { + this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true); + this.computeBuildingSteps(group); + group.userData.fileName = url; + onLoad(group); + }).catch(onError); + }, onProgress, onError); + } + parse(text2, onLoad, onError) { + this.partsCache.parseModel(text2, this.materialLibrary).then((group) => { + this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true); + this.computeBuildingSteps(group); + group.userData.fileName = ""; + onLoad(group); + }).catch(onError); + } + setMaterials(materials) { + this.materialLibrary = {}; + this.materials = []; + for (let i = 0, l2 = materials.length; i < l2; i++) { + this.addMaterial(materials[i]); + } + this.addMaterial(this.parseColorMetaDirective(new LineParser("Main_Colour CODE 16 VALUE #FF8080 EDGE #333333"))); + this.addMaterial(this.parseColorMetaDirective(new LineParser("Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333"))); + return this; + } + setFileMap(fileMap) { + this.fileMap = fileMap; + return this; + } + addMaterial(material) { + const matLib = this.materialLibrary; + if (!matLib[material.userData.code]) { + this.materials.push(material); + matLib[material.userData.code] = material; + } + return this; + } + getMaterial(colorCode) { + if (colorCode.startsWith("0x2")) { + const color = colorCode.substring(3); + return this.parseColorMetaDirective(new LineParser("Direct_Color_" + color + " CODE -1 VALUE #" + color + " EDGE #" + color)); + } + return this.materialLibrary[colorCode] || null; + } + // Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present + // in the material array if they need to be filled in. + applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) { + const loader = this; + const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE; + group.traverse((c2) => { + if (c2.isMesh || c2.isLineSegments) { + if (Array.isArray(c2.material)) { + for (let i = 0, l2 = c2.material.length; i < l2; i++) { + if (!c2.material[i].isMaterial) { + c2.material[i] = getMaterial2(c2, c2.material[i]); + } + } + } else if (!c2.material.isMaterial) { + c2.material = getMaterial2(c2, c2.material); + } + } + }); + function getMaterial2(c2, colorCode) { + if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) { + return colorCode; + } + const forEdge = c2.isLineSegments || c2.isConditionalLine; + const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE; + if (isPassthrough) { + colorCode = parentColorCode; + } + let material = null; + if (colorCode in materialHierarchy) { + material = materialHierarchy[colorCode]; + } else if (finalMaterialPass) { + material = loader.getMaterial(colorCode); + if (material === null) { + console.warn(`LDrawLoader: Material properties for code ${colorCode} not available.`); + material = loader.missingColorMaterial; + } + } else { + return colorCode; + } + if (c2.isLineSegments) { + material = loader.edgeMaterialCache.get(material); + if (c2.isConditionalLine) { + material = loader.conditionalEdgeMaterialCache.get(material); + } + } + return material; + } + } + getMainMaterial() { + return this.getMaterial(MAIN_COLOUR_CODE); + } + getMainEdgeMaterial() { + const mat = this.getMaterial(MAIN_EDGE_COLOUR_CODE); + return mat ? this.edgeMaterialCache.get(mat) : null; + } + parseColorMetaDirective(lineParser) { + let code = null; + let fillColor = "#FF00FF"; + let edgeColor = "#FF00FF"; + let alpha = 1; + let isTransparent = false; + let luminance = 0; + let finishType = FINISH_TYPE_DEFAULT; + let edgeMaterial = null; + const name2 = lineParser.getToken(); + if (!name2) { + throw new Error('LDrawLoader: Material name was expected after "!COLOUR tag' + lineParser.getLineNumberString() + "."); + } + let token = null; + while (true) { + token = lineParser.getToken(); + if (!token) { + break; + } + if (!parseLuminance(token)) { + switch (token.toUpperCase()) { + case "CODE": + code = lineParser.getToken(); + break; + case "VALUE": + fillColor = lineParser.getToken(); + if (fillColor.startsWith("0x")) { + fillColor = "#" + fillColor.substring(2); + } else if (!fillColor.startsWith("#")) { + throw new Error("LDrawLoader: Invalid color while parsing material" + lineParser.getLineNumberString() + "."); + } + break; + case "EDGE": + edgeColor = lineParser.getToken(); + if (edgeColor.startsWith("0x")) { + edgeColor = "#" + edgeColor.substring(2); + } else if (!edgeColor.startsWith("#")) { + edgeMaterial = this.getMaterial(edgeColor); + if (!edgeMaterial) { + throw new Error("LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + "."); + } + edgeMaterial = this.edgeMaterialCache.get(edgeMaterial); + } + break; + case "ALPHA": + alpha = parseInt(lineParser.getToken()); + if (isNaN(alpha)) { + throw new Error("LDrawLoader: Invalid alpha value in material definition" + lineParser.getLineNumberString() + "."); + } + alpha = Math.max(0, Math.min(1, alpha / 255)); + if (alpha < 1) { + isTransparent = true; + } + break; + case "LUMINANCE": + if (!parseLuminance(lineParser.getToken())) { + throw new Error("LDrawLoader: Invalid luminance value in material definition" + LineParser.getLineNumberString() + "."); + } + break; + case "CHROME": + finishType = FINISH_TYPE_CHROME; + break; + case "PEARLESCENT": + finishType = FINISH_TYPE_PEARLESCENT; + break; + case "RUBBER": + finishType = FINISH_TYPE_RUBBER; + break; + case "MATTE_METALLIC": + finishType = FINISH_TYPE_MATTE_METALLIC; + break; + case "METAL": + finishType = FINISH_TYPE_METAL; + break; + case "MATERIAL": + lineParser.setToEnd(); + break; + default: + throw new Error('LDrawLoader: Unknown token "' + token + '" while parsing material' + lineParser.getLineNumberString() + "."); + } + } + } + let material = null; + switch (finishType) { + case FINISH_TYPE_DEFAULT: + material = new MeshStandardMaterial({ roughness: 0.3, metalness: 0 }); + break; + case FINISH_TYPE_PEARLESCENT: + material = new MeshStandardMaterial({ roughness: 0.3, metalness: 0.25 }); + break; + case FINISH_TYPE_CHROME: + material = new MeshStandardMaterial({ roughness: 0, metalness: 1 }); + break; + case FINISH_TYPE_RUBBER: + material = new MeshStandardMaterial({ roughness: 0.9, metalness: 0 }); + break; + case FINISH_TYPE_MATTE_METALLIC: + material = new MeshStandardMaterial({ roughness: 0.8, metalness: 0.4 }); + break; + case FINISH_TYPE_METAL: + material = new MeshStandardMaterial({ roughness: 0.2, metalness: 0.85 }); + break; + default: + break; + } + material.color.setStyle(fillColor, COLOR_SPACE_LDRAW); + material.transparent = isTransparent; + material.premultipliedAlpha = true; + material.opacity = alpha; + material.depthWrite = !isTransparent; + material.polygonOffset = true; + material.polygonOffsetFactor = 1; + if (luminance !== 0) { + material.emissive.setStyle(fillColor, COLOR_SPACE_LDRAW).multiplyScalar(luminance); + } + if (!edgeMaterial) { + edgeMaterial = new LineBasicMaterial({ + color: new Color().setStyle(edgeColor, COLOR_SPACE_LDRAW), + transparent: isTransparent, + opacity: alpha, + depthWrite: !isTransparent + }); + edgeMaterial.color; + edgeMaterial.userData.code = code; + edgeMaterial.name = name2 + " - Edge"; + const conditionalEdgeMaterial = new LDrawConditionalLineMaterial({ + fog: true, + transparent: isTransparent, + depthWrite: !isTransparent, + color: new Color().setStyle(edgeColor, COLOR_SPACE_LDRAW), + opacity: alpha + }); + conditionalEdgeMaterial.userData.code = code; + conditionalEdgeMaterial.name = name2 + " - Conditional Edge"; + this.conditionalEdgeMaterialCache.set(edgeMaterial, conditionalEdgeMaterial); + } + material.userData.code = code; + material.name = name2; + this.edgeMaterialCache.set(material, edgeMaterial); + this.addMaterial(material); + return material; + function parseLuminance(token2) { + let lum; + if (token2.startsWith("LUMINANCE")) { + lum = parseInt(token2.substring(9)); + } else { + lum = parseInt(token2); + } + if (isNaN(lum)) { + return false; + } + luminance = Math.max(0, Math.min(1, lum / 255)); + return true; + } + } + computeBuildingSteps(model) { + let stepNumber = 0; + model.traverse((c2) => { + if (c2.isGroup) { + if (c2.userData.startingBuildingStep) { + stepNumber++; + } + c2.userData.buildingStep = stepNumber; + } + }); + model.userData.numBuildingSteps = stepNumber + 1; + } +}; + +// node_modules/three/examples/jsm/loaders/LUT3dlLoader.js +var LUT3dlLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = UnsignedByteType; + } + setType(type) { + if (type !== UnsignedByteType && type !== FloatType) { + throw new Error("LUT3dlLoader: Unsupported type"); + } + this.type = type; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("text"); + loader.load(url, (text2) => { + try { + onLoad(this.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + this.manager.itemError(url); + } + }, onProgress, onError); + } + parse(input) { + const regExpGridInfo = /^[\d ]+$/m; + const regExpDataPoints = /^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm; + let result = regExpGridInfo.exec(input); + if (result === null) { + throw new Error("LUT3dlLoader: Missing grid information"); + } + const gridLines = result[0].trim().split(/\s+/g).map(Number); + const gridStep = gridLines[1] - gridLines[0]; + const size2 = gridLines.length; + const sizeSq = size2 ** 2; + for (let i = 1, l2 = gridLines.length; i < l2; ++i) { + if (gridStep !== gridLines[i] - gridLines[i - 1]) { + throw new Error("LUT3dlLoader: Inconsistent grid size"); + } + } + const dataFloat = new Float32Array(size2 ** 3 * 4); + let maxValue = 0; + let index2 = 0; + while ((result = regExpDataPoints.exec(input)) !== null) { + const r = Number(result[1]); + const g2 = Number(result[2]); + const b3 = Number(result[3]); + maxValue = Math.max(maxValue, r, g2, b3); + const bLayer = index2 % size2; + const gLayer = Math.floor(index2 / size2) % size2; + const rLayer = Math.floor(index2 / sizeSq) % size2; + const d4 = (bLayer * sizeSq + gLayer * size2 + rLayer) * 4; + dataFloat[d4 + 0] = r; + dataFloat[d4 + 1] = g2; + dataFloat[d4 + 2] = b3; + ++index2; + } + const bits2 = Math.ceil(Math.log2(maxValue)); + const maxBitValue = Math.pow(2, bits2); + const data2 = this.type === UnsignedByteType ? new Uint8Array(dataFloat.length) : dataFloat; + const scale2 = this.type === UnsignedByteType ? 255 : 1; + for (let i = 0, l2 = data2.length; i < l2; i += 4) { + const i1 = i + 1; + const i2 = i + 2; + const i3 = i + 3; + data2[i] = dataFloat[i] / maxBitValue * scale2; + data2[i1] = dataFloat[i1] / maxBitValue * scale2; + data2[i2] = dataFloat[i2] / maxBitValue * scale2; + data2[i3] = scale2; + } + const texture3D = new Data3DTexture(); + texture3D.image.data = data2; + texture3D.image.width = size2; + texture3D.image.height = size2; + texture3D.image.depth = size2; + texture3D.format = RGBAFormat; + texture3D.type = this.type; + texture3D.magFilter = LinearFilter; + texture3D.minFilter = LinearFilter; + texture3D.wrapS = ClampToEdgeWrapping; + texture3D.wrapT = ClampToEdgeWrapping; + texture3D.wrapR = ClampToEdgeWrapping; + texture3D.generateMipmaps = false; + texture3D.needsUpdate = true; + return { + size: size2, + texture3D + }; + } +}; + +// node_modules/three/examples/jsm/loaders/LUTCubeLoader.js +var LUTCubeLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = UnsignedByteType; + } + setType(type) { + if (type !== UnsignedByteType && type !== FloatType) { + throw new Error("LUTCubeLoader: Unsupported type"); + } + this.type = type; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("text"); + loader.load(url, (text2) => { + try { + onLoad(this.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + this.manager.itemError(url); + } + }, onProgress, onError); + } + parse(input) { + const regExpTitle = /TITLE +"([^"]*)"/; + const regExpSize = /LUT_3D_SIZE +(\d+)/; + const regExpDomainMin = /DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/; + const regExpDomainMax = /DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/; + const regExpDataPoints = /^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm; + let result = regExpTitle.exec(input); + const title = result !== null ? result[1] : null; + result = regExpSize.exec(input); + if (result === null) { + throw new Error("LUTCubeLoader: Missing LUT_3D_SIZE information"); + } + const size2 = Number(result[1]); + const length2 = size2 ** 3 * 4; + const data2 = this.type === UnsignedByteType ? new Uint8Array(length2) : new Float32Array(length2); + const domainMin = new Vector3(0, 0, 0); + const domainMax = new Vector3(1, 1, 1); + result = regExpDomainMin.exec(input); + if (result !== null) { + domainMin.set(Number(result[1]), Number(result[2]), Number(result[3])); + } + result = regExpDomainMax.exec(input); + if (result !== null) { + domainMax.set(Number(result[1]), Number(result[2]), Number(result[3])); + } + if (domainMin.x > domainMax.x || domainMin.y > domainMax.y || domainMin.z > domainMax.z) { + throw new Error("LUTCubeLoader: Invalid input domain"); + } + const scale2 = this.type === UnsignedByteType ? 255 : 1; + let i = 0; + while ((result = regExpDataPoints.exec(input)) !== null) { + data2[i++] = Number(result[1]) * scale2; + data2[i++] = Number(result[2]) * scale2; + data2[i++] = Number(result[3]) * scale2; + data2[i++] = scale2; + } + const texture3D = new Data3DTexture(); + texture3D.image.data = data2; + texture3D.image.width = size2; + texture3D.image.height = size2; + texture3D.image.depth = size2; + texture3D.type = this.type; + texture3D.magFilter = LinearFilter; + texture3D.minFilter = LinearFilter; + texture3D.wrapS = ClampToEdgeWrapping; + texture3D.wrapT = ClampToEdgeWrapping; + texture3D.wrapR = ClampToEdgeWrapping; + texture3D.generateMipmaps = false; + texture3D.needsUpdate = true; + return { + title, + size: size2, + domainMin, + domainMax, + texture3D + }; + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js +var LWO2Parser = class { + constructor(IFFParser2) { + this.IFF = IFFParser2; + } + parseBlock() { + this.IFF.debugger.offset = this.IFF.reader.offset; + this.IFF.debugger.closeForms(); + const blockID = this.IFF.reader.getIDTag(); + let length2 = this.IFF.reader.getUint32(); + if (length2 > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) { + this.IFF.reader.offset -= 4; + length2 = this.IFF.reader.getUint16(); + } + this.IFF.debugger.dataOffset = this.IFF.reader.offset; + this.IFF.debugger.length = length2; + switch (blockID) { + case "FORM": + this.IFF.parseForm(length2); + break; + case "ICON": + case "VMPA": + case "BBOX": + case "NORM": + case "PRE ": + case "POST": + case "KEY ": + case "SPAN": + case "TIME": + case "CLRS": + case "CLRA": + case "FILT": + case "DITH": + case "CONT": + case "BRIT": + case "SATR": + case "HUE ": + case "GAMM": + case "NEGA": + case "IFLT": + case "PFLT": + case "PROJ": + case "AXIS": + case "AAST": + case "PIXB": + case "AUVO": + case "STCK": + case "PROC": + case "VALU": + case "FUNC": + case "PNAM": + case "INAM": + case "GRST": + case "GREN": + case "GRPT": + case "FKEY": + case "IKEY": + case "CSYS": + case "OPAQ": + case "CMAP": + case "NLOC": + case "NZOM": + case "NVER": + case "NSRV": + case "NVSK": + case "NCRD": + case "WRPW": + case "WRPH": + case "NMOD": + case "NSEL": + case "NPRW": + case "NPLA": + case "NODS": + case "VERS": + case "ENUM": + case "TAG ": + case "OPAC": + case "CGMD": + case "CGTY": + case "CGST": + case "CGEN": + case "CGTS": + case "CGTE": + case "OSMP": + case "OMDE": + case "OUTR": + case "FLAG": + case "TRNL": + case "GLOW": + case "GVAL": + case "SHRP": + case "RFOP": + case "RSAN": + case "TROP": + case "RBLR": + case "TBLR": + case "CLRH": + case "CLRF": + case "ADTR": + case "LINE": + case "ALPH": + case "VCOL": + case "ENAB": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "SURF": + this.IFF.parseSurfaceLwo2(length2); + break; + case "CLIP": + this.IFF.parseClipLwo2(length2); + break; + case "IPIX": + case "IMIP": + case "IMOD": + case "AMOD": + case "IINV": + case "INCR": + case "IAXS": + case "IFOT": + case "ITIM": + case "IWRL": + case "IUTI": + case "IINX": + case "IINY": + case "IINZ": + case "IREF": + if (length2 === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); + else this.IFF.reader.skip(length2); + break; + case "OTAG": + this.IFF.parseObjectTag(); + break; + case "LAYR": + this.IFF.parseLayer(length2); + break; + case "PNTS": + this.IFF.parsePoints(length2); + break; + case "VMAP": + this.IFF.parseVertexMapping(length2); + break; + case "AUVU": + case "AUVN": + this.IFF.reader.skip(length2 - 1); + this.IFF.reader.getVariableLengthIndex(); + break; + case "POLS": + this.IFF.parsePolygonList(length2); + break; + case "TAGS": + this.IFF.parseTagStrings(length2); + break; + case "PTAG": + this.IFF.parsePolygonTagMapping(length2); + break; + case "VMAD": + this.IFF.parseVertexMapping(length2, true); + break; + case "DESC": + this.IFF.currentForm.description = this.IFF.reader.getString(); + break; + case "TEXT": + case "CMNT": + case "NCOM": + this.IFF.currentForm.comment = this.IFF.reader.getString(); + break; + case "NAME": + this.IFF.currentForm.channelName = this.IFF.reader.getString(); + break; + case "WRAP": + this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() }; + break; + case "IMAG": + const index2 = this.IFF.reader.getVariableLengthIndex(); + this.IFF.currentForm.imageIndex = index2; + break; + case "OREF": + this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); + break; + case "ROID": + this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); + break; + case "SSHN": + this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); + break; + case "AOVN": + this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); + break; + case "NSTA": + this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); + break; + case "NRNM": + this.IFF.currentForm.realName = this.IFF.reader.getString(); + break; + case "NNME": + this.IFF.currentForm.refName = this.IFF.reader.getString(); + this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; + break; + case "INME": + if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; + this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); + break; + case "IINN": + if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; + this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); + break; + case "IINM": + if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; + this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); + break; + case "IONM": + if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; + this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); + break; + case "FNAM": + this.IFF.currentForm.fileName = this.IFF.reader.getString(); + break; + case "CHAN": + if (length2 === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); + else this.IFF.reader.skip(length2); + break; + case "SMAN": + const maxSmoothingAngle = this.IFF.reader.getFloat32(); + this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; + break; + case "COLR": + this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; + this.IFF.reader.skip(2); + break; + case "LUMI": + this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "SPEC": + this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "DIFF": + this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "REFL": + this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "GLOS": + this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "TRAN": + this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "BUMP": + this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "SIDE": + this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); + break; + case "RIMG": + this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "RIND": + this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "TIMG": + this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "IMAP": + this.IFF.reader.skip(2); + break; + case "TMAP": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "IUVI": + this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length2); + break; + case "IUTL": + this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); + break; + case "IVTL": + this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); + break; + case "BLOK": + break; + default: + this.IFF.parseUnknownCHUNK(blockID, length2); + } + if (blockID != "FORM") { + this.IFF.debugger.node = 1; + this.IFF.debugger.nodeID = blockID; + this.IFF.debugger.log(); + } + if (this.IFF.reader.offset >= this.IFF.currentFormEnd) { + this.IFF.currentForm = this.IFF.parentForm; + } + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js +var LWO3Parser = class { + constructor(IFFParser2) { + this.IFF = IFFParser2; + } + parseBlock() { + this.IFF.debugger.offset = this.IFF.reader.offset; + this.IFF.debugger.closeForms(); + const blockID = this.IFF.reader.getIDTag(); + const length2 = this.IFF.reader.getUint32(); + this.IFF.debugger.dataOffset = this.IFF.reader.offset; + this.IFF.debugger.length = length2; + switch (blockID) { + case "FORM": + this.IFF.parseForm(length2); + break; + case "ICON": + case "VMPA": + case "BBOX": + case "NORM": + case "PRE ": + case "POST": + case "KEY ": + case "SPAN": + case "TIME": + case "CLRS": + case "CLRA": + case "FILT": + case "DITH": + case "CONT": + case "BRIT": + case "SATR": + case "HUE ": + case "GAMM": + case "NEGA": + case "IFLT": + case "PFLT": + case "PROJ": + case "AXIS": + case "AAST": + case "PIXB": + case "STCK": + case "VALU": + case "PNAM": + case "INAM": + case "GRST": + case "GREN": + case "GRPT": + case "FKEY": + case "IKEY": + case "CSYS": + case "OPAQ": + case "CMAP": + case "NLOC": + case "NZOM": + case "NVER": + case "NSRV": + case "NCRD": + case "NMOD": + case "NSEL": + case "NPRW": + case "NPLA": + case "VERS": + case "ENUM": + case "TAG ": + case "CGMD": + case "CGTY": + case "CGST": + case "CGEN": + case "CGTS": + case "CGTE": + case "OSMP": + case "OMDE": + case "OUTR": + case "FLAG": + case "TRNL": + case "SHRP": + case "RFOP": + case "RSAN": + case "TROP": + case "RBLR": + case "TBLR": + case "CLRH": + case "CLRF": + case "ADTR": + case "GLOW": + case "LINE": + case "ALPH": + case "VCOL": + case "ENAB": + this.IFF.debugger.skipped = true; + this.IFF.reader.skip(length2); + break; + case "IPIX": + case "IMIP": + case "IMOD": + case "AMOD": + case "IINV": + case "INCR": + case "IAXS": + case "IFOT": + case "ITIM": + case "IWRL": + case "IUTI": + case "IINX": + case "IINY": + case "IINZ": + case "IREF": + if (length2 === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); + else this.IFF.reader.skip(length2); + break; + case "OTAG": + this.IFF.parseObjectTag(); + break; + case "LAYR": + this.IFF.parseLayer(length2); + break; + case "PNTS": + this.IFF.parsePoints(length2); + break; + case "VMAP": + this.IFF.parseVertexMapping(length2); + break; + case "POLS": + this.IFF.parsePolygonList(length2); + break; + case "TAGS": + this.IFF.parseTagStrings(length2); + break; + case "PTAG": + this.IFF.parsePolygonTagMapping(length2); + break; + case "VMAD": + this.IFF.parseVertexMapping(length2, true); + break; + case "DESC": + this.IFF.currentForm.description = this.IFF.reader.getString(); + break; + case "TEXT": + case "CMNT": + case "NCOM": + this.IFF.currentForm.comment = this.IFF.reader.getString(); + break; + case "NAME": + this.IFF.currentForm.channelName = this.IFF.reader.getString(); + break; + case "WRAP": + this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() }; + break; + case "IMAG": + const index2 = this.IFF.reader.getVariableLengthIndex(); + this.IFF.currentForm.imageIndex = index2; + break; + case "OREF": + this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); + break; + case "ROID": + this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); + break; + case "SSHN": + this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); + break; + case "AOVN": + this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); + break; + case "NSTA": + this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); + break; + case "NRNM": + this.IFF.currentForm.realName = this.IFF.reader.getString(); + break; + case "NNME": + this.IFF.currentForm.refName = this.IFF.reader.getString(); + this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; + break; + case "INME": + if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; + this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); + break; + case "IINN": + if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; + this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); + break; + case "IINM": + if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; + this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); + break; + case "IONM": + if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; + this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); + break; + case "FNAM": + this.IFF.currentForm.fileName = this.IFF.reader.getString(); + break; + case "CHAN": + if (length2 === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); + else this.IFF.reader.skip(length2); + break; + case "SMAN": + const maxSmoothingAngle = this.IFF.reader.getFloat32(); + this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; + break; + case "COLR": + this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; + this.IFF.reader.skip(2); + break; + case "LUMI": + this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "SPEC": + this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "DIFF": + this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "REFL": + this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "GLOS": + this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; + this.IFF.reader.skip(2); + break; + case "TRAN": + this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "BUMP": + this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "SIDE": + this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); + break; + case "RIMG": + this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "RIND": + this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); + this.IFF.reader.skip(2); + break; + case "TIMG": + this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); + break; + case "IMAP": + this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32(); + break; + case "IUVI": + this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length2); + break; + case "IUTL": + this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); + break; + case "IVTL": + this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); + break; + default: + this.IFF.parseUnknownCHUNK(blockID, length2); + } + if (blockID != "FORM") { + this.IFF.debugger.node = 1; + this.IFF.debugger.nodeID = blockID; + this.IFF.debugger.log(); + } + if (this.IFF.reader.offset >= this.IFF.currentFormEnd) { + this.IFF.currentForm = this.IFF.parentForm; + } + } +}; + +// node_modules/three/examples/jsm/loaders/lwo/IFFParser.js +var IFFParser = class { + constructor() { + this.debugger = new Debugger(); + } + parse(buffer) { + this.reader = new DataViewReader(buffer); + this.tree = { + materials: {}, + layers: [], + tags: [], + textures: [] + }; + this.currentLayer = this.tree; + this.currentForm = this.tree; + this.parseTopForm(); + if (this.tree.format === void 0) return; + if (this.tree.format === "LWO2") { + this.parser = new LWO2Parser(this); + while (!this.reader.endOfFile()) this.parser.parseBlock(); + } else if (this.tree.format === "LWO3") { + this.parser = new LWO3Parser(this); + while (!this.reader.endOfFile()) this.parser.parseBlock(); + } + this.debugger.offset = this.reader.offset; + this.debugger.closeForms(); + return this.tree; + } + parseTopForm() { + this.debugger.offset = this.reader.offset; + var topForm = this.reader.getIDTag(); + if (topForm !== "FORM") { + console.warn("LWOLoader: Top-level FORM missing."); + return; + } + var length2 = this.reader.getUint32(); + this.debugger.dataOffset = this.reader.offset; + this.debugger.length = length2; + var type = this.reader.getIDTag(); + if (type === "LWO2") { + this.tree.format = type; + } else if (type === "LWO3") { + this.tree.format = type; + } + this.debugger.node = 0; + this.debugger.nodeID = type; + this.debugger.log(); + return; + } + /// + // FORM PARSING METHODS + /// + // Forms are organisational and can contain any number of sub chunks and sub forms + // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * } + parseForm(length2) { + var type = this.reader.getIDTag(); + switch (type) { + case "ISEQ": + case "ANIM": + case "STCC": + case "VPVL": + case "VPRM": + case "NROT": + case "WRPW": + case "WRPH": + case "FUNC": + case "FALL": + case "OPAC": + case "GRAD": + case "ENVS": + case "VMOP": + case "VMBG": + case "OMAX": + case "STEX": + case "CKBG": + case "CKEY": + case "VMLA": + case "VMLB": + this.debugger.skipped = true; + this.skipForm(length2); + break; + case "META": + case "NNDS": + case "NODS": + case "NDTA": + case "ADAT": + case "AOVS": + case "BLOK": + case "IBGC": + case "IOPC": + case "IIMG": + case "TXTR": + this.debugger.length = 4; + this.debugger.skipped = true; + break; + case "IFAL": + case "ISCL": + case "IPOS": + case "IROT": + case "IBMP": + case "IUTD": + case "IVTD": + this.parseTextureNodeAttribute(type); + break; + case "ENVL": + this.parseEnvelope(length2); + break; + case "CLIP": + if (this.tree.format === "LWO2") { + this.parseForm(length2); + } else { + this.parseClip(length2); + } + break; + case "STIL": + this.parseImage(); + break; + case "XREF": + this.reader.skip(8); + this.currentForm.referenceTexture = { + index: this.reader.getUint32(), + refName: this.reader.getString() + // internal unique ref + }; + break; + case "IMST": + this.parseImageStateForm(length2); + break; + case "SURF": + this.parseSurfaceForm(length2); + break; + case "VALU": + this.parseValueForm(length2); + break; + case "NTAG": + this.parseSubNode(length2); + break; + case "ATTR": + case "SATR": + this.setupForm("attributes", length2); + break; + case "NCON": + this.parseConnections(length2); + break; + case "SSHA": + this.parentForm = this.currentForm; + this.currentForm = this.currentSurface; + this.setupForm("surfaceShader", length2); + break; + case "SSHD": + this.setupForm("surfaceShaderData", length2); + break; + case "ENTR": + this.parseEntryForm(length2); + break; + case "IMAP": + this.parseImageMap(length2); + break; + case "TAMP": + this.parseXVAL("amplitude", length2); + break; + case "TMAP": + this.setupForm("textureMap", length2); + break; + case "CNTR": + this.parseXVAL3("center", length2); + break; + case "SIZE": + this.parseXVAL3("scale", length2); + break; + case "ROTA": + this.parseXVAL3("rotation", length2); + break; + default: + this.parseUnknownForm(type, length2); + } + this.debugger.node = 0; + this.debugger.nodeID = type; + this.debugger.log(); + } + setupForm(type, length2) { + if (!this.currentForm) this.currentForm = this.currentNode; + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + if (!this.currentForm[type]) { + this.currentForm[type] = {}; + this.currentForm = this.currentForm[type]; + } else { + console.warn("LWOLoader: form already exists on parent: ", type, this.currentForm); + this.currentForm = this.currentForm[type]; + } + } + skipForm(length2) { + this.reader.skip(length2 - 4); + } + parseUnknownForm(type, length2) { + console.warn("LWOLoader: unknown FORM encountered: " + type, length2); + printBuffer(this.reader.dv.buffer, this.reader.offset, length2 - 4); + this.reader.skip(length2 - 4); + } + parseSurfaceForm(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + var surface = { + attributes: {}, + // LWO2 style non-node attributes will go here + connections: {}, + name: name2, + inputName: name2, + nodes: {}, + source: this.reader.getString() + }; + this.tree.materials[name2] = surface; + this.currentSurface = surface; + this.parentForm = this.tree.materials; + this.currentForm = surface; + this.currentFormEnd = this.reader.offset + length2; + } + parseSurfaceLwo2(length2) { + var name2 = this.reader.getString(); + var surface = { + attributes: {}, + // LWO2 style non-node attributes will go here + connections: {}, + name: name2, + nodes: {}, + source: this.reader.getString() + }; + this.tree.materials[name2] = surface; + this.currentSurface = surface; + this.parentForm = this.tree.materials; + this.currentForm = surface; + this.currentFormEnd = this.reader.offset + length2; + } + parseSubNode(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + var node = { + name: name2 + }; + this.currentForm = node; + this.currentNode = node; + this.currentFormEnd = this.reader.offset + length2; + } + // collect attributes from all nodes at the top level of a surface + parseConnections(length2) { + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + this.currentForm = this.currentSurface.connections; + } + // surface node attribute data, e.g. specular, roughness etc + parseEntryForm(length2) { + this.reader.skip(8); + var name2 = this.reader.getString(); + this.currentForm = this.currentNode.attributes; + this.setupForm(name2, length2); + } + // parse values from material - doesn't match up to other LWO3 data types + // sub form of entry form + parseValueForm() { + this.reader.skip(8); + var valueType = this.reader.getString(); + if (valueType === "double") { + this.currentForm.value = this.reader.getUint64(); + } else if (valueType === "int") { + this.currentForm.value = this.reader.getUint32(); + } else if (valueType === "vparam") { + this.reader.skip(24); + this.currentForm.value = this.reader.getFloat64(); + } else if (valueType === "vparam3") { + this.reader.skip(24); + this.currentForm.value = this.reader.getFloat64Array(3); + } + } + // holds various data about texture node image state + // Data other thanmipMapLevel unknown + parseImageStateForm() { + this.reader.skip(8); + this.currentForm.mipMapLevel = this.reader.getFloat32(); + } + // LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node) + parseImageMap(length2) { + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + if (!this.currentForm.maps) this.currentForm.maps = []; + var map2 = {}; + this.currentForm.maps.push(map2); + this.currentForm = map2; + this.reader.skip(10); + } + parseTextureNodeAttribute(type) { + this.reader.skip(28); + this.reader.skip(20); + switch (type) { + case "ISCL": + this.currentNode.scale = this.reader.getFloat32Array(3); + break; + case "IPOS": + this.currentNode.position = this.reader.getFloat32Array(3); + break; + case "IROT": + this.currentNode.rotation = this.reader.getFloat32Array(3); + break; + case "IFAL": + this.currentNode.falloff = this.reader.getFloat32Array(3); + break; + case "IBMP": + this.currentNode.amplitude = this.reader.getFloat32(); + break; + case "IUTD": + this.currentNode.uTiles = this.reader.getFloat32(); + break; + case "IVTD": + this.currentNode.vTiles = this.reader.getFloat32(); + break; + } + this.reader.skip(2); + } + // ENVL forms are currently ignored + parseEnvelope(length2) { + this.reader.skip(length2 - 4); + } + /// + // CHUNK PARSING METHODS + /// + // clips can either be defined inside a surface node, or at the top + // level and they have a different format in each case + parseClip(length2) { + var tag = this.reader.getIDTag(); + if (tag === "FORM") { + this.reader.skip(16); + this.currentNode.fileName = this.reader.getString(); + return; + } + this.reader.setOffset(this.reader.offset - 4); + this.currentFormEnd = this.reader.offset + length2; + this.parentForm = this.currentForm; + this.reader.skip(8); + var texture = { + index: this.reader.getUint32() + }; + this.tree.textures.push(texture); + this.currentForm = texture; + } + parseClipLwo2(length2) { + var texture = { + index: this.reader.getUint32(), + fileName: "" + }; + while (true) { + var tag = this.reader.getIDTag(); + var n_length = this.reader.getUint16(); + if (tag === "STIL") { + texture.fileName = this.reader.getString(); + break; + } + if (n_length >= length2) { + break; + } + } + this.tree.textures.push(texture); + this.currentForm = texture; + } + parseImage() { + this.reader.skip(8); + this.currentForm.fileName = this.reader.getString(); + } + parseXVAL(type, length2) { + var endOffset = this.reader.offset + length2 - 4; + this.reader.skip(8); + this.currentForm[type] = this.reader.getFloat32(); + this.reader.setOffset(endOffset); + } + parseXVAL3(type, length2) { + var endOffset = this.reader.offset + length2 - 4; + this.reader.skip(8); + this.currentForm[type] = { + x: this.reader.getFloat32(), + y: this.reader.getFloat32(), + z: this.reader.getFloat32() + }; + this.reader.setOffset(endOffset); + } + // Tags associated with an object + // OTAG { type[ID4], tag-string[S0] } + parseObjectTag() { + if (!this.tree.objectTags) this.tree.objectTags = {}; + this.tree.objectTags[this.reader.getIDTag()] = { + tagString: this.reader.getString() + }; + } + // 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. + // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2] + parseLayer(length2) { + var number = this.reader.getUint16(); + var flags = this.reader.getUint16(); + var pivot = this.reader.getFloat32Array(3); + var layer = { + number, + flags, + // If the least significant bit of flags is set, the layer is hidden. + pivot: [-pivot[0], pivot[1], pivot[2]], + // Note: this seems to be superflous, as the geometry is translated when pivot is present + name: this.reader.getString() + }; + this.tree.layers.push(layer); + this.currentLayer = layer; + var parsedLength = 16 + stringOffset(this.currentLayer.name); + this.currentLayer.parent = parsedLength < length2 ? this.reader.getUint16() : -1; + } + // VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors + // Converting from left to right handed coordinate system: + // x -> -x and switch material FrontSide -> BackSide + parsePoints(length2) { + this.currentPoints = []; + for (var i = 0; i < length2 / 4; i += 3) { + this.currentPoints.push(-this.reader.getFloat32(), this.reader.getFloat32(), this.reader.getFloat32()); + } + } + // parse VMAP or VMAD + // Associates a set of floating-point vectors with a set of points. + // VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * } + // VMAD Associates a set of floating-point vectors with the vertices of specific polygons. + // Similar to VMAP UVs, but associates with polygon vertices rather than points + // to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name, + // if they exist. The vector values in the VMAD will then replace those in the + // corresponding VMAP, but only for calculations involving the specified polygons. + // VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * } + parseVertexMapping(length2, discontinuous) { + var finalOffset = this.reader.offset + length2; + var channelName = this.reader.getString(); + if (this.reader.offset === finalOffset) { + this.currentForm.UVChannel = channelName; + return; + } + this.reader.setOffset(this.reader.offset - stringOffset(channelName)); + var type = this.reader.getIDTag(); + this.reader.getUint16(); + var name2 = this.reader.getString(); + var remainingLength = length2 - 6 - stringOffset(name2); + switch (type) { + case "TXUV": + this.parseUVMapping(name2, finalOffset, discontinuous); + break; + case "MORF": + case "SPOT": + this.parseMorphTargets(name2, finalOffset, type); + break; + case "APSL": + case "NORM": + case "WGHT": + case "MNVW": + case "PICK": + case "RGB ": + case "RGBA": + this.reader.skip(remainingLength); + break; + default: + console.warn("LWOLoader: unknown vertex map type: " + type); + this.reader.skip(remainingLength); + } + } + parseUVMapping(name2, finalOffset, discontinuous) { + var uvIndices = []; + var polyIndices = []; + var uvs = []; + while (this.reader.offset < finalOffset) { + uvIndices.push(this.reader.getVariableLengthIndex()); + if (discontinuous) polyIndices.push(this.reader.getVariableLengthIndex()); + uvs.push(this.reader.getFloat32(), this.reader.getFloat32()); + } + if (discontinuous) { + if (!this.currentLayer.discontinuousUVs) this.currentLayer.discontinuousUVs = {}; + this.currentLayer.discontinuousUVs[name2] = { + uvIndices, + polyIndices, + uvs + }; + } else { + if (!this.currentLayer.uvs) this.currentLayer.uvs = {}; + this.currentLayer.uvs[name2] = { + uvIndices, + uvs + }; + } + } + parseMorphTargets(name2, finalOffset, type) { + var indices = []; + var points = []; + type = type === "MORF" ? "relative" : "absolute"; + while (this.reader.offset < finalOffset) { + indices.push(this.reader.getVariableLengthIndex()); + points.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32()); + } + if (!this.currentLayer.morphTargets) this.currentLayer.morphTargets = {}; + this.currentLayer.morphTargets[name2] = { + indices, + points, + type + }; + } + // A list of polygons for the current layer. + // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * } + parsePolygonList(length2) { + var finalOffset = this.reader.offset + length2; + var type = this.reader.getIDTag(); + var indices = []; + var polygonDimensions = []; + while (this.reader.offset < finalOffset) { + var numverts = this.reader.getUint16(); + numverts = numverts & 1023; + polygonDimensions.push(numverts); + for (var j = 0; j < numverts; j++) indices.push(this.reader.getVariableLengthIndex()); + } + var geometryData = { + type, + vertexIndices: indices, + polygonDimensions, + points: this.currentPoints + }; + if (polygonDimensions[0] === 1) geometryData.type = "points"; + else if (polygonDimensions[0] === 2) geometryData.type = "lines"; + this.currentLayer.geometry = geometryData; + } + // Lists the tag strings that can be associated with polygons by the PTAG chunk. + // TAGS { tag-string[S0] * } + parseTagStrings(length2) { + this.tree.tags = this.reader.getStringArray(length2); + } + // Associates tags of a given type with polygons in the most recent POLS chunk. + // PTAG { type[ID4], ( poly[VX], tag[U2] ) * } + parsePolygonTagMapping(length2) { + var finalOffset = this.reader.offset + length2; + var type = this.reader.getIDTag(); + if (type === "SURF") this.parseMaterialIndices(finalOffset); + else { + this.reader.skip(length2 - 4); + } + } + parseMaterialIndices(finalOffset) { + this.currentLayer.geometry.materialIndices = []; + while (this.reader.offset < finalOffset) { + var polygonIndex = this.reader.getVariableLengthIndex(); + var materialIndex = this.reader.getUint16(); + this.currentLayer.geometry.materialIndices.push(polygonIndex, materialIndex); + } + } + parseUnknownCHUNK(blockID, length2) { + console.warn("LWOLoader: unknown chunk type: " + blockID + " length: " + length2); + var data2 = this.reader.getString(length2); + this.currentForm[blockID] = data2; + } +}; +var DataViewReader = class { + constructor(buffer) { + this.dv = new DataView(buffer); + this.offset = 0; + this._textDecoder = new TextDecoder(); + this._bytes = new Uint8Array(buffer); + } + size() { + return this.dv.buffer.byteLength; + } + setOffset(offset) { + if (offset > 0 && offset < this.dv.buffer.byteLength) { + this.offset = offset; + } else { + console.error("LWOLoader: invalid buffer offset"); + } + } + endOfFile() { + if (this.offset >= this.size()) return true; + return false; + } + skip(length2) { + this.offset += length2; + } + getUint8() { + var value2 = this.dv.getUint8(this.offset); + this.offset += 1; + return value2; + } + getUint16() { + var value2 = this.dv.getUint16(this.offset); + this.offset += 2; + return value2; + } + getInt32() { + var value2 = this.dv.getInt32(this.offset, false); + this.offset += 4; + return value2; + } + getUint32() { + var value2 = this.dv.getUint32(this.offset, false); + this.offset += 4; + return value2; + } + getUint64() { + var low, high; + high = this.getUint32(); + low = this.getUint32(); + return high * 4294967296 + low; + } + getFloat32() { + var value2 = this.dv.getFloat32(this.offset, false); + this.offset += 4; + return value2; + } + getFloat32Array(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat32()); + } + return a2; + } + getFloat64() { + var value2 = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value2; + } + getFloat64Array(size2) { + var a2 = []; + for (var i = 0; i < size2; i++) { + a2.push(this.getFloat64()); + } + return a2; + } + // get variable-length index data type + // VX ::= index[U2] | (index + 0xFF000000)[U4] + // If the index value is less than 65,280 (0xFF00),then VX === U2 + // otherwise VX === U4 with bits 24-31 set + // When reading an index, if the first byte encountered is 255 (0xFF), then + // the four-byte form is being used and the first byte should be discarded or masked out. + getVariableLengthIndex() { + var firstByte = this.getUint8(); + if (firstByte === 255) { + return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8(); + } + return firstByte * 256 + this.getUint8(); + } + // An ID tag is a sequence of 4 bytes containing 7-bit ASCII values + getIDTag() { + return this.getString(4); + } + getString(size2) { + if (size2 === 0) return; + const start = this.offset; + let result; + let length2; + if (size2) { + length2 = size2; + result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, size2)); + } else { + length2 = this._bytes.indexOf(0, start) - start; + result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, length2)); + length2++; + length2 += length2 % 2; + } + this.skip(length2); + return result; + } + getStringArray(size2) { + var a2 = this.getString(size2); + a2 = a2.split("\0"); + return a2.filter(Boolean); + } +}; +var Debugger = class { + constructor() { + this.active = false; + this.depth = 0; + this.formList = []; + } + enable() { + this.active = true; + } + log() { + if (!this.active) return; + var nodeType; + switch (this.node) { + case 0: + nodeType = "FORM"; + break; + case 1: + nodeType = "CHK"; + break; + case 2: + nodeType = "S-CHK"; + break; + } + console.log( + "| ".repeat(this.depth) + nodeType, + this.nodeID, + `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`, + this.node == 0 ? " {" : "", + this.skipped ? "SKIPPED" : "", + this.node == 0 && this.skipped ? "}" : "" + ); + if (this.node == 0 && !this.skipped) { + this.depth += 1; + this.formList.push(this.dataOffset + this.length); + } + this.skipped = false; + } + closeForms() { + if (!this.active) return; + for (var i = this.formList.length - 1; i >= 0; i--) { + if (this.offset >= this.formList[i]) { + this.depth -= 1; + console.log("| ".repeat(this.depth) + "}"); + this.formList.splice(-1, 1); + } + } + } +}; +function isEven(num) { + return num % 2; +} +function stringOffset(string) { + return string.length + 1 + (isEven(string.length + 1) ? 1 : 0); +} +function printBuffer(buffer, from, to) { + console.log(new TextDecoder().decode(new Uint8Array(buffer, from, to))); +} + +// node_modules/three/examples/jsm/loaders/LWOLoader.js +var _lwoTree; +var LWOLoader = class extends Loader { + constructor(manager, parameters = {}) { + super(manager); + this.resourcePath = parameters.resourcePath !== void 0 ? parameters.resourcePath : ""; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? extractParentUrl(url, "Objects") : scope.path; + const modelName = url.split(path).pop().split(".")[0]; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path, modelName)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(iffBuffer, path, modelName) { + _lwoTree = new IFFParser().parse(iffBuffer); + const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + return new LWOTreeParser(textureLoader).parse(modelName); + } +}; +var LWOTreeParser = class { + constructor(textureLoader) { + this.textureLoader = textureLoader; + } + parse(modelName) { + this.materials = new MaterialParser(this.textureLoader).parse(); + this.defaultLayerName = modelName; + this.meshes = this.parseLayers(); + return { + materials: this.materials, + meshes: this.meshes + }; + } + parseLayers() { + const meshes = []; + const finalMeshes = []; + const geometryParser = new GeometryParser2(); + const scope = this; + _lwoTree.layers.forEach(function(layer) { + const geometry = geometryParser.parse(layer.geometry, layer); + const mesh = scope.parseMesh(geometry, layer); + meshes[layer.number] = mesh; + if (layer.parent === -1) finalMeshes.push(mesh); + else meshes[layer.parent].add(mesh); + }); + this.applyPivots(finalMeshes); + return finalMeshes; + } + parseMesh(geometry, layer) { + let mesh; + const materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type); + if (layer.geometry.type === "points") mesh = new Points(geometry, materials); + else if (layer.geometry.type === "lines") mesh = new LineSegments(geometry, materials); + else mesh = new Mesh(geometry, materials); + if (layer.name) mesh.name = layer.name; + else mesh.name = this.defaultLayerName + "_layer_" + layer.number; + mesh.userData.pivot = layer.pivot; + return mesh; + } + // TODO: may need to be reversed in z to convert LWO to three.js coordinates + applyPivots(meshes) { + meshes.forEach(function(mesh) { + mesh.traverse(function(child) { + const pivot = child.userData.pivot; + child.position.x += pivot[0]; + child.position.y += pivot[1]; + child.position.z += pivot[2]; + if (child.parent) { + const parentPivot = child.parent.userData.pivot; + child.position.x -= parentPivot[0]; + child.position.y -= parentPivot[1]; + child.position.z -= parentPivot[2]; + } + }); + }); + } + getMaterials(namesArray, type) { + const materials = []; + const scope = this; + namesArray.forEach(function(name2, i) { + materials[i] = scope.getMaterialByName(name2); + }); + if (type === "points" || type === "lines") { + materials.forEach(function(mat, i) { + const spec = { + color: mat.color + }; + if (type === "points") { + spec.size = 0.1; + spec.map = mat.map; + materials[i] = new PointsMaterial(spec); + } else if (type === "lines") { + materials[i] = new LineBasicMaterial(spec); + } + }); + } + const filtered = materials.filter(Boolean); + if (filtered.length === 1) return filtered[0]; + return materials; + } + getMaterialByName(name2) { + return this.materials.filter(function(m) { + return m.name === name2; + })[0]; + } +}; +var MaterialParser = class { + constructor(textureLoader) { + this.textureLoader = textureLoader; + } + parse() { + const materials = []; + this.textures = {}; + for (const name2 in _lwoTree.materials) { + if (_lwoTree.format === "LWO3") { + materials.push(this.parseMaterial(_lwoTree.materials[name2], name2, _lwoTree.textures)); + } else if (_lwoTree.format === "LWO2") { + materials.push(this.parseMaterialLwo2(_lwoTree.materials[name2], name2, _lwoTree.textures)); + } + } + return materials; + } + parseMaterial(materialData, name2, textures) { + let params = { + name: name2, + side: this.getSide(materialData.attributes), + flatShading: this.getSmooth(materialData.attributes) + }; + const connections2 = this.parseConnections(materialData.connections, materialData.nodes); + const maps = this.parseTextureNodes(connections2.maps); + this.parseAttributeImageMaps(connections2.attributes, textures, maps, materialData.maps); + const attributes = this.parseAttributes(connections2.attributes, maps); + this.parseEnvMap(connections2, maps, attributes); + params = Object.assign(maps, params); + params = Object.assign(params, attributes); + const materialType = this.getMaterialType(connections2.attributes); + if (materialType !== MeshPhongMaterial) delete params.refractionRatio; + return new materialType(params); + } + parseMaterialLwo2(materialData, name2) { + let params = { + name: name2, + side: this.getSide(materialData.attributes), + flatShading: this.getSmooth(materialData.attributes) + }; + const attributes = this.parseAttributes(materialData.attributes, {}); + params = Object.assign(params, attributes); + return new MeshPhongMaterial(params); + } + // Note: converting from left to right handed coords by switching x -> -x in vertices, and + // then switching mat FrontSide -> BackSide + // NB: this means that FrontSide and BackSide have been switched! + getSide(attributes) { + if (!attributes.side) return BackSide; + switch (attributes.side) { + case 0: + case 1: + return BackSide; + case 2: + return FrontSide; + case 3: + return DoubleSide; + } + } + getSmooth(attributes) { + if (!attributes.smooth) return true; + return !attributes.smooth; + } + parseConnections(connections2, nodes) { + const materialConnections = { + maps: {} + }; + const inputName = connections2.inputName; + const inputNodeName = connections2.inputNodeName; + const nodeName = connections2.nodeName; + const scope = this; + inputName.forEach(function(name2, index2) { + if (name2 === "Material") { + const matNode = scope.getNodeByRefName(inputNodeName[index2], nodes); + materialConnections.attributes = matNode.attributes; + materialConnections.envMap = matNode.fileName; + materialConnections.name = inputNodeName[index2]; + } + }); + nodeName.forEach(function(name2, index2) { + if (name2 === materialConnections.name) { + materialConnections.maps[inputName[index2]] = scope.getNodeByRefName(inputNodeName[index2], nodes); + } + }); + return materialConnections; + } + getNodeByRefName(refName, nodes) { + for (const name2 in nodes) { + if (nodes[name2].refName === refName) return nodes[name2]; + } + } + parseTextureNodes(textureNodes) { + const maps = {}; + for (const name2 in textureNodes) { + const node = textureNodes[name2]; + const path = node.fileName; + if (!path) return; + const texture = this.loadTexture(path); + if (node.widthWrappingMode !== void 0) texture.wrapS = this.getWrappingType(node.widthWrappingMode); + if (node.heightWrappingMode !== void 0) texture.wrapT = this.getWrappingType(node.heightWrappingMode); + switch (name2) { + case "Color": + maps.map = texture; + maps.map.colorSpace = SRGBColorSpace; + break; + case "Roughness": + maps.roughnessMap = texture; + maps.roughness = 1; + break; + case "Specular": + maps.specularMap = texture; + maps.specularMap.colorSpace = SRGBColorSpace; + maps.specular = 16777215; + break; + case "Luminous": + maps.emissiveMap = texture; + maps.emissiveMap.colorSpace = SRGBColorSpace; + maps.emissive = 8421504; + break; + case "Luminous Color": + maps.emissive = 8421504; + break; + case "Metallic": + maps.metalnessMap = texture; + maps.metalness = 1; + break; + case "Transparency": + case "Alpha": + maps.alphaMap = texture; + maps.transparent = true; + break; + case "Normal": + maps.normalMap = texture; + if (node.amplitude !== void 0) maps.normalScale = new Vector2(node.amplitude, node.amplitude); + break; + case "Bump": + maps.bumpMap = texture; + break; + } + } + if (maps.roughnessMap && maps.specularMap) delete maps.specularMap; + return maps; + } + // maps can also be defined on individual material attributes, parse those here + // This occurs on Standard (Phong) surfaces + parseAttributeImageMaps(attributes, textures, maps) { + for (const name2 in attributes) { + const attribute = attributes[name2]; + if (attribute.maps) { + const mapData = attribute.maps[0]; + const path = this.getTexturePathByIndex(mapData.imageIndex, textures); + if (!path) return; + const texture = this.loadTexture(path); + if (mapData.wrap !== void 0) texture.wrapS = this.getWrappingType(mapData.wrap.w); + if (mapData.wrap !== void 0) texture.wrapT = this.getWrappingType(mapData.wrap.h); + switch (name2) { + case "Color": + maps.map = texture; + maps.map.colorSpace = SRGBColorSpace; + break; + case "Diffuse": + maps.aoMap = texture; + break; + case "Roughness": + maps.roughnessMap = texture; + maps.roughness = 1; + break; + case "Specular": + maps.specularMap = texture; + maps.specularMap.colorSpace = SRGBColorSpace; + maps.specular = 16777215; + break; + case "Luminosity": + maps.emissiveMap = texture; + maps.emissiveMap.colorSpace = SRGBColorSpace; + maps.emissive = 8421504; + break; + case "Metallic": + maps.metalnessMap = texture; + maps.metalness = 1; + break; + case "Transparency": + case "Alpha": + maps.alphaMap = texture; + maps.transparent = true; + break; + case "Normal": + maps.normalMap = texture; + break; + case "Bump": + maps.bumpMap = texture; + break; + } + } + } + } + parseAttributes(attributes, maps) { + const params = {}; + if (attributes.Color && !maps.map) { + params.color = new Color().fromArray(attributes.Color.value); + } else { + params.color = new Color(); + } + if (attributes.Transparency && attributes.Transparency.value !== 0) { + params.opacity = 1 - attributes.Transparency.value; + params.transparent = true; + } + if (attributes["Bump Height"]) params.bumpScale = attributes["Bump Height"].value * 0.1; + this.parsePhysicalAttributes(params, attributes, maps); + this.parseStandardAttributes(params, attributes, maps); + this.parsePhongAttributes(params, attributes, maps); + return params; + } + parsePhysicalAttributes(params, attributes) { + if (attributes.Clearcoat && attributes.Clearcoat.value > 0) { + params.clearcoat = attributes.Clearcoat.value; + if (attributes["Clearcoat Gloss"]) { + params.clearcoatRoughness = 0.5 * (1 - attributes["Clearcoat Gloss"].value); + } + } + } + parseStandardAttributes(params, attributes, maps) { + if (attributes.Luminous) { + params.emissiveIntensity = attributes.Luminous.value; + if (attributes["Luminous Color"] && !maps.emissive) { + params.emissive = new Color().fromArray(attributes["Luminous Color"].value); + } else { + params.emissive = new Color(8421504); + } + } + if (attributes.Roughness && !maps.roughnessMap) params.roughness = attributes.Roughness.value; + if (attributes.Metallic && !maps.metalnessMap) params.metalness = attributes.Metallic.value; + } + parsePhongAttributes(params, attributes, maps) { + if (attributes["Refraction Index"]) params.refractionRatio = 0.98 / attributes["Refraction Index"].value; + if (attributes.Diffuse) params.color.multiplyScalar(attributes.Diffuse.value); + if (attributes.Reflection) { + params.reflectivity = attributes.Reflection.value; + params.combine = AddOperation; + } + if (attributes.Luminosity) { + params.emissiveIntensity = attributes.Luminosity.value; + if (!maps.emissiveMap && !maps.map) { + params.emissive = params.color; + } else { + params.emissive = new Color(8421504); + } + } + if (!attributes.Roughness && attributes.Specular && !maps.specularMap) { + if (attributes["Color Highlight"]) { + params.specular = new Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes["Color Highlight"].value); + } else { + params.specular = new Color().setScalar(attributes.Specular.value); + } + } + if (params.specular && attributes.Glossiness) params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2); + } + parseEnvMap(connections2, maps, attributes) { + if (connections2.envMap) { + const envMap = this.loadTexture(connections2.envMap); + if (attributes.transparent && attributes.opacity < 0.999) { + envMap.mapping = EquirectangularRefractionMapping; + if (attributes.reflectivity !== void 0) { + delete attributes.reflectivity; + delete attributes.combine; + } + if (attributes.metalness !== void 0) { + attributes.metalness = 1; + } + attributes.opacity = 1; + } else envMap.mapping = EquirectangularReflectionMapping; + maps.envMap = envMap; + } + } + // get texture defined at top level by its index + getTexturePathByIndex(index2) { + let fileName = ""; + if (!_lwoTree.textures) return fileName; + _lwoTree.textures.forEach(function(texture) { + if (texture.index === index2) fileName = texture.fileName; + }); + return fileName; + } + loadTexture(path) { + if (!path) return null; + const texture = this.textureLoader.load( + path, + void 0, + void 0, + function() { + console.warn("LWOLoader: non-standard resource hierarchy. Use `resourcePath` parameter to specify root content directory."); + } + ); + return texture; + } + // 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge + getWrappingType(num) { + switch (num) { + case 0: + console.warn('LWOLoader: "Reset" texture wrapping type is not supported in three.js'); + return ClampToEdgeWrapping; + case 1: + return RepeatWrapping; + case 2: + return MirroredRepeatWrapping; + case 3: + return ClampToEdgeWrapping; + } + } + getMaterialType(nodeData) { + if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0) return MeshPhysicalMaterial; + if (nodeData.Roughness) return MeshStandardMaterial; + return MeshPhongMaterial; + } +}; +var GeometryParser2 = class { + parse(geoData, layer) { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(geoData.points, 3)); + const indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions); + geometry.setIndex(indices); + this.parseGroups(geometry, geoData); + geometry.computeVertexNormals(); + this.parseUVs(geometry, layer, indices); + this.parseMorphTargets(geometry, layer, indices); + geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]); + return geometry; + } + // split quads into tris + splitIndices(indices, polygonDimensions) { + const remappedIndices = []; + let i = 0; + polygonDimensions.forEach(function(dim) { + if (dim < 4) { + for (let k2 = 0; k2 < dim; k2++) remappedIndices.push(indices[i + k2]); + } else if (dim === 4) { + remappedIndices.push( + indices[i], + indices[i + 1], + indices[i + 2], + indices[i], + indices[i + 2], + indices[i + 3] + ); + } else if (dim > 4) { + for (let k2 = 1; k2 < dim - 1; k2++) { + remappedIndices.push(indices[i], indices[i + k2], indices[i + k2 + 1]); + } + console.warn("LWOLoader: polygons with greater than 4 sides are not supported"); + } + i += dim; + }); + return remappedIndices; + } + // NOTE: currently ignoring poly indices and assuming that they are intelligently ordered + parseGroups(geometry, geoData) { + const tags = _lwoTree.tags; + const matNames = []; + let elemSize = 3; + if (geoData.type === "lines") elemSize = 2; + if (geoData.type === "points") elemSize = 1; + const remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices); + let indexNum = 0; + const indexPairs = {}; + let prevMaterialIndex; + let materialIndex; + let prevStart = 0; + let currentCount = 0; + for (let i = 0; i < remappedIndices.length; i += 2) { + materialIndex = remappedIndices[i + 1]; + if (i === 0) matNames[indexNum] = tags[materialIndex]; + if (prevMaterialIndex === void 0) prevMaterialIndex = materialIndex; + if (materialIndex !== prevMaterialIndex) { + let currentIndex; + if (indexPairs[tags[prevMaterialIndex]]) { + currentIndex = indexPairs[tags[prevMaterialIndex]]; + } else { + currentIndex = indexNum; + indexPairs[tags[prevMaterialIndex]] = indexNum; + matNames[indexNum] = tags[prevMaterialIndex]; + indexNum++; + } + geometry.addGroup(prevStart, currentCount, currentIndex); + prevStart += currentCount; + prevMaterialIndex = materialIndex; + currentCount = 0; + } + currentCount += elemSize; + } + if (geometry.groups.length > 0) { + let currentIndex; + if (indexPairs[tags[materialIndex]]) { + currentIndex = indexPairs[tags[materialIndex]]; + } else { + currentIndex = indexNum; + indexPairs[tags[materialIndex]] = indexNum; + matNames[indexNum] = tags[materialIndex]; + } + geometry.addGroup(prevStart, currentCount, currentIndex); + } + geometry.userData.matNames = matNames; + } + splitMaterialIndices(polygonDimensions, indices) { + const remappedIndices = []; + polygonDimensions.forEach(function(dim, i) { + if (dim <= 3) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); + } else if (dim === 4) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]); + } else { + for (let k2 = 0; k2 < dim - 2; k2++) { + remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); + } + } + }); + return remappedIndices; + } + // UV maps: + // 1: are defined via index into an array of points, not into a geometry + // - the geometry is also defined by an index into this array, but the indexes may not match + // 2: there can be any number of UV maps for a single geometry. Here these are combined, + // with preference given to the first map encountered + // 3: UV maps can be partial - that is, defined for only a part of the geometry + // 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most + // UV maps are defined as partially VMAP and partially VMAD + // VMADs are currently not supported + parseUVs(geometry, layer) { + const remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function() { + return 0; + }); + for (const name2 in layer.uvs) { + const uvs = layer.uvs[name2].uvs; + const uvIndices = layer.uvs[name2].uvIndices; + uvIndices.forEach(function(i, j) { + remappedUVs[i * 2] = uvs[j * 2]; + remappedUVs[i * 2 + 1] = uvs[j * 2 + 1]; + }); + } + geometry.setAttribute("uv", new Float32BufferAttribute(remappedUVs, 2)); + } + parseMorphTargets(geometry, layer) { + let num = 0; + for (const name2 in layer.morphTargets) { + const remappedPoints = geometry.attributes.position.array.slice(); + if (!geometry.morphAttributes.position) geometry.morphAttributes.position = []; + const morphPoints = layer.morphTargets[name2].points; + const morphIndices = layer.morphTargets[name2].indices; + const type = layer.morphTargets[name2].type; + morphIndices.forEach(function(i, j) { + if (type === "relative") { + remappedPoints[i * 3] += morphPoints[j * 3]; + remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1]; + remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2]; + } else { + remappedPoints[i * 3] = morphPoints[j * 3]; + remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1]; + remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2]; + } + }); + geometry.morphAttributes.position[num] = new Float32BufferAttribute(remappedPoints, 3); + geometry.morphAttributes.position[num].name = name2; + num++; + } + geometry.morphTargetsRelative = false; + } +}; +function extractParentUrl(url, dir) { + const index2 = url.indexOf(dir); + if (index2 === -1) return "./"; + return url.slice(0, index2); +} + +// node_modules/three/examples/jsm/loaders/LogLuvLoader.js +var LogLuvLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const ifds = UTIF.decode(buffer); + UTIF.decodeImage(buffer, ifds[0]); + const rgba = UTIF.toRGBA(ifds[0], this.type); + return { + width: ifds[0].width, + height: ifds[0].height, + data: rgba, + format: RGBAFormat, + type: this.type, + flipY: true + }; + } + setDataType(value2) { + this.type = value2; + return this; + } +}; +var UTIF = {}; +UTIF.decode = function(buff, prm) { + if (prm == null) prm = { parseMN: true, debug: false }; + var data2 = new Uint8Array(buff), offset = 0; + var id = UTIF._binBE.readASCII(data2, offset, 2); + offset += 2; + var bin = id == "II" ? UTIF._binLE : UTIF._binBE; + bin.readUshort(data2, offset); + offset += 2; + var ifdo = bin.readUint(data2, offset); + var ifds = []; + while (true) { + var cnt = bin.readUshort(data2, ifdo), typ = bin.readUshort(data2, ifdo + 4); + if (cnt != 0) { + if (typ < 1 || 13 < typ) { + console.log("error in TIFF"); + break; + } + } + UTIF._readIFD(bin, data2, ifdo, ifds, 0, prm); + ifdo = bin.readUint(data2, ifdo + 2 + cnt * 12); + if (ifdo == 0) break; + } + return ifds; +}; +UTIF.decodeImage = function(buff, img, ifds) { + if (img.data) return; + var data2 = new Uint8Array(buff); + var id = UTIF._binBE.readASCII(data2, 0, 2); + if (img["t256"] == null) return; + img.isLE = id == "II"; + img.width = img["t256"][0]; + img.height = img["t257"][0]; + var cmpr = img["t259"] ? img["t259"][0] : 1; + var fo = img["t266"] ? img["t266"][0] : 1; + if (img["t284"] && img["t284"][0] == 2) console.log("PlanarConfiguration 2 should not be used!"); + if (cmpr == 7 && img["t258"] && img["t258"].length > 3) img["t258"] = img["t258"].slice(0, 3); + var bipp; + if (img["t258"]) bipp = Math.min(32, img["t258"][0]) * img["t258"].length; + else bipp = img["t277"] ? img["t277"][0] : 1; + if (cmpr == 1 && img["t279"] != null && img["t278"] && img["t262"][0] == 32803) { + bipp = Math.round(img["t279"][0] * 8 / (img.width * img["t278"][0])); + } + var bipl = Math.ceil(img.width * bipp / 8) * 8; + var soff = img["t273"]; + if (soff == null) soff = img["t324"]; + var bcnt = img["t279"]; + if (cmpr == 1 && soff.length == 1) bcnt = [img.height * (bipl >>> 3)]; + if (bcnt == null) bcnt = img["t325"]; + var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0; + if (img["t322"] != null) { + var tw = img["t322"][0], th = img["t323"][0]; + var tx = Math.floor((img.width + tw - 1) / tw); + var ty = Math.floor((img.height + th - 1) / th); + var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0); + for (var y2 = 0; y2 < ty; y2++) + for (var x2 = 0; x2 < tx; x2++) { + var i = y2 * tx + x2; + for (var j = 0; j < tbuff.length; j++) tbuff[j] = 0; + UTIF.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, tbuff, 0, fo); + if (cmpr == 6) bytes = tbuff; + else UTIF._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x2 * tw * bipp / 8) | 0, y2 * th); + } + bilen = bytes.length * 8; + } else { + var rps = img["t278"] ? img["t278"][0] : img.height; + rps = Math.min(rps, img.height); + for (var i = 0; i < soff.length; i++) { + UTIF.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo); + bilen += bipl * rps; + } + bilen = Math.min(bilen, bytes.length * 8); + } + img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0); +}; +UTIF.decode._decompress = function(img, ifds, data2, off, len, cmpr, tgt, toff) { + if (cmpr == 34676) UTIF.decode._decodeLogLuv32(img, data2, off, len, tgt, toff); + else console.log("Unsupported compression", cmpr); + var bps = img["t258"] ? Math.min(32, img["t258"][0]) : 1; + var 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); + if (bps == 16 && !img.isLE && img["t33422"] == null) + for (var y2 = 0; y2 < h; y2++) { + var roff = toff + y2 * bpl; + for (var x2 = 1; x2 < bpl; x2 += 2) { + var t3 = tgt[roff + x2]; + tgt[roff + x2] = tgt[roff + x2 - 1]; + tgt[roff + x2 - 1] = t3; + } + } + if (img["t317"] && img["t317"][0] == 2) { + for (var y2 = 0; y2 < h; y2++) { + var ntoff = toff + y2 * bpl; + if (bps == 16) for (var j = bpp; j < bpl; j += 2) { + var nv = (tgt[ntoff + j + 1] << 8 | tgt[ntoff + j]) + (tgt[ntoff + j - bpp + 1] << 8 | tgt[ntoff + j - bpp]); + tgt[ntoff + j] = nv & 255; + tgt[ntoff + j + 1] = nv >>> 8 & 255; + } + else if (noc == 3) for (var j = 3; j < bpl; j += 3) { + tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - 3] & 255; + tgt[ntoff + j + 1] = tgt[ntoff + j + 1] + tgt[ntoff + j - 2] & 255; + tgt[ntoff + j + 2] = tgt[ntoff + j + 2] + tgt[ntoff + j - 1] & 255; + } + else for (var j = bpp; j < bpl; j++) tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - bpp] & 255; + } + } +}; +UTIF.decode._decodeLogLuv32 = function(img, data2, off, len, tgt, toff) { + var w = img.width, qw = w * 4; + var io = 0, out = new Uint8Array(qw); + while (io < len) { + var oo = 0; + while (oo < qw) { + var c2 = data2[off + io]; + io++; + if (c2 < 128) { + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io + j]; + oo += c2; + io += c2; + } else { + c2 = c2 - 126; + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io]; + oo += c2; + io++; + } + } + for (var x2 = 0; x2 < w; x2++) { + tgt[toff + 0] = out[x2]; + tgt[toff + 1] = out[x2 + w]; + tgt[toff + 2] = out[x2 + w * 2]; + tgt[toff + 4] = out[x2 + w * 3]; + toff += 6; + } + } +}; +UTIF.tags = {}; +UTIF._types = function() { + var main = new Array(250); + main.fill(0); + main = 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]); + var 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 }; + return { + basic: { + main, + rest + }, + gps: { + main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9], + rest: { 18: 2, 29: 2 } + } + }; +}(); +UTIF._readIFD = function(bin, data2, offset, ifds, depth, prm) { + var cnt = bin.readUshort(data2, offset); + offset += 2; + var ifd = {}; + if (prm.debug) console.log(" ".repeat(depth), ifds.length - 1, ">>>----------------"); + for (var i = 0; i < cnt; i++) { + var tag = bin.readUshort(data2, offset); + offset += 2; + var type = bin.readUshort(data2, offset); + offset += 2; + var num = bin.readUint(data2, offset); + offset += 4; + var voff = bin.readUint(data2, offset); + offset += 4; + var arr = []; + if (type == 1 || type == 7) { + arr = new Uint8Array(data2.buffer, num < 5 ? offset - 4 : voff, num); + } + if (type == 2) { + var o0 = num < 5 ? offset - 4 : voff, c2 = data2[o0], len = Math.max(0, Math.min(num - 1, data2.length - o0)); + if (c2 < 128 || len == 0) arr.push(bin.readASCII(data2, o0, len)); + else arr = new Uint8Array(data2.buffer, o0, len); + } + if (type == 3) { + for (var j = 0; j < num; j++) arr.push(bin.readUshort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 4 || type == 13) { + for (var j = 0; j < num; j++) arr.push(bin.readUint(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 5 || type == 10) { + var ri = type == 5 ? bin.readUint : bin.readInt; + for (var j = 0; j < num; j++) arr.push([ri(data2, voff + j * 8), ri(data2, voff + j * 8 + 4)]); + } + if (type == 8) { + for (var j = 0; j < num; j++) arr.push(bin.readShort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 9) { + for (var j = 0; j < num; j++) arr.push(bin.readInt(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 11) { + for (var j = 0; j < num; j++) arr.push(bin.readFloat(data2, voff + j * 4)); + } + if (type == 12) { + for (var j = 0; j < num; j++) arr.push(bin.readDouble(data2, voff + j * 8)); + } + if (num != 0 && arr.length == 0) { + console.log(tag, "unknown TIFF tag type: ", type, "num:", num); + if (i == 0) return; + continue; + } + if (prm.debug) console.log(" ".repeat(depth), tag, type, UTIF.tags[tag], arr); + ifd["t" + tag] = arr; + if (tag == 330 || tag == 34665 || tag == 34853 || tag == 50740 && bin.readUshort(data2, bin.readUint(arr, 0)) < 300 || tag == 61440) { + var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr; + var subfd = []; + for (var j = 0; j < oarr.length; j++) UTIF._readIFD(bin, data2, oarr[j], subfd, depth + 1, prm); + if (tag == 330) ifd.subIFD = subfd; + if (tag == 34665) ifd.exifIFD = subfd[0]; + if (tag == 34853) ifd.gpsiIFD = subfd[0]; + if (tag == 50740) ifd.dngPrvt = subfd[0]; + if (tag == 61440) ifd.fujiIFD = subfd[0]; + } + if (tag == 37500 && prm.parseMN) { + var mn = arr; + if (bin.readASCII(mn, 0, 5) == "Nikon") ifd.makerNote = UTIF["decode"](mn.slice(10).buffer)[0]; + else if (bin.readUshort(data2, voff) < 300 && bin.readUshort(data2, voff + 4) <= 12) { + var subsub = []; + UTIF._readIFD(bin, data2, voff, subsub, depth + 1, prm); + ifd.makerNote = subsub[0]; + } + } + } + ifds.push(ifd); + if (prm.debug) console.log(" ".repeat(depth), "<<<---------------"); + return offset; +}; +UTIF.toRGBA = function(out, type) { + const w = out.width, h = out.height, area = w * h, data2 = out.data; + let img; + switch (type) { + case HalfFloatType: + img = new Uint16Array(area * 4); + break; + case FloatType: + img = new Float32Array(area * 4); + break; + default: + throw new Error("THREE.LogLuvLoader: Unsupported texture data type: " + type); + } + let intp = out["t262"] ? out["t262"][0] : 2; + const bps = out["t258"] ? Math.min(32, out["t258"][0]) : 1; + if (out["t262"] == null && bps == 1) intp = 0; + if (intp == 32845) { + for (let y2 = 0; y2 < h; y2++) { + for (let x2 = 0; x2 < w; x2++) { + const si = (y2 * w + x2) * 6, qi = (y2 * w + x2) * 4; + let L = data2[si + 1] << 8 | data2[si]; + L = Math.pow(2, (L + 0.5) / 256 - 64); + const u = (data2[si + 3] + 0.5) / 410; + const v = (data2[si + 5] + 0.5) / 410; + const sX = 9 * u / (6 * u - 16 * v + 12); + const sY = 4 * v / (6 * u - 16 * v + 12); + const bY = L; + const X2 = sX * bY / sY, Y2 = bY, Z2 = (1 - sX - sY) * bY / sY; + const r = 2.69 * X2 - 1.276 * Y2 - 0.414 * Z2; + const g2 = -1.022 * X2 + 1.978 * Y2 + 0.044 * Z2; + const b3 = 0.061 * X2 - 0.224 * Y2 + 1.163 * Z2; + if (type === HalfFloatType) { + img[qi] = DataUtils.toHalfFloat(Math.min(r, 65504)); + img[qi + 1] = DataUtils.toHalfFloat(Math.min(g2, 65504)); + img[qi + 2] = DataUtils.toHalfFloat(Math.min(b3, 65504)); + img[qi + 3] = DataUtils.toHalfFloat(1); + } else { + img[qi] = r; + img[qi + 1] = g2; + img[qi + 2] = b3; + img[qi + 3] = 1; + } + } + } + } else { + throw new Error("THREE.LogLuvLoader: Unsupported Photometric interpretation: " + intp); + } + return img; +}; +UTIF._binBE = { + nextZero: function(data2, o) { + while (data2[o] != 0) o++; + return o; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + readShort: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 1]; + a2[1] = buff[p2 + 0]; + return UTIF._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF._binBE.ui32[0]; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + readFloat: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + 3 - i]; + return UTIF._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + 7 - i]; + return UTIF._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF._binBE.ui8; + UTIF._binBE.i32[0] = n2; + buff[p2 + 3] = a2[0]; + buff[p2 + 2] = a2[1]; + buff[p2 + 1] = a2[2]; + buff[p2 + 0] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 >> 0 & 255; + }, + writeASCII: function(buff, p2, s) { + for (var i = 0; i < s.length; i++) buff[p2 + i] = s.charCodeAt(i); + }, + writeDouble: function(buff, p2, n2) { + UTIF._binBE.fl64[0] = n2; + for (var i = 0; i < 8; i++) buff[p2 + i] = UTIF._binBE.ui8[7 - i]; + } +}; +UTIF._binBE.ui8 = new Uint8Array(8); +UTIF._binBE.i16 = new Int16Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.i32 = new Int32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.ui32 = new Uint32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.fl32 = new Float32Array(UTIF._binBE.ui8.buffer); +UTIF._binBE.fl64 = new Float64Array(UTIF._binBE.ui8.buffer); +UTIF._binLE = { + nextZero: UTIF._binBE.nextZero, + readUshort: function(buff, p2) { + return buff[p2 + 1] << 8 | buff[p2]; + }, + readShort: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + return UTIF._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF._binBE.ui32[0]; + }, + readASCII: UTIF._binBE.readASCII, + readFloat: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + i]; + return UTIF._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + i]; + return UTIF._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 & 255; + buff[p2 + 1] = n2 >> 8 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF._binBE.ui8; + UTIF._binBE.i32[0] = n2; + buff[p2 + 0] = a2[0]; + buff[p2 + 1] = a2[1]; + buff[p2 + 2] = a2[2]; + buff[p2 + 3] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >>> 0 & 255; + buff[p2 + 1] = n2 >>> 8 & 255; + buff[p2 + 2] = n2 >>> 16 & 255; + buff[p2 + 3] = n2 >>> 24 & 255; + }, + writeASCII: UTIF._binBE.writeASCII +}; +UTIF._copyTile = function(tb, tw, th, b3, w, h, xoff, yoff) { + var xlim = Math.min(tw, w - xoff); + var ylim = Math.min(th, h - yoff); + for (var y2 = 0; y2 < ylim; y2++) { + var tof = (yoff + y2) * w + xoff; + var sof = y2 * tw; + for (var x2 = 0; x2 < xlim; x2++) b3[tof + x2] = tb[sof + x2]; + } +}; + +// node_modules/three/examples/jsm/libs/lottie_canvas.module.js +var lottie = {}; +if (typeof document !== "undefined") { + function createTag(type) { + return document.createElement(type); + } + function extendPrototype(sources, destination) { + var i; + var len = sources.length; + var sourcePrototype; + for (i = 0; i < len; i += 1) { + sourcePrototype = sources[i].prototype; + for (var attr in sourcePrototype) { + if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; + } + } + } + function getDescriptor(object, prop) { + return Object.getOwnPropertyDescriptor(object, prop); + } + function createProxyFunction(prototype) { + function ProxyFunction() { + } + ProxyFunction.prototype = prototype; + return ProxyFunction; + } + function createSizedArray(len) { + return Array.apply(null, { length: len }); + } + function ProjectInterface$1() { + return {}; + } + function roundValues(flag) { + _shouldRoundValues = !!flag; + } + function bmRnd(value2) { + if (_shouldRoundValues) { + return Math.round(value2); + } + return value2; + } + function styleDiv(element) { + element.style.position = "absolute"; + element.style.top = 0; + element.style.left = 0; + element.style.display = "block"; + element.style.transformOrigin = "0 0"; + element.style.webkitTransformOrigin = "0 0"; + element.style.backfaceVisibility = "visible"; + element.style.webkitBackfaceVisibility = "visible"; + element.style.transformStyle = "preserve-3d"; + element.style.webkitTransformStyle = "preserve-3d"; + element.style.mozTransformStyle = "preserve-3d"; + } + function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { + this.type = type; + this.currentTime = currentTime; + this.totalTime = totalTime; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMCompleteEvent(type, frameMultiplier) { + this.type = type; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { + this.type = type; + this.currentLoop = currentLoop; + this.totalLoops = totalLoops; + this.direction = frameMultiplier < 0 ? -1 : 1; + } + function BMSegmentStartEvent(type, firstFrame, totalFrames) { + this.type = type; + this.firstFrame = firstFrame; + this.totalFrames = totalFrames; + } + function BMDestroyEvent(type, target) { + this.type = type; + this.target = target; + } + function BMRenderFrameErrorEvent(nativeError, currentTime) { + this.type = "renderFrameError"; + this.nativeError = nativeError; + this.currentTime = currentTime; + } + function BMConfigErrorEvent(nativeError) { + this.type = "configError"; + this.nativeError = nativeError; + } + function BMAnimationConfigErrorEvent(type, nativeError) { + this.type = type; + this.nativeError = nativeError; + } + function HSVtoRGB(h, s, v) { + var r; + var g2; + var b3; + var i; + var f; + var p2; + var q2; + var t3; + i = Math.floor(h * 6); + f = h * 6 - i; + p2 = v * (1 - s); + q2 = v * (1 - f * s); + t3 = v * (1 - (1 - f) * s); + switch (i % 6) { + case 0: + r = v; + g2 = t3; + b3 = p2; + break; + case 1: + r = q2; + g2 = v; + b3 = p2; + break; + case 2: + r = p2; + g2 = v; + b3 = t3; + break; + case 3: + r = p2; + g2 = q2; + b3 = v; + break; + case 4: + r = t3; + g2 = p2; + b3 = v; + break; + case 5: + r = v; + g2 = p2; + b3 = q2; + break; + default: + break; + } + return [ + r, + g2, + b3 + ]; + } + function RGBtoHSV(r, g2, b3) { + var max2 = Math.max(r, g2, b3); + var min = Math.min(r, g2, b3); + var d = max2 - min; + var h; + var s = max2 === 0 ? 0 : d / max2; + var v = max2 / 255; + switch (max2) { + case min: + h = 0; + break; + case r: + h = g2 - b3 + d * (g2 < b3 ? 6 : 0); + h /= 6 * d; + break; + case g2: + h = b3 - r + d * 2; + h /= 6 * d; + break; + case b3: + h = r - g2 + d * 4; + h /= 6 * d; + break; + default: + break; + } + return [ + h, + s, + v + ]; + } + function addSaturationToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[1] += offset; + if (hsv[1] > 1) { + hsv[1] = 1; + } else if (hsv[1] <= 0) { + hsv[1] = 0; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function addBrightnessToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[2] += offset; + if (hsv[2] > 1) { + hsv[2] = 1; + } else if (hsv[2] < 0) { + hsv[2] = 0; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function addHueToRGB(color, offset) { + var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); + hsv[0] += offset / 360; + if (hsv[0] > 1) { + hsv[0] -= 1; + } else if (hsv[0] < 0) { + hsv[0] += 1; + } + return HSVtoRGB(hsv[0], hsv[1], hsv[2]); + } + function createNS(type) { + return document.createElementNS(svgNS, type); + } + function BaseEvent() { + } + function getRenderer(key2) { + return renderers[key2]; + } + function bezFunction() { + var math = Math; + function pointOnLine2D(x1, y1, x2, y2, x3, y3) { + var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; + return det1 > -1e-3 && det1 < 1e-3; + } + function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { + if (z1 === 0 && z2 === 0 && z3 === 0) { + return pointOnLine2D(x1, y1, x2, y2, x3, y3); + } + var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); + var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); + var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); + var diffDist; + if (dist1 > dist2) { + if (dist1 > dist3) { + diffDist = dist1 - dist2 - dist3; + } else { + diffDist = dist3 - dist2 - dist1; + } + } else if (dist3 > dist2) { + diffDist = dist3 - dist2 - dist1; + } else { + diffDist = dist2 - dist1 - dist3; + } + return diffDist > -1e-4 && diffDist < 1e-4; + } + var getBezierLength = /* @__PURE__ */ function() { + return function(pt1, pt2, pt3, pt4) { + var curveSegments = getDefaultCurveSegments(); + var k2; + var i; + var len; + var ptCoord; + var perc; + var addedLength = 0; + var ptDistance; + var point = []; + var lastPoint = []; + var lengthData = bezierLengthPool.newElement(); + len = pt3.length; + for (k2 = 0; k2 < curveSegments; k2 += 1) { + perc = k2 / (curveSegments - 1); + ptDistance = 0; + for (i = 0; i < len; i += 1) { + 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]; + point[i] = ptCoord; + if (lastPoint[i] !== null) { + ptDistance += bmPow(point[i] - lastPoint[i], 2); + } + lastPoint[i] = point[i]; + } + if (ptDistance) { + ptDistance = bmSqrt(ptDistance); + addedLength += ptDistance; + } + lengthData.percents[k2] = perc; + lengthData.lengths[k2] = addedLength; + } + lengthData.addedLength = addedLength; + return lengthData; + }; + }(); + function getSegmentsLength(shapeData) { + var segmentsLength = segmentsLengthPool.newElement(); + var closed = shapeData.c; + var pathV = shapeData.v; + var pathO = shapeData.o; + var pathI = shapeData.i; + var i; + var len = shapeData._length; + var lengths2 = segmentsLength.lengths; + var totalLength = 0; + for (i = 0; i < len - 1; i += 1) { + lengths2[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); + totalLength += lengths2[i].addedLength; + } + if (closed && len) { + lengths2[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); + totalLength += lengths2[i].addedLength; + } + segmentsLength.totalLength = totalLength; + return segmentsLength; + } + function BezierData(length2) { + this.segmentLength = 0; + this.points = new Array(length2); + } + function PointData(partial2, point) { + this.partialLength = partial2; + this.point = point; + } + var buildBezierData = /* @__PURE__ */ function() { + var storedData = {}; + return function(pt1, pt2, pt3, pt4) { + var bezierName = (pt1[0] + "_" + pt1[1] + "_" + pt2[0] + "_" + pt2[1] + "_" + pt3[0] + "_" + pt3[1] + "_" + pt4[0] + "_" + pt4[1]).replace(/\./g, "p"); + if (!storedData[bezierName]) { + var curveSegments = getDefaultCurveSegments(); + var k2; + var i; + var len; + var ptCoord; + var perc; + var addedLength = 0; + var ptDistance; + var point; + var lastPoint = null; + 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])) { + curveSegments = 2; + } + var bezierData = new BezierData(curveSegments); + len = pt3.length; + for (k2 = 0; k2 < curveSegments; k2 += 1) { + point = createSizedArray(len); + perc = k2 / (curveSegments - 1); + ptDistance = 0; + for (i = 0; i < len; i += 1) { + 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]; + point[i] = ptCoord; + if (lastPoint !== null) { + ptDistance += bmPow(point[i] - lastPoint[i], 2); + } + } + ptDistance = bmSqrt(ptDistance); + addedLength += ptDistance; + bezierData.points[k2] = new PointData(ptDistance, point); + lastPoint = point; + } + bezierData.segmentLength = addedLength; + storedData[bezierName] = bezierData; + } + return storedData[bezierName]; + }; + }(); + function getDistancePerc(perc, bezierData) { + var percents = bezierData.percents; + var lengths2 = bezierData.lengths; + var len = percents.length; + var initPos = bmFloor((len - 1) * perc); + var lengthPos = perc * bezierData.addedLength; + var lPerc = 0; + if (initPos === len - 1 || initPos === 0 || lengthPos === lengths2[initPos]) { + return percents[initPos]; + } + var dir = lengths2[initPos] > lengthPos ? -1 : 1; + var flag = true; + while (flag) { + if (lengths2[initPos] <= lengthPos && lengths2[initPos + 1] > lengthPos) { + lPerc = (lengthPos - lengths2[initPos]) / (lengths2[initPos + 1] - lengths2[initPos]); + flag = false; + } else { + initPos += dir; + } + if (initPos < 0 || initPos >= len - 1) { + if (initPos === len - 1) { + return percents[initPos]; + } + flag = false; + } + } + return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; + } + function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { + var t1 = getDistancePerc(percent, bezierData); + var u1 = 1 - t1; + 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]) * 1e3) / 1e3; + 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]) * 1e3) / 1e3; + return [ptX, ptY]; + } + var bezierSegmentPoints = createTypedArray("float32", 8); + function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { + if (startPerc < 0) { + startPerc = 0; + } else if (startPerc > 1) { + startPerc = 1; + } + var t0 = getDistancePerc(startPerc, bezierData); + endPerc = endPerc > 1 ? 1 : endPerc; + var t1 = getDistancePerc(endPerc, bezierData); + var i; + var len = pt1.length; + var u0 = 1 - t0; + var u1 = 1 - t1; + var u0u0u0 = u0 * u0 * u0; + var t0u0u0_3 = t0 * u0 * u0 * 3; + var t0t0u0_3 = t0 * t0 * u0 * 3; + var t0t0t0 = t0 * t0 * t0; + var u0u0u1 = u0 * u0 * u1; + var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; + var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; + var t0t0t1 = t0 * t0 * t1; + var u0u1u1 = u0 * u1 * u1; + var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; + var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; + var t0t1t1 = t0 * t1 * t1; + var u1u1u1 = u1 * u1 * u1; + var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; + var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; + var t1t1t1 = t1 * t1 * t1; + for (i = 0; i < len; i += 1) { + bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1e3) / 1e3; + bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1e3) / 1e3; + } + return bezierSegmentPoints; + } + return { + getSegmentsLength, + getNewSegment, + getPointInSegment, + buildBezierData, + pointOnLine2D, + pointOnLine3D + }; + } + function DynamicPropertyContainer() { + } + function ShapePath() { + this.c = false; + this._length = 0; + this._maxLength = 8; + this.v = createSizedArray(this._maxLength); + this.o = createSizedArray(this._maxLength); + this.i = createSizedArray(this._maxLength); + } + function ShapeCollection() { + this._length = 0; + this._maxLength = 4; + this.shapes = createSizedArray(this._maxLength); + } + function setLocation(href) { + setLocationHref(href); + } + function searchAnimations() { + if (standalone === true) { + animationManager.searchAnimations(animationData, standalone, renderer); + } else { + animationManager.searchAnimations(); + } + } + function setSubframeRendering(flag) { + setSubframeEnabled(flag); + } + function setPrefix(prefix) { + setIdPrefix(prefix); + } + function loadAnimation(params) { + if (standalone === true) { + params.animationData = JSON.parse(animationData); + } + return animationManager.loadAnimation(params); + } + function setQuality(value2) { + if (typeof value2 === "string") { + switch (value2) { + case "high": + setDefaultCurveSegments(200); + break; + default: + case "medium": + setDefaultCurveSegments(50); + break; + case "low": + setDefaultCurveSegments(10); + break; + } + } else if (!isNaN(value2) && value2 > 1) { + setDefaultCurveSegments(value2); + } + if (getDefaultCurveSegments() >= 50) { + roundValues(false); + } else { + roundValues(true); + } + } + function inBrowser() { + return typeof navigator !== "undefined"; + } + function installPlugin(type, plugin) { + if (type === "expressions") { + setExpressionsPlugin(plugin); + } + } + function getFactory(name2) { + switch (name2) { + case "propertyFactory": + return PropertyFactory; + case "shapePropertyFactory": + return ShapePropertyFactory; + case "matrix": + return Matrix; + default: + return null; + } + } + function checkReady() { + if (document.readyState === "complete") { + clearInterval(readyStateCheckInterval); + searchAnimations(); + } + } + function getQueryVariable(variable) { + var vars = queryString.split("&"); + for (var i = 0; i < vars.length; i += 1) { + var pair = vars[i].split("="); + if (decodeURIComponent(pair[0]) == variable) { + return decodeURIComponent(pair[1]); + } + } + return null; + } + function ShapeModifier() { + } + function TrimModifier() { + } + function PuckerAndBloatModifier() { + } + function RepeaterModifier() { + } + function RoundCornersModifier() { + } + function getFontProperties(fontData) { + var styles = fontData.fStyle ? fontData.fStyle.split(" ") : []; + var fWeight = "normal"; + var fStyle = "normal"; + var len = styles.length; + var styleName; + for (var i = 0; i < len; i += 1) { + styleName = styles[i].toLowerCase(); + switch (styleName) { + case "italic": + fStyle = "italic"; + break; + case "bold": + fWeight = "700"; + break; + case "black": + fWeight = "900"; + break; + case "medium": + fWeight = "500"; + break; + case "regular": + case "normal": + fWeight = "400"; + break; + case "light": + case "thin": + fWeight = "200"; + break; + default: + break; + } + } + return { + style: fStyle, + weight: fontData.fWeight || fWeight + }; + } + function RenderableElement() { + } + function SliderEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function AngleEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function ColorEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 1, 0, container); + } + function PointEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 1, 0, container); + } + function LayerIndexEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function MaskIndexEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function CheckboxEffect(data2, elem2, container) { + this.p = PropertyFactory.getProp(elem2, data2.v, 0, 0, container); + } + function NoValueEffect() { + this.p = {}; + } + function EffectsManager(data2, element) { + var effects = data2.ef || []; + this.effectElements = []; + var i; + var len = effects.length; + var effectItem; + for (i = 0; i < len; i += 1) { + effectItem = new GroupEffect(effects[i], element); + this.effectElements.push(effectItem); + } + } + function GroupEffect(data2, element) { + this.init(data2, element); + } + function BaseElement() { + } + function FrameElement() { + } + function FootageElement(data2, globalData2, comp2) { + this.initFrame(); + this.initRenderable(); + this.assetData = globalData2.getAssetData(data2.refId); + this.footageData = globalData2.imageLoader.getAsset(this.assetData); + this.initBaseData(data2, globalData2, comp2); + } + function AudioElement(data2, globalData2, comp2) { + this.initFrame(); + this.initRenderable(); + this.assetData = globalData2.getAssetData(data2.refId); + this.initBaseData(data2, globalData2, comp2); + this._isPlaying = false; + this._canPlay = false; + var assetPath = this.globalData.getAssetsPath(this.assetData); + this.audio = this.globalData.audioController.createAudio(assetPath); + this._currentTime = 0; + this.globalData.audioController.addAudio(this); + this._volumeMultiplier = 1; + this._volume = 1; + this._previousVolume = null; + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + this.lv = PropertyFactory.getProp(this, data2.au && data2.au.lv ? data2.au.lv : { k: [100] }, 1, 0.01, this); + } + function BaseRenderer() { + } + function TransformElement() { + } + function MaskElement(data2, element, globalData2) { + this.data = data2; + this.element = element; + this.globalData = globalData2; + this.storedData = []; + this.masksProperties = this.data.masksProperties || []; + this.maskElement = null; + var defs = this.globalData.defs; + var i; + var len = this.masksProperties ? this.masksProperties.length : 0; + this.viewData = createSizedArray(len); + this.solidPath = ""; + var path; + var properties = this.masksProperties; + var count = 0; + var currentMasks = []; + var j; + var jLen; + var layerId = createElementID(); + var rect; + var expansor; + var feMorph; + var x2; + var maskType = "clipPath"; + var maskRef = "clip-path"; + for (i = 0; i < len; i += 1) { + if (properties[i].mode !== "a" && properties[i].mode !== "n" || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { + maskType = "mask"; + maskRef = "mask"; + } + if ((properties[i].mode === "s" || properties[i].mode === "i") && count === 0) { + rect = createNS("rect"); + rect.setAttribute("fill", "#ffffff"); + rect.setAttribute("width", this.element.comp.data.w || 0); + rect.setAttribute("height", this.element.comp.data.h || 0); + currentMasks.push(rect); + } else { + rect = null; + } + path = createNS("path"); + if (properties[i].mode === "n") { + this.viewData[i] = { + op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), + elem: path, + lastPath: "" + }; + defs.appendChild(path); + } else { + count += 1; + path.setAttribute("fill", properties[i].mode === "s" ? "#000000" : "#ffffff"); + path.setAttribute("clip-rule", "nonzero"); + var filterID; + if (properties[i].x.k !== 0) { + maskType = "mask"; + maskRef = "mask"; + x2 = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); + filterID = createElementID(); + expansor = createNS("filter"); + expansor.setAttribute("id", filterID); + feMorph = createNS("feMorphology"); + feMorph.setAttribute("operator", "erode"); + feMorph.setAttribute("in", "SourceGraphic"); + feMorph.setAttribute("radius", "0"); + expansor.appendChild(feMorph); + defs.appendChild(expansor); + path.setAttribute("stroke", properties[i].mode === "s" ? "#000000" : "#ffffff"); + } else { + feMorph = null; + x2 = null; + } + this.storedData[i] = { + elem: path, + x: x2, + expan: feMorph, + lastPath: "", + lastOperator: "", + filterId: filterID, + lastRadius: 0 + }; + if (properties[i].mode === "i") { + jLen = currentMasks.length; + var g2 = createNS("g"); + for (j = 0; j < jLen; j += 1) { + g2.appendChild(currentMasks[j]); + } + var mask2 = createNS("mask"); + mask2.setAttribute("mask-type", "alpha"); + mask2.setAttribute("id", layerId + "_" + count); + mask2.appendChild(path); + defs.appendChild(mask2); + g2.setAttribute("mask", "url(" + getLocationHref() + "#" + layerId + "_" + count + ")"); + currentMasks.length = 0; + currentMasks.push(g2); + } else { + currentMasks.push(path); + } + if (properties[i].inv && !this.solidPath) { + this.solidPath = this.createLayerSolidPath(); + } + this.viewData[i] = { + elem: path, + lastPath: "", + op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element), + prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), + invRect: rect + }; + if (!this.viewData[i].prop.k) { + this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); + } + } + } + this.maskElement = createNS(maskType); + len = currentMasks.length; + for (i = 0; i < len; i += 1) { + this.maskElement.appendChild(currentMasks[i]); + } + if (count > 0) { + this.maskElement.setAttribute("id", layerId); + this.element.maskedElement.setAttribute(maskRef, "url(" + getLocationHref() + "#" + layerId + ")"); + defs.appendChild(this.maskElement); + } + if (this.viewData.length) { + this.element.addRenderableComponent(this); + } + } + function SVGEffects(elem2) { + var i; + var source = "SourceGraphic"; + var len = elem2.data.ef ? elem2.data.ef.length : 0; + var filId = createElementID(); + var fil = filtersFactory.createFilter(filId, true); + var count = 0; + this.filters = []; + var filterManager; + for (i = 0; i < len; i += 1) { + filterManager = null; + var type = elem2.data.ef[i].ty; + if (registeredEffects[type]) { + var Effect = registeredEffects[type].effect; + filterManager = new Effect(fil, elem2.effectsManager.effectElements[i], elem2, idPrefix + count, source); + source = idPrefix + count; + if (registeredEffects[type].countsAsEffect) { + count += 1; + } + } + if (filterManager) { + this.filters.push(filterManager); + } + } + if (count) { + elem2.globalData.defs.appendChild(fil); + elem2.layerElement.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + } + if (this.filters.length) { + elem2.addRenderableComponent(this); + } + } + function registerEffect(id, effect2, countsAsEffect) { + registeredEffects[id] = { + effect: effect2, + countsAsEffect + }; + } + function SVGBaseElement() { + } + function HierarchyElement() { + } + function RenderableDOMElement() { + } + function IImageElement(data2, globalData2, comp2) { + this.assetData = globalData2.getAssetData(data2.refId); + this.initElement(data2, globalData2, comp2); + this.sourceRect = { + top: 0, + left: 0, + width: this.assetData.w, + height: this.assetData.h + }; + } + function ProcessedElement(element, position2) { + this.elem = element; + this.pos = position2; + } + function IShapeElement() { + } + function SVGShapeData(transformers, level, shape) { + this.caches = []; + this.styles = []; + this.transformers = transformers; + this.lStr = ""; + this.sh = shape; + this.lvl = level; + this._isAnimated = !!shape.k; + var i = 0; + var len = transformers.length; + while (i < len) { + if (transformers[i].mProps.dynamicProperties.length) { + this._isAnimated = true; + break; + } + i += 1; + } + } + function SVGStyleData(data2, level) { + this.data = data2; + this.type = data2.ty; + this.d = ""; + this.lvl = level; + this._mdf = false; + this.closed = data2.hd === true; + this.pElem = createNS("path"); + this.msElem = null; + } + function DashProperty(elem2, data2, renderer2, container) { + this.elem = elem2; + this.frameId = -1; + this.dataProps = createSizedArray(data2.length); + this.renderer = renderer2; + this.k = false; + this.dashStr = ""; + this.dashArray = createTypedArray("float32", data2.length ? data2.length - 1 : 0); + this.dashoffset = createTypedArray("float32", 1); + this.initDynamicPropertyContainer(container); + var i; + var len = data2.length || 0; + var prop; + for (i = 0; i < len; i += 1) { + prop = PropertyFactory.getProp(elem2, data2[i].v, 0, 0, this); + this.k = prop.k || this.k; + this.dataProps[i] = { n: data2[i].n, p: prop }; + } + if (!this.k) { + this.getValue(true); + } + this._isAnimated = this.k; + } + function SVGStrokeStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.w = PropertyFactory.getProp(elem2, data2.w, 0, null, this); + this.d = new DashProperty(elem2, data2.d || {}, "svg", this); + this.c = PropertyFactory.getProp(elem2, data2.c, 1, 255, this); + this.style = styleOb; + this._isAnimated = !!this._isAnimated; + } + function SVGFillStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.c = PropertyFactory.getProp(elem2, data2.c, 1, 255, this); + this.style = styleOb; + } + function SVGNoStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.style = styleOb; + } + function GradientProperty(elem2, data2, container) { + this.data = data2; + this.c = createTypedArray("uint8c", data2.p * 4); + var cLength = data2.k.k[0].s ? data2.k.k[0].s.length - data2.p * 4 : data2.k.k.length - data2.p * 4; + this.o = createTypedArray("float32", cLength); + this._cmdf = false; + this._omdf = false; + this._collapsable = this.checkCollapsable(); + this._hasOpacity = cLength; + this.initDynamicPropertyContainer(container); + this.prop = PropertyFactory.getProp(elem2, data2.k, 1, null, this); + this.k = this.prop.k; + this.getValue(true); + } + function SVGGradientFillStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.initGradientData(elem2, data2, styleOb); + } + function SVGGradientStrokeStyleData(elem2, data2, styleOb) { + this.initDynamicPropertyContainer(elem2); + this.getValue = this.iterateDynamicProperties; + this.w = PropertyFactory.getProp(elem2, data2.w, 0, null, this); + this.d = new DashProperty(elem2, data2.d || {}, "svg", this); + this.initGradientData(elem2, data2, styleOb); + this._isAnimated = !!this._isAnimated; + } + function ShapeGroupData() { + this.it = []; + this.prevViewData = []; + this.gr = createNS("g"); + } + function SVGTransformData(mProps, op, container) { + this.transform = { + mProps, + op, + container + }; + this.elements = []; + this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; + } + function SVGShapeElement(data2, globalData2, comp2) { + this.shapes = []; + this.shapesData = data2.shapes; + this.stylesList = []; + this.shapeModifiers = []; + this.itemsData = []; + this.processedElements = []; + this.animatedContents = []; + this.initElement(data2, globalData2, comp2); + this.prevViewData = []; + } + function LetterProps(o, sw, sc, fc, m, p2) { + this.o = o; + this.sw = sw; + this.sc = sc; + this.fc = fc; + this.m = m; + this.p = p2; + this._mdf = { + o: true, + sw: !!sw, + sc: !!sc, + fc: !!fc, + m: true, + p: true + }; + } + function TextProperty(elem2, data2) { + this._frameId = initialDefaultFrame; + this.pv = ""; + this.v = ""; + this.kf = false; + this._isFirstFrame = true; + this._mdf = false; + this.data = data2; + this.elem = elem2; + this.comp = this.elem.comp; + this.keysIndex = 0; + this.canResize = false; + this.minimumFontSize = 1; + this.effectsSequence = []; + this.currentData = { + ascent: 0, + boxWidth: this.defaultBoxWidth, + f: "", + fStyle: "", + fWeight: "", + fc: "", + j: "", + justifyOffset: "", + l: [], + lh: 0, + lineWidths: [], + ls: "", + of: "", + s: "", + sc: "", + sw: 0, + t: 0, + tr: 0, + sz: 0, + ps: null, + fillColorAnim: false, + strokeColorAnim: false, + strokeWidthAnim: false, + yOffset: 0, + finalSize: 0, + finalText: [], + finalLineHeight: 0, + __complete: false + }; + this.copyData(this.currentData, this.data.d.k[0].s); + if (!this.searchProperty()) { + this.completeTextData(this.currentData); + } + } + function TextAnimatorDataProperty(elem2, animatorProps, container) { + var defaultData = { propType: false }; + var getProp = PropertyFactory.getProp; + var textAnimatorAnimatables = animatorProps.a; + this.a = { + r: textAnimatorAnimatables.r ? getProp(elem2, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, + rx: textAnimatorAnimatables.rx ? getProp(elem2, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, + ry: textAnimatorAnimatables.ry ? getProp(elem2, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, + sk: textAnimatorAnimatables.sk ? getProp(elem2, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, + sa: textAnimatorAnimatables.sa ? getProp(elem2, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, + s: textAnimatorAnimatables.s ? getProp(elem2, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData, + a: textAnimatorAnimatables.a ? getProp(elem2, textAnimatorAnimatables.a, 1, 0, container) : defaultData, + o: textAnimatorAnimatables.o ? getProp(elem2, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData, + p: textAnimatorAnimatables.p ? getProp(elem2, textAnimatorAnimatables.p, 1, 0, container) : defaultData, + sw: textAnimatorAnimatables.sw ? getProp(elem2, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, + sc: textAnimatorAnimatables.sc ? getProp(elem2, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, + fc: textAnimatorAnimatables.fc ? getProp(elem2, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, + fh: textAnimatorAnimatables.fh ? getProp(elem2, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, + fs: textAnimatorAnimatables.fs ? getProp(elem2, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData, + fb: textAnimatorAnimatables.fb ? getProp(elem2, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData, + t: textAnimatorAnimatables.t ? getProp(elem2, textAnimatorAnimatables.t, 0, 0, container) : defaultData + }; + this.s = TextSelectorProp.getTextSelectorProp(elem2, animatorProps.s, container); + this.s.t = animatorProps.s.t; + } + function TextAnimatorProperty(textData, renderType, elem2) { + this._isFirstFrame = true; + this._hasMaskedPath = false; + this._frameId = -1; + this._textData = textData; + this._renderType = renderType; + this._elem = elem2; + this._animatorsData = createSizedArray(this._textData.a.length); + this._pathData = {}; + this._moreOptions = { + alignment: {} + }; + this.renderedLetters = []; + this.lettersChangedFlag = false; + this.initDynamicPropertyContainer(elem2); + } + function ITextElement() { + } + function SVGTextLottieElement(data2, globalData2, comp2) { + this.textSpans = []; + this.renderType = "svg"; + this.initElement(data2, globalData2, comp2); + } + function ISolidElement(data2, globalData2, comp2) { + this.initElement(data2, globalData2, comp2); + } + function NullElement(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initFrame(); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + } + function SVGRendererBase() { + } + function ICompElement() { + } + function SVGCompElement(data2, globalData2, comp2) { + this.layers = data2.layers; + this.supports3d = true; + this.completeLayers = false; + this.pendingElements = []; + this.elements = this.layers ? createSizedArray(this.layers.length) : []; + this.initElement(data2, globalData2, comp2); + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + } + function SVGRenderer(animationItem, config) { + this.animationItem = animationItem; + this.layers = null; + this.renderedFrame = -1; + this.svgElement = createNS("svg"); + var ariaLabel = ""; + if (config && config.title) { + var titleElement = createNS("title"); + var titleId = createElementID(); + titleElement.setAttribute("id", titleId); + titleElement.textContent = config.title; + this.svgElement.appendChild(titleElement); + ariaLabel += titleId; + } + if (config && config.description) { + var descElement = createNS("desc"); + var descId = createElementID(); + descElement.setAttribute("id", descId); + descElement.textContent = config.description; + this.svgElement.appendChild(descElement); + ariaLabel += " " + descId; + } + if (ariaLabel) { + this.svgElement.setAttribute("aria-labelledby", ariaLabel); + } + var defs = createNS("defs"); + this.svgElement.appendChild(defs); + var maskElement = createNS("g"); + this.svgElement.appendChild(maskElement); + this.layerElement = maskElement; + this.renderConfig = { + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + progressiveLoad: config && config.progressiveLoad || false, + hideOnTransparent: !(config && config.hideOnTransparent === false), + viewBoxOnly: config && config.viewBoxOnly || false, + viewBoxSize: config && config.viewBoxSize || false, + className: config && config.className || "", + id: config && config.id || "", + focusable: config && config.focusable, + filterSize: { + width: config && config.filterSize && config.filterSize.width || "100%", + height: config && config.filterSize && config.filterSize.height || "100%", + x: config && config.filterSize && config.filterSize.x || "0%", + y: config && config.filterSize && config.filterSize.y || "0%" + }, + width: config && config.width, + height: config && config.height + }; + this.globalData = { + _mdf: false, + frameNum: -1, + defs, + renderConfig: this.renderConfig + }; + this.elements = []; + this.pendingElements = []; + this.destroyed = false; + this.rendererType = "svg"; + } + function CVContextData() { + this.saved = []; + this.cArrPos = 0; + this.cTr = new Matrix(); + this.cO = 1; + var i; + var len = 15; + this.savedOp = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + this.saved[i] = createTypedArray("float32", 16); + } + this._length = len; + } + function ShapeTransformManager() { + this.sequences = {}; + this.sequenceList = []; + this.transform_key_count = 0; + } + function CVEffects() { + } + function CVMaskElement(data2, element) { + this.data = data2; + this.element = element; + this.masksProperties = this.data.masksProperties || []; + this.viewData = createSizedArray(this.masksProperties.length); + var i; + var len = this.masksProperties.length; + var hasMasks = false; + for (i = 0; i < len; i += 1) { + if (this.masksProperties[i].mode !== "n") { + hasMasks = true; + } + this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); + } + this.hasMasks = hasMasks; + if (hasMasks) { + this.element.addRenderableComponent(this); + } + } + function CVBaseElement() { + } + function CVShapeData(element, data2, styles, transformsManager) { + this.styledShapes = []; + this.tr = [0, 0, 0, 0, 0, 0]; + var ty = 4; + if (data2.ty === "rc") { + ty = 5; + } else if (data2.ty === "el") { + ty = 6; + } else if (data2.ty === "sr") { + ty = 7; + } + this.sh = ShapePropertyFactory.getShapeProp(element, data2, ty, element); + var i; + var len = styles.length; + var styledShape; + for (i = 0; i < len; i += 1) { + if (!styles[i].closed) { + styledShape = { + transforms: transformsManager.addTransformSequence(styles[i].transforms), + trNodes: [] + }; + this.styledShapes.push(styledShape); + styles[i].elements.push(styledShape); + } + } + } + function CVShapeElement(data2, globalData2, comp2) { + this.shapes = []; + this.shapesData = data2.shapes; + this.stylesList = []; + this.itemsData = []; + this.prevViewData = []; + this.shapeModifiers = []; + this.processedElements = []; + this.transformsManager = new ShapeTransformManager(); + this.initElement(data2, globalData2, comp2); + } + function CVTextElement(data2, globalData2, comp2) { + this.textSpans = []; + this.yOffset = 0; + this.fillColorAnim = false; + this.strokeColorAnim = false; + this.strokeWidthAnim = false; + this.stroke = false; + this.fill = false; + this.justifyOffset = 0; + this.currentRender = null; + this.renderType = "canvas"; + this.values = { + fill: "rgba(0,0,0,0)", + stroke: "rgba(0,0,0,0)", + sWidth: 0, + fValue: "" + }; + this.initElement(data2, globalData2, comp2); + } + function CVImageElement(data2, globalData2, comp2) { + this.assetData = globalData2.getAssetData(data2.refId); + this.img = globalData2.imageLoader.getAsset(this.assetData); + this.initElement(data2, globalData2, comp2); + } + function CVSolidElement(data2, globalData2, comp2) { + this.initElement(data2, globalData2, comp2); + } + function CanvasRendererBase(animationItem, config) { + this.animationItem = animationItem; + this.renderConfig = { + clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, + context: config && config.context || null, + progressiveLoad: config && config.progressiveLoad || false, + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + className: config && config.className || "", + id: config && config.id || "" + }; + this.renderConfig.dpr = config && config.dpr || 1; + if (this.animationItem.wrapper) { + this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; + } + this.renderedFrame = -1; + this.globalData = { + frameNum: -1, + _mdf: false, + renderConfig: this.renderConfig, + currentGlobalAlpha: -1 + }; + this.contextData = new CVContextData(); + this.elements = []; + this.pendingElements = []; + this.transformMat = new Matrix(); + this.completeLayers = false; + this.rendererType = "canvas"; + } + function CVCompElement(data2, globalData2, comp2) { + this.completeLayers = false; + this.layers = data2.layers; + this.pendingElements = []; + this.elements = createSizedArray(this.layers.length); + this.initElement(data2, globalData2, comp2); + this.tm = data2.tm ? PropertyFactory.getProp(this, data2.tm, 0, globalData2.frameRate, this) : { _placeholder: true }; + } + function CanvasRenderer(animationItem, config) { + this.animationItem = animationItem; + this.renderConfig = { + clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, + context: config && config.context || null, + progressiveLoad: config && config.progressiveLoad || false, + preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", + imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", + contentVisibility: config && config.contentVisibility || "visible", + className: config && config.className || "", + id: config && config.id || "" + }; + this.renderConfig.dpr = config && config.dpr || 1; + if (this.animationItem.wrapper) { + this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; + } + this.renderedFrame = -1; + this.globalData = { + frameNum: -1, + _mdf: false, + renderConfig: this.renderConfig, + currentGlobalAlpha: -1 + }; + this.contextData = new CVContextData(); + this.elements = []; + this.pendingElements = []; + this.transformMat = new Matrix(); + this.completeLayers = false; + this.rendererType = "canvas"; + } + function seedRandom(pool, math) { + var global = this, width2 = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width2, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask2 = width2 - 1, nodecrypto; + function seedrandom(seed, options, callback) { + var key2 = []; + options = options === true ? { entropy: true } : options || {}; + var shortseed = mixkey(flatten2( + options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, + 3 + ), key2); + var arc4 = new ARC4(key2); + var prng = function() { + var n2 = arc4.g(chunks), d = startdenom, x2 = 0; + while (n2 < significance) { + n2 = (n2 + x2) * width2; + d *= width2; + x2 = arc4.g(1); + } + while (n2 >= overflow) { + n2 /= 2; + d /= 2; + x2 >>>= 1; + } + return (n2 + x2) / d; + }; + prng.int32 = function() { + return arc4.g(4) | 0; + }; + prng.quick = function() { + return arc4.g(4) / 4294967296; + }; + prng.double = prng; + mixkey(tostring(arc4.S), pool); + return (options.pass || callback || function(prng2, seed2, is_math_call, state) { + if (state) { + if (state.S) { + copy(state, arc4); + } + prng2.state = function() { + return copy(arc4, {}); + }; + } + if (is_math_call) { + math[rngname] = prng2; + return seed2; + } else return prng2; + })( + prng, + shortseed, + "global" in options ? options.global : this == math, + options.state + ); + } + math["seed" + rngname] = seedrandom; + function ARC4(key2) { + var t3, keylen = key2.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; + if (!keylen) { + key2 = [keylen++]; + } + while (i < width2) { + s[i] = i++; + } + for (i = 0; i < width2; i++) { + s[i] = s[j = mask2 & j + key2[i % keylen] + (t3 = s[i])]; + s[j] = t3; + } + me.g = function(count) { + var t4, r = 0, i2 = me.i, j2 = me.j, s2 = me.S; + while (count--) { + t4 = s2[i2 = mask2 & i2 + 1]; + r = r * width2 + s2[mask2 & (s2[i2] = s2[j2 = mask2 & j2 + t4]) + (s2[j2] = t4)]; + } + me.i = i2; + me.j = j2; + return r; + }; + } + function copy(f, t3) { + t3.i = f.i; + t3.j = f.j; + t3.S = f.S.slice(); + return t3; + } + function flatten2(obj, depth) { + var result = [], typ = typeof obj, prop; + if (depth && typ == "object") { + for (prop in obj) { + try { + result.push(flatten2(obj[prop], depth - 1)); + } catch (e) { + } + } + } + return result.length ? result : typ == "string" ? obj : obj + "\0"; + } + function mixkey(seed, key2) { + var stringseed = seed + "", smear, j = 0; + while (j < stringseed.length) { + key2[mask2 & j] = mask2 & (smear ^= key2[mask2 & j] * 19) + stringseed.charCodeAt(j++); + } + return tostring(key2); + } + function autoseed() { + try { + if (nodecrypto) { + return tostring(nodecrypto.randomBytes(width2)); + } + var out = new Uint8Array(width2); + (global.crypto || global.msCrypto).getRandomValues(out); + return tostring(out); + } catch (e) { + var browser = global.navigator, plugins = browser && browser.plugins; + return [+/* @__PURE__ */ new Date(), global, plugins, global.screen, tostring(pool)]; + } + } + function tostring(a2) { + return String.fromCharCode.apply(0, a2); + } + mixkey(math.random(), pool); + } + function initialize$2(BMMath2) { + seedRandom([], BMMath2); + } + function addPropertyDecorator() { + function loopOut2(type, duration, durationFlag) { + if (!this.k || !this.keyframes) { + return this.pv; + } + type = type ? type.toLowerCase() : ""; + var currentFrame = this.comp.renderedFrame; + var keyframes = this.keyframes; + var lastKeyFrame = keyframes[keyframes.length - 1].t; + if (currentFrame <= lastKeyFrame) { + return this.pv; + } + var cycleDuration; + var firstKeyFrame; + if (!durationFlag) { + if (!duration || duration > keyframes.length - 1) { + duration = keyframes.length - 1; + } + firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; + cycleDuration = lastKeyFrame - firstKeyFrame; + } else { + if (!duration) { + cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); + } else { + cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); + } + firstKeyFrame = lastKeyFrame - cycleDuration; + } + var i; + var len; + var ret; + if (type === "pingpong") { + var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); + if (iterations % 2 !== 0) { + return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + } else if (type === "offset") { + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); + if (this.pv.length) { + ret = new Array(initV.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = (endV[i] - initV[i]) * repeats + current[i]; + } + return ret; + } + return (endV - initV) * repeats + current; + } else if (type === "continue") { + var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var nextLastValue = this.getValueAtTime((lastKeyFrame - 1e-3) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + ret = new Array(lastValue.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 5e-4; + } + return ret; + } + return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 1e-3); + } + return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + function loopIn2(type, duration, durationFlag) { + if (!this.k) { + return this.pv; + } + type = type ? type.toLowerCase() : ""; + var currentFrame = this.comp.renderedFrame; + var keyframes = this.keyframes; + var firstKeyFrame = keyframes[0].t; + if (currentFrame >= firstKeyFrame) { + return this.pv; + } + var cycleDuration; + var lastKeyFrame; + if (!durationFlag) { + if (!duration || duration > keyframes.length - 1) { + duration = keyframes.length - 1; + } + lastKeyFrame = keyframes[duration].t; + cycleDuration = lastKeyFrame - firstKeyFrame; + } else { + if (!duration) { + cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); + } else { + cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); + } + lastKeyFrame = firstKeyFrame + cycleDuration; + } + var i; + var len; + var ret; + if (type === "pingpong") { + var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration); + if (iterations % 2 === 0) { + return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + } + } else if (type === "offset") { + var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); + var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); + var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; + if (this.pv.length) { + ret = new Array(initV.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = current[i] - (endV[i] - initV[i]) * repeats; + } + return ret; + } + return current - (endV - initV) * repeats; + } else if (type === "continue") { + var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); + var nextFirstValue = this.getValueAtTime((firstKeyFrame + 1e-3) / this.comp.globalData.frameRate, 0); + if (this.pv.length) { + ret = new Array(firstValue.length); + len = ret.length; + for (i = 0; i < len; i += 1) { + ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 1e-3; + } + return ret; + } + return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 1e-3; + } + return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); + } + function smooth2(width2, samples) { + if (!this.k) { + return this.pv; + } + width2 = (width2 || 0.4) * 0.5; + samples = Math.floor(samples || 5); + if (samples <= 1) { + return this.pv; + } + var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; + var initFrame = currentTime - width2; + var endFrame = currentTime + width2; + var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; + var i = 0; + var j = 0; + var value2; + if (this.pv.length) { + value2 = createTypedArray("float32", this.pv.length); + } else { + value2 = 0; + } + var sampleValue; + while (i < samples) { + sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); + if (this.pv.length) { + for (j = 0; j < this.pv.length; j += 1) { + value2[j] += sampleValue[j]; + } + } else { + value2 += sampleValue; + } + i += 1; + } + if (this.pv.length) { + for (j = 0; j < this.pv.length; j += 1) { + value2[j] /= samples; + } + } else { + value2 /= samples; + } + return value2; + } + function getTransformValueAtTime(time2) { + if (!this._transformCachingAtTime) { + this._transformCachingAtTime = { + v: new Matrix() + }; + } + var matrix3 = this._transformCachingAtTime.v; + matrix3.cloneFromProps(this.pre.props); + if (this.appliedTransformations < 1) { + var anchor = this.a.getValueAtTime(time2); + matrix3.translate( + -anchor[0] * this.a.mult, + -anchor[1] * this.a.mult, + anchor[2] * this.a.mult + ); + } + if (this.appliedTransformations < 2) { + var scale2 = this.s.getValueAtTime(time2); + matrix3.scale( + scale2[0] * this.s.mult, + scale2[1] * this.s.mult, + scale2[2] * this.s.mult + ); + } + if (this.sk && this.appliedTransformations < 3) { + var skew = this.sk.getValueAtTime(time2); + var skewAxis = this.sa.getValueAtTime(time2); + matrix3.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); + } + if (this.r && this.appliedTransformations < 4) { + var rotation2 = this.r.getValueAtTime(time2); + matrix3.rotate(-rotation2 * this.r.mult); + } else if (!this.r && this.appliedTransformations < 4) { + var rotationZ = this.rz.getValueAtTime(time2); + var rotationY = this.ry.getValueAtTime(time2); + var rotationX = this.rx.getValueAtTime(time2); + var orientation = this.or.getValueAtTime(time2); + matrix3.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult); + } + if (this.data.p && this.data.p.s) { + var positionX = this.px.getValueAtTime(time2); + var positionY = this.py.getValueAtTime(time2); + if (this.data.p.z) { + var positionZ = this.pz.getValueAtTime(time2); + matrix3.translate( + positionX * this.px.mult, + positionY * this.py.mult, + -positionZ * this.pz.mult + ); + } else { + matrix3.translate(positionX * this.px.mult, positionY * this.py.mult, 0); + } + } else { + var position2 = this.p.getValueAtTime(time2); + matrix3.translate( + position2[0] * this.p.mult, + position2[1] * this.p.mult, + -position2[2] * this.p.mult + ); + } + return matrix3; + } + function getTransformStaticValueAtTime() { + return this.v.clone(new Matrix()); + } + var getTransformProperty = TransformPropertyFactory.getTransformProperty; + TransformPropertyFactory.getTransformProperty = function(elem2, data2, container) { + var prop = getTransformProperty(elem2, data2, container); + if (prop.dynamicProperties.length) { + prop.getValueAtTime = getTransformValueAtTime.bind(prop); + } else { + prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); + } + prop.setGroupProperty = expressionHelpers.setGroupProperty; + return prop; + }; + var propertyGetProp = PropertyFactory.getProp; + PropertyFactory.getProp = function(elem2, data2, type, mult, container) { + var prop = propertyGetProp(elem2, data2, type, mult, container); + if (prop.kf) { + prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); + } else { + prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); + } + prop.setGroupProperty = expressionHelpers.setGroupProperty; + prop.loopOut = loopOut2; + prop.loopIn = loopIn2; + prop.smooth = smooth2; + prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); + prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); + prop.numKeys = data2.a === 1 ? data2.k.length : 0; + prop.propertyIndex = data2.ix; + var value2 = 0; + if (type !== 0) { + value2 = createTypedArray("float32", data2.a === 1 ? data2.k[0].s.length : data2.k.length); + } + prop._cachingAtTime = { + lastFrame: initialDefaultFrame, + lastIndex: 0, + value: value2 + }; + expressionHelpers.searchExpressions(elem2, data2, prop); + if (prop.k) { + container.addDynamicProperty(prop); + } + return prop; + }; + function getShapeValueAtTime(frameNum) { + if (!this._cachingAtTime) { + this._cachingAtTime = { + shapeValue: shapePool.clone(this.pv), + lastIndex: 0, + lastTime: initialDefaultFrame + }; + } + frameNum *= this.elem.globalData.frameRate; + frameNum -= this.offsetTime; + if (frameNum !== this._cachingAtTime.lastTime) { + this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; + this._cachingAtTime.lastTime = frameNum; + this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); + } + return this._cachingAtTime.shapeValue; + } + var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); + var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); + function ShapeExpressions() { + } + ShapeExpressions.prototype = { + vertices: function(prop, time2) { + if (this.k) { + this.getValue(); + } + var shapePath = this.v; + if (time2 !== void 0) { + shapePath = this.getValueAtTime(time2, 0); + } + var i; + var len = shapePath._length; + var vertices = shapePath[prop]; + var points = shapePath.v; + var arr = createSizedArray(len); + for (i = 0; i < len; i += 1) { + if (prop === "i" || prop === "o") { + arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; + } else { + arr[i] = [vertices[i][0], vertices[i][1]]; + } + } + return arr; + }, + points: function(time2) { + return this.vertices("v", time2); + }, + inTangents: function(time2) { + return this.vertices("i", time2); + }, + outTangents: function(time2) { + return this.vertices("o", time2); + }, + isClosed: function() { + return this.v.c; + }, + pointOnPath: function(perc, time2) { + var shapePath = this.v; + if (time2 !== void 0) { + shapePath = this.getValueAtTime(time2, 0); + } + if (!this._segmentsLength) { + this._segmentsLength = bez.getSegmentsLength(shapePath); + } + var segmentsLength = this._segmentsLength; + var lengths2 = segmentsLength.lengths; + var lengthPos = segmentsLength.totalLength * perc; + var i = 0; + var len = lengths2.length; + var accumulatedLength = 0; + var pt; + while (i < len) { + if (accumulatedLength + lengths2[i].addedLength > lengthPos) { + var initIndex = i; + var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; + var segmentPerc = (lengthPos - accumulatedLength) / lengths2[i].addedLength; + pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths2[i]); + break; + } else { + accumulatedLength += lengths2[i].addedLength; + } + i += 1; + } + if (!pt) { + pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; + } + return pt; + }, + vectorOnPath: function(perc, time2, vectorType) { + if (perc == 1) { + perc = this.v.c; + } else if (perc == 0) { + perc = 0.999; + } + var pt1 = this.pointOnPath(perc, time2); + var pt2 = this.pointOnPath(perc + 1e-3, time2); + var xLength = pt2[0] - pt1[0]; + var yLength = pt2[1] - pt1[1]; + var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); + if (magnitude === 0) { + return [0, 0]; + } + var unitVector = vectorType === "tangent" ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; + return unitVector; + }, + tangentOnPath: function(perc, time2) { + return this.vectorOnPath(perc, time2, "tangent"); + }, + normalOnPath: function(perc, time2) { + return this.vectorOnPath(perc, time2, "normal"); + }, + setGroupProperty: expressionHelpers.setGroupProperty, + getValueAtTime: expressionHelpers.getStaticValueAtTime + }; + extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); + extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); + KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; + KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; + var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; + ShapePropertyFactory.getShapeProp = function(elem2, data2, type, arr, trims) { + var prop = propertyGetShapeProp(elem2, data2, type, arr, trims); + prop.propertyIndex = data2.ix; + prop.lock = false; + if (type === 3) { + expressionHelpers.searchExpressions(elem2, data2.pt, prop); + } else if (type === 4) { + expressionHelpers.searchExpressions(elem2, data2.ks, prop); + } + if (prop.k) { + elem2.addDynamicProperty(prop); + } + return prop; + }; + } + function initialize$1() { + addPropertyDecorator(); + } + function addDecorator() { + function searchExpressions() { + if (this.data.d.x) { + this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); + this.addEffect(this.getExpressionValue.bind(this)); + return true; + } + return null; + } + TextProperty.prototype.getExpressionValue = function(currentValue, text2) { + var newValue = this.calculateExpression(text2); + if (currentValue.t !== newValue) { + var newData = {}; + this.copyData(newData, currentValue); + newData.t = newValue.toString(); + newData.__complete = false; + return newData; + } + return currentValue; + }; + TextProperty.prototype.searchProperty = function() { + var isKeyframed = this.searchKeyframes(); + var hasExpressions = this.searchExpressions(); + this.kf = isKeyframed || hasExpressions; + return this.kf; + }; + TextProperty.prototype.searchExpressions = searchExpressions; + } + function initialize() { + addDecorator(); + } + const svgNS = "http://www.w3.org/2000/svg"; + let locationHref = ""; + let _useWebWorker = false; + const initialDefaultFrame = -999999; + const setWebWorker = (flag) => { + _useWebWorker = !!flag; + }; + const getWebWorker = () => _useWebWorker; + const setLocationHref = (value2) => { + locationHref = value2; + }; + const getLocationHref = () => locationHref; + const audioControllerFactory = function() { + function AudioController(audioFactory) { + this.audios = []; + this.audioFactory = audioFactory; + this._volume = 1; + this._isMuted = false; + } + AudioController.prototype = { + addAudio: function(audio) { + this.audios.push(audio); + }, + pause: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].pause(); + } + }, + resume: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].resume(); + } + }, + setRate: function(rateValue) { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].setRate(rateValue); + } + }, + createAudio: function(assetPath) { + if (this.audioFactory) { + return this.audioFactory(assetPath); + } + if (window.Howl) { + return new window.Howl({ + src: [assetPath] + }); + } + return { + isPlaying: false, + play: function() { + this.isPlaying = true; + }, + seek: function() { + this.isPlaying = false; + }, + playing: function() { + }, + rate: function() { + }, + setVolume: function() { + } + }; + }, + setAudioFactory: function(audioFactory) { + this.audioFactory = audioFactory; + }, + setVolume: function(value2) { + this._volume = value2; + this._updateVolume(); + }, + mute: function() { + this._isMuted = true; + this._updateVolume(); + }, + unmute: function() { + this._isMuted = false; + this._updateVolume(); + }, + getVolume: function() { + return this._volume; + }, + _updateVolume: function() { + var i; + var len = this.audios.length; + for (i = 0; i < len; i += 1) { + this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); + } + } + }; + return function() { + return new AudioController(); + }; + }(); + const createTypedArray = function() { + function createRegularArray(type, len) { + var i = 0; + var arr = []; + var value2; + switch (type) { + case "int16": + case "uint8c": + value2 = 1; + break; + default: + value2 = 1.1; + break; + } + for (i = 0; i < len; i += 1) { + arr.push(value2); + } + return arr; + } + function createTypedArrayFactory(type, len) { + if (type === "float32") { + return new Float32Array(len); + } + if (type === "int16") { + return new Int16Array(len); + } + if (type === "uint8c") { + return new Uint8ClampedArray(len); + } + return createRegularArray(type, len); + } + if (typeof Uint8ClampedArray === "function" && typeof Float32Array === "function") { + return createTypedArrayFactory; + } + return createRegularArray; + }(); + let subframeEnabled = true; + let expressionsPlugin = null; + let idPrefix$1 = ""; + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + let _shouldRoundValues = false; + const bmPow = Math.pow; + const bmSqrt = Math.sqrt; + const bmFloor = Math.floor; + const bmMax = Math.max; + const bmMin = Math.min; + const BMMath = {}; + (function() { + 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"]; + var i; + var len = propertyNames.length; + for (i = 0; i < len; i += 1) { + BMMath[propertyNames[i]] = Math[propertyNames[i]]; + } + })(); + BMMath.random = Math.random; + BMMath.abs = function(val2) { + var tOfVal = typeof val2; + if (tOfVal === "object" && val2.length) { + var absArr = createSizedArray(val2.length); + var i; + var len = val2.length; + for (i = 0; i < len; i += 1) { + absArr[i] = Math.abs(val2[i]); + } + return absArr; + } + return Math.abs(val2); + }; + let defaultCurveSegments = 150; + const degToRads = Math.PI / 180; + const roundCorner = 0.5519; + const createElementID = /* @__PURE__ */ function() { + var _count = 0; + return function createID() { + _count += 1; + return idPrefix$1 + "__lottie_element_" + _count; + }; + }(); + const rgbToHex = function() { + var colorMap = []; + var i; + var hex; + for (i = 0; i < 256; i += 1) { + hex = i.toString(16); + colorMap[i] = hex.length === 1 ? "0" + hex : hex; + } + return function(r, g2, b3) { + if (r < 0) { + r = 0; + } + if (g2 < 0) { + g2 = 0; + } + if (b3 < 0) { + b3 = 0; + } + return "#" + colorMap[r] + colorMap[g2] + colorMap[b3]; + }; + }(); + const setSubframeEnabled = (flag) => { + subframeEnabled = !!flag; + }; + const getSubframeEnabled = () => subframeEnabled; + const setExpressionsPlugin = (value2) => { + expressionsPlugin = value2; + }; + const getExpressionsPlugin = () => expressionsPlugin; + const setDefaultCurveSegments = (value2) => { + defaultCurveSegments = value2; + }; + const getDefaultCurveSegments = () => defaultCurveSegments; + const setIdPrefix = (value2) => { + idPrefix$1 = value2; + }; + const getIdPrefix = () => idPrefix$1; + const dataManager = /* @__PURE__ */ function() { + var _counterId = 1; + var processes = []; + var workerFn; + var workerInstance; + var workerProxy = { + onmessage: function() { + }, + postMessage: function(path) { + workerFn({ + data: path + }); + } + }; + var _workerSelf = { + postMessage: function(data2) { + workerProxy.onmessage({ + data: data2 + }); + } + }; + function createWorker(fn) { + if (window.Worker && window.Blob && getWebWorker()) { + var blob = new Blob(["var _workerSelf = self; self.onmessage = ", fn.toString()], { type: "text/javascript" }); + var url = URL.createObjectURL(blob); + return new Worker(url); + } + workerFn = fn; + return workerProxy; + } + function setupWorker() { + if (!workerInstance) { + workerInstance = createWorker(function workerStart(e) { + function dataFunctionManager() { + function completeLayers(layers, comps) { + var layerData; + var i; + var len = layers.length; + var j; + var jLen; + var k2; + var kLen; + for (i = 0; i < len; i += 1) { + layerData = layers[i]; + if ("ks" in layerData && !layerData.completed) { + layerData.completed = true; + if (layerData.tt) { + layers[i - 1].td = layerData.tt; + } + if (layerData.hasMask) { + var maskProps = layerData.masksProperties; + jLen = maskProps.length; + for (j = 0; j < jLen; j += 1) { + if (maskProps[j].pt.k.i) { + convertPathsToAbsoluteValues(maskProps[j].pt.k); + } else { + kLen = maskProps[j].pt.k.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (maskProps[j].pt.k[k2].s) { + convertPathsToAbsoluteValues(maskProps[j].pt.k[k2].s[0]); + } + if (maskProps[j].pt.k[k2].e) { + convertPathsToAbsoluteValues(maskProps[j].pt.k[k2].e[0]); + } + } + } + } + } + if (layerData.ty === 0) { + layerData.layers = findCompLayers(layerData.refId, comps); + completeLayers(layerData.layers, comps); + } else if (layerData.ty === 4) { + completeShapes(layerData.shapes); + } else if (layerData.ty === 5) { + completeText(layerData); + } + } + } + } + function completeChars(chars, assets) { + if (chars) { + var i = 0; + var len = chars.length; + for (i = 0; i < len; i += 1) { + if (chars[i].t === 1) { + chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); + completeLayers(chars[i].data.layers, assets); + } + } + } + } + function findComp(id, comps) { + var i = 0; + var len = comps.length; + while (i < len) { + if (comps[i].id === id) { + return comps[i]; + } + i += 1; + } + return null; + } + function findCompLayers(id, comps) { + var comp2 = findComp(id, comps); + if (comp2) { + if (!comp2.layers.__used) { + comp2.layers.__used = true; + return comp2.layers; + } + return JSON.parse(JSON.stringify(comp2.layers)); + } + return null; + } + function completeShapes(arr) { + var i; + var len = arr.length; + var j; + var jLen; + for (i = len - 1; i >= 0; i -= 1) { + if (arr[i].ty === "sh") { + if (arr[i].ks.k.i) { + convertPathsToAbsoluteValues(arr[i].ks.k); + } else { + jLen = arr[i].ks.k.length; + for (j = 0; j < jLen; j += 1) { + if (arr[i].ks.k[j].s) { + convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); + } + if (arr[i].ks.k[j].e) { + convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); + } + } + } + } else if (arr[i].ty === "gr") { + completeShapes(arr[i].it); + } + } + } + function convertPathsToAbsoluteValues(path) { + var i; + var len = path.i.length; + for (i = 0; i < len; i += 1) { + path.i[i][0] += path.v[i][0]; + path.i[i][1] += path.v[i][1]; + path.o[i][0] += path.v[i][0]; + path.o[i][1] += path.v[i][1]; + } + } + function checkVersion(minimum, animVersionString) { + var animVersion = animVersionString ? animVersionString.split(".") : [100, 100, 100]; + if (minimum[0] > animVersion[0]) { + return true; + } + if (animVersion[0] > minimum[0]) { + return false; + } + if (minimum[1] > animVersion[1]) { + return true; + } + if (animVersion[1] > minimum[1]) { + return false; + } + if (minimum[2] > animVersion[2]) { + return true; + } + if (animVersion[2] > minimum[2]) { + return false; + } + return null; + } + var checkText = /* @__PURE__ */ function() { + var minimumVersion = [4, 4, 14]; + function updateTextLayer(textLayer) { + var documentData = textLayer.t.d; + textLayer.t.d = { + k: [ + { + s: documentData, + t: 0 + } + ] + }; + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 5) { + updateTextLayer(layers[i]); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkChars = /* @__PURE__ */ function() { + var minimumVersion = [4, 7, 99]; + return function(animationData2) { + if (animationData2.chars && !checkVersion(minimumVersion, animationData2.v)) { + var i; + var len = animationData2.chars.length; + for (i = 0; i < len; i += 1) { + var charData = animationData2.chars[i]; + if (charData.data && charData.data.shapes) { + completeShapes(charData.data.shapes); + charData.data.ip = 0; + charData.data.op = 99999; + charData.data.st = 0; + charData.data.sr = 1; + charData.data.ks = { + p: { k: [0, 0], a: 0 }, + s: { k: [100, 100], a: 0 }, + a: { k: [0, 0], a: 0 }, + r: { k: 0, a: 0 }, + o: { k: 100, a: 0 } + }; + if (!animationData2.chars[i].t) { + charData.data.shapes.push( + { + ty: "no" + } + ); + charData.data.shapes[0].it.push( + { + p: { k: [0, 0], a: 0 }, + s: { k: [100, 100], a: 0 }, + a: { k: [0, 0], a: 0 }, + r: { k: 0, a: 0 }, + o: { k: 100, a: 0 }, + sk: { k: 0, a: 0 }, + sa: { k: 0, a: 0 }, + ty: "tr" + } + ); + } + } + } + } + }; + }(); + var checkPathProperties = /* @__PURE__ */ function() { + var minimumVersion = [5, 7, 15]; + function updateTextLayer(textLayer) { + var pathData = textLayer.t.p; + if (typeof pathData.a === "number") { + pathData.a = { + a: 0, + k: pathData.a + }; + } + if (typeof pathData.p === "number") { + pathData.p = { + a: 0, + k: pathData.p + }; + } + if (typeof pathData.r === "number") { + pathData.r = { + a: 0, + k: pathData.r + }; + } + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 5) { + updateTextLayer(layers[i]); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkColors = /* @__PURE__ */ function() { + var minimumVersion = [4, 1, 9]; + function iterateShapes(shapes) { + var i; + var len = shapes.length; + var j; + var jLen; + for (i = 0; i < len; i += 1) { + if (shapes[i].ty === "gr") { + iterateShapes(shapes[i].it); + } else if (shapes[i].ty === "fl" || shapes[i].ty === "st") { + if (shapes[i].c.k && shapes[i].c.k[0].i) { + jLen = shapes[i].c.k.length; + for (j = 0; j < jLen; j += 1) { + if (shapes[i].c.k[j].s) { + shapes[i].c.k[j].s[0] /= 255; + shapes[i].c.k[j].s[1] /= 255; + shapes[i].c.k[j].s[2] /= 255; + shapes[i].c.k[j].s[3] /= 255; + } + if (shapes[i].c.k[j].e) { + shapes[i].c.k[j].e[0] /= 255; + shapes[i].c.k[j].e[1] /= 255; + shapes[i].c.k[j].e[2] /= 255; + shapes[i].c.k[j].e[3] /= 255; + } + } + } else { + shapes[i].c.k[0] /= 255; + shapes[i].c.k[1] /= 255; + shapes[i].c.k[2] /= 255; + shapes[i].c.k[3] /= 255; + } + } + } + } + function iterateLayers(layers) { + var i; + var len = layers.length; + for (i = 0; i < len; i += 1) { + if (layers[i].ty === 4) { + iterateShapes(layers[i].shapes); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + var checkShapes = /* @__PURE__ */ function() { + var minimumVersion = [4, 4, 18]; + function completeClosingShapes(arr) { + var i; + var len = arr.length; + var j; + var jLen; + for (i = len - 1; i >= 0; i -= 1) { + if (arr[i].ty === "sh") { + if (arr[i].ks.k.i) { + arr[i].ks.k.c = arr[i].closed; + } else { + jLen = arr[i].ks.k.length; + for (j = 0; j < jLen; j += 1) { + if (arr[i].ks.k[j].s) { + arr[i].ks.k[j].s[0].c = arr[i].closed; + } + if (arr[i].ks.k[j].e) { + arr[i].ks.k[j].e[0].c = arr[i].closed; + } + } + } + } else if (arr[i].ty === "gr") { + completeClosingShapes(arr[i].it); + } + } + } + function iterateLayers(layers) { + var layerData; + var i; + var len = layers.length; + var j; + var jLen; + var k2; + var kLen; + for (i = 0; i < len; i += 1) { + layerData = layers[i]; + if (layerData.hasMask) { + var maskProps = layerData.masksProperties; + jLen = maskProps.length; + for (j = 0; j < jLen; j += 1) { + if (maskProps[j].pt.k.i) { + maskProps[j].pt.k.c = maskProps[j].cl; + } else { + kLen = maskProps[j].pt.k.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (maskProps[j].pt.k[k2].s) { + maskProps[j].pt.k[k2].s[0].c = maskProps[j].cl; + } + if (maskProps[j].pt.k[k2].e) { + maskProps[j].pt.k[k2].e[0].c = maskProps[j].cl; + } + } + } + } + } + if (layerData.ty === 4) { + completeClosingShapes(layerData.shapes); + } + } + } + return function(animationData2) { + if (checkVersion(minimumVersion, animationData2.v)) { + iterateLayers(animationData2.layers); + if (animationData2.assets) { + var i; + var len = animationData2.assets.length; + for (i = 0; i < len; i += 1) { + if (animationData2.assets[i].layers) { + iterateLayers(animationData2.assets[i].layers); + } + } + } + } + }; + }(); + function completeData(animationData2) { + if (animationData2.__complete) { + return; + } + checkColors(animationData2); + checkText(animationData2); + checkChars(animationData2); + checkPathProperties(animationData2); + checkShapes(animationData2); + completeLayers(animationData2.layers, animationData2.assets); + completeChars(animationData2.chars, animationData2.assets); + animationData2.__complete = true; + } + function completeText(data2) { + if (data2.t.a.length === 0 && !("m" in data2.t.p)) { + } + } + var moduleOb = {}; + moduleOb.completeData = completeData; + moduleOb.checkColors = checkColors; + moduleOb.checkChars = checkChars; + moduleOb.checkPathProperties = checkPathProperties; + moduleOb.checkShapes = checkShapes; + moduleOb.completeLayers = completeLayers; + return moduleOb; + } + if (!_workerSelf.dataManager) { + _workerSelf.dataManager = dataFunctionManager(); + } + if (!_workerSelf.assetLoader) { + _workerSelf.assetLoader = /* @__PURE__ */ function() { + function formatResponse(xhr) { + var contentTypeHeader = xhr.getResponseHeader("content-type"); + if (contentTypeHeader && xhr.responseType === "json" && contentTypeHeader.indexOf("json") !== -1) { + return xhr.response; + } + if (xhr.response && typeof xhr.response === "object") { + return xhr.response; + } + if (xhr.response && typeof xhr.response === "string") { + return JSON.parse(xhr.response); + } + if (xhr.responseText) { + return JSON.parse(xhr.responseText); + } + return null; + } + function loadAsset(path, fullPath, callback, errorCallback) { + var response; + var xhr = new XMLHttpRequest(); + try { + xhr.responseType = "json"; + } catch (err2) { + } + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + response = formatResponse(xhr); + callback(response); + } else { + try { + response = formatResponse(xhr); + callback(response); + } catch (err2) { + if (errorCallback) { + errorCallback(err2); + } + } + } + } + }; + try { + xhr.open("GET", path, true); + } catch (error) { + xhr.open("GET", fullPath + "/" + path, true); + } + xhr.send(); + } + return { + load: loadAsset + }; + }(); + } + if (e.data.type === "loadAnimation") { + _workerSelf.assetLoader.load( + e.data.path, + e.data.fullPath, + function(data2) { + _workerSelf.dataManager.completeData(data2); + _workerSelf.postMessage({ + id: e.data.id, + payload: data2, + status: "success" + }); + }, + function() { + _workerSelf.postMessage({ + id: e.data.id, + status: "error" + }); + } + ); + } else if (e.data.type === "complete") { + var animation = e.data.animation; + _workerSelf.dataManager.completeData(animation); + _workerSelf.postMessage({ + id: e.data.id, + payload: animation, + status: "success" + }); + } else if (e.data.type === "loadData") { + _workerSelf.assetLoader.load( + e.data.path, + e.data.fullPath, + function(data2) { + _workerSelf.postMessage({ + id: e.data.id, + payload: data2, + status: "success" + }); + }, + function() { + _workerSelf.postMessage({ + id: e.data.id, + status: "error" + }); + } + ); + } + }); + workerInstance.onmessage = function(event) { + var data2 = event.data; + var id = data2.id; + var process = processes[id]; + processes[id] = null; + if (data2.status === "success") { + process.onComplete(data2.payload); + } else if (process.onError) { + process.onError(); + } + }; + } + } + function createProcess(onComplete, onError) { + _counterId += 1; + var id = "processId_" + _counterId; + processes[id] = { + onComplete, + onError + }; + return id; + } + function loadAnimation2(path, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "loadAnimation", + path, + fullPath: window.location.origin + window.location.pathname, + id: processId + }); + } + function loadData(path, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "loadData", + path, + fullPath: window.location.origin + window.location.pathname, + id: processId + }); + } + function completeAnimation(anim, onComplete, onError) { + setupWorker(); + var processId = createProcess(onComplete, onError); + workerInstance.postMessage({ + type: "complete", + animation: anim, + id: processId + }); + } + return { + loadAnimation: loadAnimation2, + loadData, + completeAnimation + }; + }(); + const ImagePreloader = function() { + var proxyImage = function() { + var canvas = createTag("canvas"); + canvas.width = 1; + canvas.height = 1; + var ctx = canvas.getContext("2d"); + ctx.fillStyle = "rgba(0,0,0,0)"; + ctx.fillRect(0, 0, 1, 1); + return canvas; + }(); + function imageLoaded() { + this.loadedAssets += 1; + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { + if (this.imagesLoadedCb) { + this.imagesLoadedCb(null); + } + } + } + function footageLoaded() { + this.loadedFootagesCount += 1; + if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { + if (this.imagesLoadedCb) { + this.imagesLoadedCb(null); + } + } + } + function getAssetsPath(assetData, assetsPath, originalPath) { + var path = ""; + if (assetData.e) { + path = assetData.p; + } else if (assetsPath) { + var imagePath = assetData.p; + if (imagePath.indexOf("images/") !== -1) { + imagePath = imagePath.split("/")[1]; + } + path = assetsPath + imagePath; + } else { + path = originalPath; + path += assetData.u ? assetData.u : ""; + path += assetData.p; + } + return path; + } + function testImageLoaded(img) { + var _count = 0; + var intervalId = setInterval((function() { + var box = img.getBBox(); + if (box.width || _count > 500) { + this._imageLoaded(); + clearInterval(intervalId); + } + _count += 1; + }).bind(this), 50); + } + function createImageData(assetData) { + var path = getAssetsPath(assetData, this.assetsPath, this.path); + var img = createNS("image"); + if (isSafari) { + this.testImageLoaded(img); + } else { + img.addEventListener("load", this._imageLoaded, false); + } + img.addEventListener("error", (function() { + ob2.img = proxyImage; + this._imageLoaded(); + }).bind(this), false); + img.setAttributeNS("http://www.w3.org/1999/xlink", "href", path); + if (this._elementHelper.append) { + this._elementHelper.append(img); + } else { + this._elementHelper.appendChild(img); + } + var ob2 = { + img, + assetData + }; + return ob2; + } + function createImgData(assetData) { + var path = getAssetsPath(assetData, this.assetsPath, this.path); + var img = createTag("img"); + img.crossOrigin = "anonymous"; + img.addEventListener("load", this._imageLoaded, false); + img.addEventListener("error", (function() { + ob2.img = proxyImage; + this._imageLoaded(); + }).bind(this), false); + img.src = path; + var ob2 = { + img, + assetData + }; + return ob2; + } + function createFootageData(data2) { + var ob2 = { + assetData: data2 + }; + var path = getAssetsPath(data2, this.assetsPath, this.path); + dataManager.loadData(path, (function(footageData) { + ob2.img = footageData; + this._footageLoaded(); + }).bind(this), (function() { + ob2.img = {}; + this._footageLoaded(); + }).bind(this)); + return ob2; + } + function loadAssets(assets, cb) { + this.imagesLoadedCb = cb; + var i; + var len = assets.length; + for (i = 0; i < len; i += 1) { + if (!assets[i].layers) { + if (!assets[i].t || assets[i].t === "seq") { + this.totalImages += 1; + this.images.push(this._createImageData(assets[i])); + } else if (assets[i].t === 3) { + this.totalFootages += 1; + this.images.push(this.createFootageData(assets[i])); + } + } + } + } + function setPath(path) { + this.path = path || ""; + } + function setAssetsPath(path) { + this.assetsPath = path || ""; + } + function getAsset(assetData) { + var i = 0; + var len = this.images.length; + while (i < len) { + if (this.images[i].assetData === assetData) { + return this.images[i].img; + } + i += 1; + } + return null; + } + function destroy() { + this.imagesLoadedCb = null; + this.images.length = 0; + } + function loadedImages() { + return this.totalImages === this.loadedAssets; + } + function loadedFootages() { + return this.totalFootages === this.loadedFootagesCount; + } + function setCacheType(type, elementHelper) { + if (type === "svg") { + this._elementHelper = elementHelper; + this._createImageData = this.createImageData.bind(this); + } else { + this._createImageData = this.createImgData.bind(this); + } + } + function ImagePreloaderFactory() { + this._imageLoaded = imageLoaded.bind(this); + this._footageLoaded = footageLoaded.bind(this); + this.testImageLoaded = testImageLoaded.bind(this); + this.createFootageData = createFootageData.bind(this); + this.assetsPath = ""; + this.path = ""; + this.totalImages = 0; + this.totalFootages = 0; + this.loadedAssets = 0; + this.loadedFootagesCount = 0; + this.imagesLoadedCb = null; + this.images = []; + } + ImagePreloaderFactory.prototype = { + loadAssets, + setAssetsPath, + setPath, + loadedImages, + loadedFootages, + destroy, + getAsset, + createImgData, + createImageData, + imageLoaded, + footageLoaded, + setCacheType + }; + return ImagePreloaderFactory; + }(); + BaseEvent.prototype = { + triggerEvent: function(eventName, args) { + if (this._cbs[eventName]) { + var callbacks = this._cbs[eventName]; + for (var i = 0; i < callbacks.length; i += 1) { + callbacks[i](args); + } + } + }, + addEventListener: function(eventName, callback) { + if (!this._cbs[eventName]) { + this._cbs[eventName] = []; + } + this._cbs[eventName].push(callback); + return (function() { + this.removeEventListener(eventName, callback); + }).bind(this); + }, + removeEventListener: function(eventName, callback) { + if (!callback) { + this._cbs[eventName] = null; + } else if (this._cbs[eventName]) { + var i = 0; + var len = this._cbs[eventName].length; + while (i < len) { + if (this._cbs[eventName][i] === callback) { + this._cbs[eventName].splice(i, 1); + i -= 1; + len -= 1; + } + i += 1; + } + if (!this._cbs[eventName].length) { + this._cbs[eventName] = null; + } + } + } + }; + const markerParser = /* @__PURE__ */ function() { + function parsePayloadLines(payload) { + var lines = payload.split("\r\n"); + var keys2 = {}; + var line2; + var keysCount = 0; + for (var i = 0; i < lines.length; i += 1) { + line2 = lines[i].split(":"); + if (line2.length === 2) { + keys2[line2[0]] = line2[1].trim(); + keysCount += 1; + } + } + if (keysCount === 0) { + throw new Error(); + } + return keys2; + } + return function(_markers) { + var markers = []; + for (var i = 0; i < _markers.length; i += 1) { + var _marker = _markers[i]; + var markerData = { + time: _marker.tm, + duration: _marker.dr + }; + try { + markerData.payload = JSON.parse(_markers[i].cm); + } catch (_) { + try { + markerData.payload = parsePayloadLines(_markers[i].cm); + } catch (__) { + markerData.payload = { + name: _markers[i].cm + }; + } + } + markers.push(markerData); + } + return markers; + }; + }(); + const ProjectInterface = /* @__PURE__ */ function() { + function registerComposition(comp2) { + this.compositions.push(comp2); + } + return function() { + function _thisProjectFunction(name2) { + var i = 0; + var len = this.compositions.length; + while (i < len) { + if (this.compositions[i].data && this.compositions[i].data.nm === name2) { + if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) { + this.compositions[i].prepareFrame(this.currentFrame); + } + return this.compositions[i].compInterface; + } + i += 1; + } + return null; + } + _thisProjectFunction.compositions = []; + _thisProjectFunction.currentFrame = 0; + _thisProjectFunction.registerComposition = registerComposition; + return _thisProjectFunction; + }; + }(); + const renderers = {}; + const registerRenderer = (key2, value2) => { + renderers[key2] = value2; + }; + const AnimationItem = function() { + this._cbs = []; + this.name = ""; + this.path = ""; + this.isLoaded = false; + this.currentFrame = 0; + this.currentRawFrame = 0; + this.firstFrame = 0; + this.totalFrames = 0; + this.frameRate = 0; + this.frameMult = 0; + this.playSpeed = 1; + this.playDirection = 1; + this.playCount = 0; + this.animationData = {}; + this.assets = []; + this.isPaused = true; + this.autoplay = false; + this.loop = true; + this.renderer = null; + this.animationID = createElementID(); + this.assetsPath = ""; + this.timeCompleted = 0; + this.segmentPos = 0; + this.isSubframeEnabled = getSubframeEnabled(); + this.segments = []; + this._idle = true; + this._completedLoop = false; + this.projectInterface = ProjectInterface(); + this.imagePreloader = new ImagePreloader(); + this.audioController = audioControllerFactory(); + this.markers = []; + this.configAnimation = this.configAnimation.bind(this); + this.onSetupError = this.onSetupError.bind(this); + this.onSegmentComplete = this.onSegmentComplete.bind(this); + this.drawnFrameEvent = new BMEnterFrameEvent("drawnFrame", 0, 0, 0); + }; + extendPrototype([BaseEvent], AnimationItem); + AnimationItem.prototype.setParams = function(params) { + if (params.wrapper || params.container) { + this.wrapper = params.wrapper || params.container; + } + var animType = "svg"; + if (params.animType) { + animType = params.animType; + } else if (params.renderer) { + animType = params.renderer; + } + const RendererClass = getRenderer(animType); + this.renderer = new RendererClass(this, params.rendererSettings); + this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); + this.renderer.setProjectInterface(this.projectInterface); + this.animType = animType; + if (params.loop === "" || params.loop === null || params.loop === void 0 || params.loop === true) { + this.loop = true; + } else if (params.loop === false) { + this.loop = false; + } else { + this.loop = parseInt(params.loop, 10); + } + this.autoplay = "autoplay" in params ? params.autoplay : true; + this.name = params.name ? params.name : ""; + this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, "autoloadSegments") ? params.autoloadSegments : true; + this.assetsPath = params.assetsPath; + this.initialSegment = params.initialSegment; + if (params.audioFactory) { + this.audioController.setAudioFactory(params.audioFactory); + } + if (params.animationData) { + this.setupAnimation(params.animationData); + } else if (params.path) { + if (params.path.lastIndexOf("\\") !== -1) { + this.path = params.path.substr(0, params.path.lastIndexOf("\\") + 1); + } else { + this.path = params.path.substr(0, params.path.lastIndexOf("/") + 1); + } + this.fileName = params.path.substr(params.path.lastIndexOf("/") + 1); + this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf(".json")); + dataManager.loadAnimation( + params.path, + this.configAnimation, + this.onSetupError + ); + } + }; + AnimationItem.prototype.onSetupError = function() { + this.trigger("data_failed"); + }; + AnimationItem.prototype.setupAnimation = function(data2) { + dataManager.completeAnimation( + data2, + this.configAnimation + ); + }; + AnimationItem.prototype.setData = function(wrapper, animationData2) { + if (animationData2) { + if (typeof animationData2 !== "object") { + animationData2 = JSON.parse(animationData2); + } + } + var params = { + wrapper, + animationData: animationData2 + }; + var wrapperAttributes = wrapper.attributes; + params.path = wrapperAttributes.getNamedItem("data-animation-path") ? wrapperAttributes.getNamedItem("data-animation-path").value : wrapperAttributes.getNamedItem("data-bm-path") ? wrapperAttributes.getNamedItem("data-bm-path").value : wrapperAttributes.getNamedItem("bm-path") ? wrapperAttributes.getNamedItem("bm-path").value : ""; + params.animType = wrapperAttributes.getNamedItem("data-anim-type") ? wrapperAttributes.getNamedItem("data-anim-type").value : wrapperAttributes.getNamedItem("data-bm-type") ? wrapperAttributes.getNamedItem("data-bm-type").value : wrapperAttributes.getNamedItem("bm-type") ? wrapperAttributes.getNamedItem("bm-type").value : wrapperAttributes.getNamedItem("data-bm-renderer") ? wrapperAttributes.getNamedItem("data-bm-renderer").value : wrapperAttributes.getNamedItem("bm-renderer") ? wrapperAttributes.getNamedItem("bm-renderer").value : "canvas"; + var loop = wrapperAttributes.getNamedItem("data-anim-loop") ? wrapperAttributes.getNamedItem("data-anim-loop").value : wrapperAttributes.getNamedItem("data-bm-loop") ? wrapperAttributes.getNamedItem("data-bm-loop").value : wrapperAttributes.getNamedItem("bm-loop") ? wrapperAttributes.getNamedItem("bm-loop").value : ""; + if (loop === "false") { + params.loop = false; + } else if (loop === "true") { + params.loop = true; + } else if (loop !== "") { + params.loop = parseInt(loop, 10); + } + var autoplay = wrapperAttributes.getNamedItem("data-anim-autoplay") ? wrapperAttributes.getNamedItem("data-anim-autoplay").value : wrapperAttributes.getNamedItem("data-bm-autoplay") ? wrapperAttributes.getNamedItem("data-bm-autoplay").value : wrapperAttributes.getNamedItem("bm-autoplay") ? wrapperAttributes.getNamedItem("bm-autoplay").value : true; + params.autoplay = autoplay !== "false"; + params.name = wrapperAttributes.getNamedItem("data-name") ? wrapperAttributes.getNamedItem("data-name").value : wrapperAttributes.getNamedItem("data-bm-name") ? wrapperAttributes.getNamedItem("data-bm-name").value : wrapperAttributes.getNamedItem("bm-name") ? wrapperAttributes.getNamedItem("bm-name").value : ""; + var prerender = wrapperAttributes.getNamedItem("data-anim-prerender") ? wrapperAttributes.getNamedItem("data-anim-prerender").value : wrapperAttributes.getNamedItem("data-bm-prerender") ? wrapperAttributes.getNamedItem("data-bm-prerender").value : wrapperAttributes.getNamedItem("bm-prerender") ? wrapperAttributes.getNamedItem("bm-prerender").value : ""; + if (prerender === "false") { + params.prerender = false; + } + this.setParams(params); + }; + AnimationItem.prototype.includeLayers = function(data2) { + if (data2.op > this.animationData.op) { + this.animationData.op = data2.op; + this.totalFrames = Math.floor(data2.op - this.animationData.ip); + } + var layers = this.animationData.layers; + var i; + var len = layers.length; + var newLayers = data2.layers; + var j; + var jLen = newLayers.length; + for (j = 0; j < jLen; j += 1) { + i = 0; + while (i < len) { + if (layers[i].id === newLayers[j].id) { + layers[i] = newLayers[j]; + break; + } + i += 1; + } + } + if (data2.chars || data2.fonts) { + this.renderer.globalData.fontManager.addChars(data2.chars); + this.renderer.globalData.fontManager.addFonts(data2.fonts, this.renderer.globalData.defs); + } + if (data2.assets) { + len = data2.assets.length; + for (i = 0; i < len; i += 1) { + this.animationData.assets.push(data2.assets[i]); + } + } + this.animationData.__complete = false; + dataManager.completeAnimation( + this.animationData, + this.onSegmentComplete + ); + }; + AnimationItem.prototype.onSegmentComplete = function(data2) { + this.animationData = data2; + var expressionsPlugin2 = getExpressionsPlugin(); + if (expressionsPlugin2) { + expressionsPlugin2.initExpressions(this); + } + this.loadNextSegment(); + }; + AnimationItem.prototype.loadNextSegment = function() { + var segments = this.animationData.segments; + if (!segments || segments.length === 0 || !this.autoloadSegments) { + this.trigger("data_ready"); + this.timeCompleted = this.totalFrames; + return; + } + var segment = segments.shift(); + this.timeCompleted = segment.time * this.frameRate; + var segmentPath = this.path + this.fileName + "_" + this.segmentPos + ".json"; + this.segmentPos += 1; + dataManager.loadData(segmentPath, this.includeLayers.bind(this), (function() { + this.trigger("data_failed"); + }).bind(this)); + }; + AnimationItem.prototype.loadSegments = function() { + var segments = this.animationData.segments; + if (!segments) { + this.timeCompleted = this.totalFrames; + } + this.loadNextSegment(); + }; + AnimationItem.prototype.imagesLoaded = function() { + this.trigger("loaded_images"); + this.checkLoaded(); + }; + AnimationItem.prototype.preloadImages = function() { + this.imagePreloader.setAssetsPath(this.assetsPath); + this.imagePreloader.setPath(this.path); + this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); + }; + AnimationItem.prototype.configAnimation = function(animData) { + if (!this.renderer) { + return; + } + try { + this.animationData = animData; + if (this.initialSegment) { + this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); + this.firstFrame = Math.round(this.initialSegment[0]); + } else { + this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); + this.firstFrame = Math.round(this.animationData.ip); + } + this.renderer.configAnimation(animData); + if (!animData.assets) { + animData.assets = []; + } + this.assets = this.animationData.assets; + this.frameRate = this.animationData.fr; + this.frameMult = this.animationData.fr / 1e3; + this.renderer.searchExtraCompositions(animData.assets); + this.markers = markerParser(animData.markers || []); + this.trigger("config_ready"); + this.preloadImages(); + this.loadSegments(); + this.updaFrameModifier(); + this.waitForFontsLoaded(); + if (this.isPaused) { + this.audioController.pause(); + } + } catch (error) { + this.triggerConfigError(error); + } + }; + AnimationItem.prototype.waitForFontsLoaded = function() { + if (!this.renderer) { + return; + } + if (this.renderer.globalData.fontManager.isLoaded) { + this.checkLoaded(); + } else { + setTimeout(this.waitForFontsLoaded.bind(this), 20); + } + }; + AnimationItem.prototype.checkLoaded = function() { + if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== "canvas") && this.imagePreloader.loadedFootages()) { + this.isLoaded = true; + var expressionsPlugin2 = getExpressionsPlugin(); + if (expressionsPlugin2) { + expressionsPlugin2.initExpressions(this); + } + this.renderer.initItems(); + setTimeout((function() { + this.trigger("DOMLoaded"); + }).bind(this), 0); + this.gotoFrame(); + if (this.autoplay) { + this.play(); + } + } + }; + AnimationItem.prototype.resize = function() { + this.renderer.updateContainerSize(); + }; + AnimationItem.prototype.setSubframe = function(flag) { + this.isSubframeEnabled = !!flag; + }; + AnimationItem.prototype.gotoFrame = function() { + this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; + if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) { + this.currentFrame = this.timeCompleted; + } + this.trigger("enterFrame"); + this.renderFrame(); + this.trigger("drawnFrame"); + }; + AnimationItem.prototype.renderFrame = function() { + if (this.isLoaded === false || !this.renderer) { + return; + } + try { + this.renderer.renderFrame(this.currentFrame + this.firstFrame); + } catch (error) { + this.triggerRenderFrameError(error); + } + }; + AnimationItem.prototype.play = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === true) { + this.isPaused = false; + this.trigger("_pause"); + this.audioController.resume(); + if (this._idle) { + this._idle = false; + this.trigger("_active"); + } + } + }; + AnimationItem.prototype.pause = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === false) { + this.isPaused = true; + this.trigger("_play"); + this._idle = true; + this.trigger("_idle"); + this.audioController.pause(); + } + }; + AnimationItem.prototype.togglePause = function(name2) { + if (name2 && this.name !== name2) { + return; + } + if (this.isPaused === true) { + this.play(); + } else { + this.pause(); + } + }; + AnimationItem.prototype.stop = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.pause(); + this.playCount = 0; + this._completedLoop = false; + this.setCurrentRawFrameValue(0); + }; + AnimationItem.prototype.getMarkerData = function(markerName) { + var marker; + for (var i = 0; i < this.markers.length; i += 1) { + marker = this.markers[i]; + if (marker.payload && marker.payload.name === markerName) { + return marker; + } + } + return null; + }; + AnimationItem.prototype.goToAndStop = function(value2, isFrame, name2) { + if (name2 && this.name !== name2) { + return; + } + var numValue = Number(value2); + if (isNaN(numValue)) { + var marker = this.getMarkerData(value2); + if (marker) { + this.goToAndStop(marker.time, true); + } + } else if (isFrame) { + this.setCurrentRawFrameValue(value2); + } else { + this.setCurrentRawFrameValue(value2 * this.frameModifier); + } + this.pause(); + }; + AnimationItem.prototype.goToAndPlay = function(value2, isFrame, name2) { + if (name2 && this.name !== name2) { + return; + } + var numValue = Number(value2); + if (isNaN(numValue)) { + var marker = this.getMarkerData(value2); + if (marker) { + if (!marker.duration) { + this.goToAndStop(marker.time, true); + } else { + this.playSegments([marker.time, marker.time + marker.duration], true); + } + } + } else { + this.goToAndStop(numValue, isFrame, name2); + } + this.play(); + }; + AnimationItem.prototype.advanceTime = function(value2) { + if (this.isPaused === true || this.isLoaded === false) { + return; + } + var nextValue = this.currentRawFrame + value2 * this.frameModifier; + var _isComplete = false; + if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) { + if (!this.loop || this.playCount === this.loop) { + if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { + _isComplete = true; + nextValue = this.totalFrames - 1; + } + } else if (nextValue >= this.totalFrames) { + this.playCount += 1; + if (!this.checkSegments(nextValue % this.totalFrames)) { + this.setCurrentRawFrameValue(nextValue % this.totalFrames); + this._completedLoop = true; + this.trigger("loopComplete"); + } + } else { + this.setCurrentRawFrameValue(nextValue); + } + } else if (nextValue < 0) { + if (!this.checkSegments(nextValue % this.totalFrames)) { + if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { + this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); + if (!this._completedLoop) { + this._completedLoop = true; + } else { + this.trigger("loopComplete"); + } + } else { + _isComplete = true; + nextValue = 0; + } + } + } else { + this.setCurrentRawFrameValue(nextValue); + } + if (_isComplete) { + this.setCurrentRawFrameValue(nextValue); + this.pause(); + this.trigger("complete"); + } + }; + AnimationItem.prototype.adjustSegment = function(arr, offset) { + this.playCount = 0; + if (arr[1] < arr[0]) { + if (this.frameModifier > 0) { + if (this.playSpeed < 0) { + this.setSpeed(-this.playSpeed); + } else { + this.setDirection(-1); + } + } + this.totalFrames = arr[0] - arr[1]; + this.timeCompleted = this.totalFrames; + this.firstFrame = arr[1]; + this.setCurrentRawFrameValue(this.totalFrames - 1e-3 - offset); + } else if (arr[1] > arr[0]) { + if (this.frameModifier < 0) { + if (this.playSpeed < 0) { + this.setSpeed(-this.playSpeed); + } else { + this.setDirection(1); + } + } + this.totalFrames = arr[1] - arr[0]; + this.timeCompleted = this.totalFrames; + this.firstFrame = arr[0]; + this.setCurrentRawFrameValue(1e-3 + offset); + } + this.trigger("segmentStart"); + }; + AnimationItem.prototype.setSegment = function(init, end) { + var pendingFrame = -1; + if (this.isPaused) { + if (this.currentRawFrame + this.firstFrame < init) { + pendingFrame = init; + } else if (this.currentRawFrame + this.firstFrame > end) { + pendingFrame = end - init; + } + } + this.firstFrame = init; + this.totalFrames = end - init; + this.timeCompleted = this.totalFrames; + if (pendingFrame !== -1) { + this.goToAndStop(pendingFrame, true); + } + }; + AnimationItem.prototype.playSegments = function(arr, forceFlag) { + if (forceFlag) { + this.segments.length = 0; + } + if (typeof arr[0] === "object") { + var i; + var len = arr.length; + for (i = 0; i < len; i += 1) { + this.segments.push(arr[i]); + } + } else { + this.segments.push(arr); + } + if (this.segments.length && forceFlag) { + this.adjustSegment(this.segments.shift(), 0); + } + if (this.isPaused) { + this.play(); + } + }; + AnimationItem.prototype.resetSegments = function(forceFlag) { + this.segments.length = 0; + this.segments.push([this.animationData.ip, this.animationData.op]); + if (forceFlag) { + this.checkSegments(0); + } + }; + AnimationItem.prototype.checkSegments = function(offset) { + if (this.segments.length) { + this.adjustSegment(this.segments.shift(), offset); + return true; + } + return false; + }; + AnimationItem.prototype.destroy = function(name2) { + if (name2 && this.name !== name2 || !this.renderer) { + return; + } + this.renderer.destroy(); + this.imagePreloader.destroy(); + this.trigger("destroy"); + this._cbs = null; + this.onEnterFrame = null; + this.onLoopComplete = null; + this.onComplete = null; + this.onSegmentStart = null; + this.onDestroy = null; + this.renderer = null; + this.renderer = null; + this.imagePreloader = null; + this.projectInterface = null; + }; + AnimationItem.prototype.setCurrentRawFrameValue = function(value2) { + this.currentRawFrame = value2; + this.gotoFrame(); + }; + AnimationItem.prototype.setSpeed = function(val2) { + this.playSpeed = val2; + this.updaFrameModifier(); + }; + AnimationItem.prototype.setDirection = function(val2) { + this.playDirection = val2 < 0 ? -1 : 1; + this.updaFrameModifier(); + }; + AnimationItem.prototype.setVolume = function(val2, name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.setVolume(val2); + }; + AnimationItem.prototype.getVolume = function() { + return this.audioController.getVolume(); + }; + AnimationItem.prototype.mute = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.mute(); + }; + AnimationItem.prototype.unmute = function(name2) { + if (name2 && this.name !== name2) { + return; + } + this.audioController.unmute(); + }; + AnimationItem.prototype.updaFrameModifier = function() { + this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; + this.audioController.setRate(this.playSpeed * this.playDirection); + }; + AnimationItem.prototype.getPath = function() { + return this.path; + }; + AnimationItem.prototype.getAssetsPath = function(assetData) { + var path = ""; + if (assetData.e) { + path = assetData.p; + } else if (this.assetsPath) { + var imagePath = assetData.p; + if (imagePath.indexOf("images/") !== -1) { + imagePath = imagePath.split("/")[1]; + } + path = this.assetsPath + imagePath; + } else { + path = this.path; + path += assetData.u ? assetData.u : ""; + path += assetData.p; + } + return path; + }; + AnimationItem.prototype.getAssetData = function(id) { + var i = 0; + var len = this.assets.length; + while (i < len) { + if (id === this.assets[i].id) { + return this.assets[i]; + } + i += 1; + } + return null; + }; + AnimationItem.prototype.hide = function() { + this.renderer.hide(); + }; + AnimationItem.prototype.show = function() { + this.renderer.show(); + }; + AnimationItem.prototype.getDuration = function(isFrame) { + return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; + }; + AnimationItem.prototype.updateDocumentData = function(path, documentData, index2) { + try { + var element = this.renderer.getElementByPath(path); + element.updateDocumentData(documentData, index2); + } catch (error) { + } + }; + AnimationItem.prototype.trigger = function(name2) { + if (this._cbs && this._cbs[name2]) { + switch (name2) { + case "enterFrame": + this.triggerEvent(name2, new BMEnterFrameEvent(name2, this.currentFrame, this.totalFrames, this.frameModifier)); + break; + case "drawnFrame": + this.drawnFrameEvent.currentTime = this.currentFrame; + this.drawnFrameEvent.totalTime = this.totalFrames; + this.drawnFrameEvent.direction = this.frameModifier; + this.triggerEvent(name2, this.drawnFrameEvent); + break; + case "loopComplete": + this.triggerEvent(name2, new BMCompleteLoopEvent(name2, this.loop, this.playCount, this.frameMult)); + break; + case "complete": + this.triggerEvent(name2, new BMCompleteEvent(name2, this.frameMult)); + break; + case "segmentStart": + this.triggerEvent(name2, new BMSegmentStartEvent(name2, this.firstFrame, this.totalFrames)); + break; + case "destroy": + this.triggerEvent(name2, new BMDestroyEvent(name2, this)); + break; + default: + this.triggerEvent(name2); + } + } + if (name2 === "enterFrame" && this.onEnterFrame) { + this.onEnterFrame.call(this, new BMEnterFrameEvent(name2, this.currentFrame, this.totalFrames, this.frameMult)); + } + if (name2 === "loopComplete" && this.onLoopComplete) { + this.onLoopComplete.call(this, new BMCompleteLoopEvent(name2, this.loop, this.playCount, this.frameMult)); + } + if (name2 === "complete" && this.onComplete) { + this.onComplete.call(this, new BMCompleteEvent(name2, this.frameMult)); + } + if (name2 === "segmentStart" && this.onSegmentStart) { + this.onSegmentStart.call(this, new BMSegmentStartEvent(name2, this.firstFrame, this.totalFrames)); + } + if (name2 === "destroy" && this.onDestroy) { + this.onDestroy.call(this, new BMDestroyEvent(name2, this)); + } + }; + AnimationItem.prototype.triggerRenderFrameError = function(nativeError) { + var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); + this.triggerEvent("error", error); + if (this.onError) { + this.onError.call(this, error); + } + }; + AnimationItem.prototype.triggerConfigError = function(nativeError) { + var error = new BMConfigErrorEvent(nativeError, this.currentFrame); + this.triggerEvent("error", error); + if (this.onError) { + this.onError.call(this, error); + } + }; + const animationManager = function() { + var moduleOb = {}; + var registeredAnimations = []; + var initTime = 0; + var len = 0; + var playingAnimationsNum = 0; + var _stopped = true; + var _isFrozen = false; + function removeElement(ev) { + var i = 0; + var animItem = ev.target; + while (i < len) { + if (registeredAnimations[i].animation === animItem) { + registeredAnimations.splice(i, 1); + i -= 1; + len -= 1; + if (!animItem.isPaused) { + subtractPlayingCount(); + } + } + i += 1; + } + } + function registerAnimation(element, animationData2) { + if (!element) { + return null; + } + var i = 0; + while (i < len) { + if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) { + return registeredAnimations[i].animation; + } + i += 1; + } + var animItem = new AnimationItem(); + setupAnimation(animItem, element); + animItem.setData(element, animationData2); + return animItem; + } + function getRegisteredAnimations() { + var i; + var lenAnims = registeredAnimations.length; + var animations = []; + for (i = 0; i < lenAnims; i += 1) { + animations.push(registeredAnimations[i].animation); + } + return animations; + } + function addPlayingCount() { + playingAnimationsNum += 1; + activate(); + } + function subtractPlayingCount() { + playingAnimationsNum -= 1; + } + function setupAnimation(animItem, element) { + animItem.addEventListener("destroy", removeElement); + animItem.addEventListener("_active", addPlayingCount); + animItem.addEventListener("_idle", subtractPlayingCount); + registeredAnimations.push({ elem: element, animation: animItem }); + len += 1; + } + function loadAnimation2(params) { + var animItem = new AnimationItem(); + setupAnimation(animItem, null); + animItem.setParams(params); + return animItem; + } + function setSpeed(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setSpeed(val2, animation); + } + } + function setDirection(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setDirection(val2, animation); + } + } + function play(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.play(animation); + } + } + function resume(nowTime) { + var elapsedTime = nowTime - initTime; + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.advanceTime(elapsedTime); + } + initTime = nowTime; + if (playingAnimationsNum && !_isFrozen) { + window.requestAnimationFrame(resume); + } else { + _stopped = true; + } + } + function first2(nowTime) { + initTime = nowTime; + window.requestAnimationFrame(resume); + } + function pause(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.pause(animation); + } + } + function goToAndStop(value2, isFrame, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.goToAndStop(value2, isFrame, animation); + } + } + function stop(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.stop(animation); + } + } + function togglePause(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.togglePause(animation); + } + } + function destroy(animation) { + var i; + for (i = len - 1; i >= 0; i -= 1) { + registeredAnimations[i].animation.destroy(animation); + } + } + function searchAnimations2(animationData2, standalone2, renderer2) { + var animElements = [].concat( + [].slice.call(document.getElementsByClassName("lottie")), + [].slice.call(document.getElementsByClassName("bodymovin")) + ); + var i; + var lenAnims = animElements.length; + for (i = 0; i < lenAnims; i += 1) { + if (renderer2) { + animElements[i].setAttribute("data-bm-type", renderer2); + } + registerAnimation(animElements[i], animationData2); + } + if (standalone2 && lenAnims === 0) { + if (!renderer2) { + renderer2 = "svg"; + } + var body = document.getElementsByTagName("body")[0]; + body.innerText = ""; + var div2 = createTag("div"); + div2.style.width = "100%"; + div2.style.height = "100%"; + div2.setAttribute("data-bm-type", renderer2); + body.appendChild(div2); + registerAnimation(div2, animationData2); + } + } + function resize() { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.resize(); + } + } + function activate() { + if (!_isFrozen && playingAnimationsNum) { + if (_stopped) { + window.requestAnimationFrame(first2); + _stopped = false; + } + } + } + function freeze() { + _isFrozen = true; + } + function unfreeze() { + _isFrozen = false; + activate(); + } + function setVolume(val2, animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.setVolume(val2, animation); + } + } + function mute(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.mute(animation); + } + } + function unmute(animation) { + var i; + for (i = 0; i < len; i += 1) { + registeredAnimations[i].animation.unmute(animation); + } + } + moduleOb.registerAnimation = registerAnimation; + moduleOb.loadAnimation = loadAnimation2; + moduleOb.setSpeed = setSpeed; + moduleOb.setDirection = setDirection; + moduleOb.play = play; + moduleOb.pause = pause; + moduleOb.stop = stop; + moduleOb.togglePause = togglePause; + moduleOb.searchAnimations = searchAnimations2; + moduleOb.resize = resize; + moduleOb.goToAndStop = goToAndStop; + moduleOb.destroy = destroy; + moduleOb.freeze = freeze; + moduleOb.unfreeze = unfreeze; + moduleOb.setVolume = setVolume; + moduleOb.mute = mute; + moduleOb.unmute = unmute; + moduleOb.getRegisteredAnimations = getRegisteredAnimations; + return moduleOb; + }(); + const BezierFactory = function() { + var ob2 = {}; + ob2.getBezierEasing = getBezierEasing; + var beziers = {}; + function getBezierEasing(a2, b3, c2, d, nm) { + var str = nm || ("bez_" + a2 + "_" + b3 + "_" + c2 + "_" + d).replace(/\./g, "p"); + if (beziers[str]) { + return beziers[str]; + } + var bezEasing = new BezierEasing([a2, b3, c2, d]); + beziers[str] = bezEasing; + return bezEasing; + } + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 1e-3; + var SUBDIVISION_PRECISION = 1e-7; + var SUBDIVISION_MAX_ITERATIONS = 10; + var kSplineTableSize = 11; + var kSampleStepSize = 1 / (kSplineTableSize - 1); + var float32ArraySupported = typeof Float32Array === "function"; + function A2(aA1, aA2) { + return 1 - 3 * aA2 + 3 * aA1; + } + function B2(aA1, aA2) { + return 3 * aA2 - 6 * aA1; + } + function C2(aA1) { + return 3 * aA1; + } + function calcBezier(aT, aA1, aA2) { + return ((A2(aA1, aA2) * aT + B2(aA1, aA2)) * aT + C2(aA1)) * aT; + } + function getSlope(aT, aA1, aA2) { + return 3 * A2(aA1, aA2) * aT * aT + 2 * B2(aA1, aA2) * aT + C2(aA1); + } + function binarySubdivide(aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0) return aGuessT; + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + function BezierEasing(points) { + this._p = points; + this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + this._precomputed = false; + this.get = this.get.bind(this); + } + BezierEasing.prototype = { + get: function(x2) { + var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; + if (!this._precomputed) this._precompute(); + if (mX1 === mY1 && mX2 === mY2) return x2; + if (x2 === 0) return 0; + if (x2 === 1) return 1; + return calcBezier(this._getTForX(x2), mY1, mY2); + }, + // Private part + _precompute: function() { + var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; + this._precomputed = true; + if (mX1 !== mY1 || mX2 !== mY2) { + this._calcSampleValues(); + } + }, + _calcSampleValues: function() { + var mX1 = this._p[0], mX2 = this._p[2]; + for (var i = 0; i < kSplineTableSize; ++i) { + this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + }, + /** + * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. + */ + _getTForX: function(aX) { + var mX1 = this._p[0], mX2 = this._p[2], mSampleValues = this._mSampleValues; + var intervalStart = 0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } + if (initialSlope === 0) { + return guessForT; + } + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + }; + return ob2; + }(); + const pooling = /* @__PURE__ */ function() { + function double(arr) { + return arr.concat(createSizedArray(arr.length)); + } + return { + double + }; + }(); + const poolFactory = /* @__PURE__ */ function() { + return function(initialLength, _create, _release) { + var _length = 0; + var _maxLength = initialLength; + var pool = createSizedArray(_maxLength); + var ob2 = { + newElement, + release + }; + function newElement() { + var element; + if (_length) { + _length -= 1; + element = pool[_length]; + } else { + element = _create(); + } + return element; + } + function release(element) { + if (_length === _maxLength) { + pool = pooling.double(pool); + _maxLength *= 2; + } + if (_release) { + _release(element); + } + pool[_length] = element; + _length += 1; + } + return ob2; + }; + }(); + const bezierLengthPool = function() { + function create() { + return { + addedLength: 0, + percents: createTypedArray("float32", getDefaultCurveSegments()), + lengths: createTypedArray("float32", getDefaultCurveSegments()) + }; + } + return poolFactory(8, create); + }(); + const segmentsLengthPool = function() { + function create() { + return { + lengths: [], + totalLength: 0 + }; + } + function release(element) { + var i; + var len = element.lengths.length; + for (i = 0; i < len; i += 1) { + bezierLengthPool.release(element.lengths[i]); + } + element.lengths.length = 0; + } + return poolFactory(8, create, release); + }(); + const bez = bezFunction(); + const PropertyFactory = /* @__PURE__ */ function() { + var initFrame = initialDefaultFrame; + var mathAbs = Math.abs; + function interpolateValue(frameNum, caching) { + var offsetTime = this.offsetTime; + var newValue; + if (this.propType === "multidimensional") { + newValue = createTypedArray("float32", this.pv.length); + } + var iterationIndex = caching.lastIndex; + var i = iterationIndex; + var len = this.keyframes.length - 1; + var flag = true; + var keyData; + var nextKeyData; + var keyframeMetadata; + while (flag) { + keyData = this.keyframes[i]; + nextKeyData = this.keyframes[i + 1]; + if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { + if (keyData.h) { + keyData = nextKeyData; + } + iterationIndex = 0; + break; + } + if (nextKeyData.t - offsetTime > frameNum) { + iterationIndex = i; + break; + } + if (i < len - 1) { + i += 1; + } else { + iterationIndex = 0; + flag = false; + } + } + keyframeMetadata = this.keyframesMetadata[i] || {}; + var k2; + var kLen; + var perc; + var jLen; + var j; + var fnc; + var nextKeyTime = nextKeyData.t - offsetTime; + var keyTime = keyData.t - offsetTime; + var endValue; + if (keyData.to) { + if (!keyframeMetadata.bezierData) { + keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); + } + var bezierData = keyframeMetadata.bezierData; + if (frameNum >= nextKeyTime || frameNum < keyTime) { + var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; + kLen = bezierData.points[ind].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[ind].point[k2]; + } + } else { + if (keyframeMetadata.__fnct) { + fnc = keyframeMetadata.__fnct; + } else { + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; + keyframeMetadata.__fnct = fnc; + } + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); + var distanceInLine = bezierData.segmentLength * perc; + var segmentPerc; + var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; + j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; + flag = true; + jLen = bezierData.points.length; + while (flag) { + addedLength += bezierData.points[j].partialLength; + if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { + kLen = bezierData.points[j].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[j].point[k2]; + } + break; + } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { + segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; + kLen = bezierData.points[j].point.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + newValue[k2] = bezierData.points[j].point[k2] + (bezierData.points[j + 1].point[k2] - bezierData.points[j].point[k2]) * segmentPerc; + } + break; + } + if (j < jLen - 1) { + j += 1; + } else { + flag = false; + } + } + caching._lastPoint = j; + caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; + caching._lastKeyframeIndex = i; + } + } else { + var outX; + var outY; + var inX; + var inY; + var keyValue; + len = keyData.s.length; + endValue = nextKeyData.s || keyData.e; + if (this.sh && keyData.h !== 1) { + if (frameNum >= nextKeyTime) { + newValue[0] = endValue[0]; + newValue[1] = endValue[1]; + newValue[2] = endValue[2]; + } else if (frameNum <= keyTime) { + newValue[0] = keyData.s[0]; + newValue[1] = keyData.s[1]; + newValue[2] = keyData.s[2]; + } else { + var quatStart = createQuaternion(keyData.s); + var quatEnd = createQuaternion(endValue); + var time2 = (frameNum - keyTime) / (nextKeyTime - keyTime); + quaternionToEuler(newValue, slerp(quatStart, quatEnd, time2)); + } + } else { + for (i = 0; i < len; i += 1) { + if (keyData.h !== 1) { + if (frameNum >= nextKeyTime) { + perc = 1; + } else if (frameNum < keyTime) { + perc = 0; + } else { + if (keyData.o.x.constructor === Array) { + if (!keyframeMetadata.__fnct) { + keyframeMetadata.__fnct = []; + } + if (!keyframeMetadata.__fnct[i]) { + outX = keyData.o.x[i] === void 0 ? keyData.o.x[0] : keyData.o.x[i]; + outY = keyData.o.y[i] === void 0 ? keyData.o.y[0] : keyData.o.y[i]; + inX = keyData.i.x[i] === void 0 ? keyData.i.x[0] : keyData.i.x[i]; + inY = keyData.i.y[i] === void 0 ? keyData.i.y[0] : keyData.i.y[i]; + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; + keyframeMetadata.__fnct[i] = fnc; + } else { + fnc = keyframeMetadata.__fnct[i]; + } + } else if (!keyframeMetadata.__fnct) { + outX = keyData.o.x; + outY = keyData.o.y; + inX = keyData.i.x; + inY = keyData.i.y; + fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; + keyData.keyframeMetadata = fnc; + } else { + fnc = keyframeMetadata.__fnct; + } + perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); + } + } + endValue = nextKeyData.s || keyData.e; + keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; + if (this.propType === "multidimensional") { + newValue[i] = keyValue; + } else { + newValue = keyValue; + } + } + } + } + caching.lastIndex = iterationIndex; + return newValue; + } + function slerp(a2, b3, t3) { + var out = []; + var ax = a2[0]; + var ay = a2[1]; + var az = a2[2]; + var aw = a2[3]; + var bx = b3[0]; + var by = b3[1]; + var bz = b3[2]; + var bw = b3[3]; + var omega; + var cosom; + var sinom; + var scale0; + var scale1; + cosom = ax * bx + ay * by + az * bz + aw * bw; + if (cosom < 0) { + cosom = -cosom; + bx = -bx; + by = -by; + bz = -bz; + bw = -bw; + } + if (1 - cosom > 1e-6) { + omega = Math.acos(cosom); + sinom = Math.sin(omega); + scale0 = Math.sin((1 - t3) * omega) / sinom; + scale1 = Math.sin(t3 * omega) / sinom; + } else { + scale0 = 1 - t3; + scale1 = t3; + } + out[0] = scale0 * ax + scale1 * bx; + out[1] = scale0 * ay + scale1 * by; + out[2] = scale0 * az + scale1 * bz; + out[3] = scale0 * aw + scale1 * bw; + return out; + } + function quaternionToEuler(out, quat) { + var qx = quat[0]; + var qy = quat[1]; + var qz = quat[2]; + var qw = quat[3]; + var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); + var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); + var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); + out[0] = heading / degToRads; + out[1] = attitude / degToRads; + out[2] = bank / degToRads; + } + function createQuaternion(values2) { + var heading = values2[0] * degToRads; + var attitude = values2[1] * degToRads; + var bank = values2[2] * degToRads; + var c1 = Math.cos(heading / 2); + var c2 = Math.cos(attitude / 2); + var c3 = Math.cos(bank / 2); + var s1 = Math.sin(heading / 2); + var s2 = Math.sin(attitude / 2); + var s3 = Math.sin(bank / 2); + var w = c1 * c2 * c3 - s1 * s2 * s3; + var x2 = s1 * s2 * c3 + c1 * c2 * s3; + var y2 = s1 * c2 * c3 + c1 * s2 * s3; + var z = c1 * s2 * c3 - s1 * c2 * s3; + return [x2, y2, z, w]; + } + function getValueAtCurrentTime() { + var frameNum = this.comp.renderedFrame - this.offsetTime; + var initTime = this.keyframes[0].t - this.offsetTime; + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; + if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { + if (this._caching.lastFrame >= frameNum) { + this._caching._lastKeyframeIndex = -1; + this._caching.lastIndex = 0; + } + var renderResult = this.interpolateValue(frameNum, this._caching); + this.pv = renderResult; + } + this._caching.lastFrame = frameNum; + return this.pv; + } + function setVValue(val2) { + var multipliedValue; + if (this.propType === "unidimensional") { + multipliedValue = val2 * this.mult; + if (mathAbs(this.v - multipliedValue) > 1e-5) { + this.v = multipliedValue; + this._mdf = true; + } + } else { + var i = 0; + var len = this.v.length; + while (i < len) { + multipliedValue = val2[i] * this.mult; + if (mathAbs(this.v[i] - multipliedValue) > 1e-5) { + this.v[i] = multipliedValue; + this._mdf = true; + } + i += 1; + } + } + } + function processEffectsSequence() { + if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) { + return; + } + if (this.lock) { + this.setVValue(this.pv); + return; + } + this.lock = true; + this._mdf = this._isFirstFrame; + var i; + var len = this.effectsSequence.length; + var finalValue = this.kf ? this.pv : this.data.k; + for (i = 0; i < len; i += 1) { + finalValue = this.effectsSequence[i](finalValue); + } + this.setVValue(finalValue); + this._isFirstFrame = false; + this.lock = false; + this.frameId = this.elem.globalData.frameId; + } + function addEffect(effectFunction) { + this.effectsSequence.push(effectFunction); + this.container.addDynamicProperty(this); + } + function ValueProperty(elem2, data2, mult, container) { + this.propType = "unidimensional"; + this.mult = mult || 1; + this.data = data2; + this.v = mult ? data2.k * mult : data2.k; + this.pv = data2.k; + this._mdf = false; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.k = false; + this.kf = false; + this.vel = 0; + this.effectsSequence = []; + this._isFirstFrame = true; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.addEffect = addEffect; + } + function MultiDimensionalProperty(elem2, data2, mult, container) { + this.propType = "multidimensional"; + this.mult = mult || 1; + this.data = data2; + this._mdf = false; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.k = false; + this.kf = false; + this.frameId = -1; + var i; + var len = data2.k.length; + this.v = createTypedArray("float32", len); + this.pv = createTypedArray("float32", len); + this.vel = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + this.v[i] = data2.k[i] * this.mult; + this.pv[i] = data2.k[i]; + } + this._isFirstFrame = true; + this.effectsSequence = []; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.addEffect = addEffect; + } + function KeyframedValueProperty(elem2, data2, mult, container) { + this.propType = "unidimensional"; + this.keyframes = data2.k; + this.keyframesMetadata = []; + this.offsetTime = elem2.data.st; + this.frameId = -1; + this._caching = { + lastFrame: initFrame, + lastIndex: 0, + value: 0, + _lastKeyframeIndex: -1 + }; + this.k = true; + this.kf = true; + this.data = data2; + this.mult = mult || 1; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.v = initFrame; + this.pv = initFrame; + this._isFirstFrame = true; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.interpolateValue = interpolateValue; + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; + this.addEffect = addEffect; + } + function KeyframedMultidimensionalProperty(elem2, data2, mult, container) { + this.propType = "multidimensional"; + var i; + var len = data2.k.length; + var s; + var e; + var to; + var ti; + for (i = 0; i < len - 1; i += 1) { + if (data2.k[i].to && data2.k[i].s && data2.k[i + 1] && data2.k[i + 1].s) { + s = data2.k[i].s; + e = data2.k[i + 1].s; + to = data2.k[i].to; + ti = data2.k[i].ti; + 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])) { + data2.k[i].to = null; + data2.k[i].ti = null; + } + if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { + if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { + data2.k[i].to = null; + data2.k[i].ti = null; + } + } + } + } + this.effectsSequence = [getValueAtCurrentTime.bind(this)]; + this.data = data2; + this.keyframes = data2.k; + this.keyframesMetadata = []; + this.offsetTime = elem2.data.st; + this.k = true; + this.kf = true; + this._isFirstFrame = true; + this.mult = mult || 1; + this.elem = elem2; + this.container = container; + this.comp = elem2.comp; + this.getValue = processEffectsSequence; + this.setVValue = setVValue; + this.interpolateValue = interpolateValue; + this.frameId = -1; + var arrLen = data2.k[0].s.length; + this.v = createTypedArray("float32", arrLen); + this.pv = createTypedArray("float32", arrLen); + for (i = 0; i < arrLen; i += 1) { + this.v[i] = initFrame; + this.pv[i] = initFrame; + } + this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray("float32", arrLen) }; + this.addEffect = addEffect; + } + function getProp(elem2, data2, type, mult, container) { + var p2; + if (!data2.k.length) { + p2 = new ValueProperty(elem2, data2, mult, container); + } else if (typeof data2.k[0] === "number") { + p2 = new MultiDimensionalProperty(elem2, data2, mult, container); + } else { + switch (type) { + case 0: + p2 = new KeyframedValueProperty(elem2, data2, mult, container); + break; + case 1: + p2 = new KeyframedMultidimensionalProperty(elem2, data2, mult, container); + break; + default: + break; + } + } + if (p2.effectsSequence.length) { + container.addDynamicProperty(p2); + } + return p2; + } + var ob2 = { + getProp + }; + return ob2; + }(); + DynamicPropertyContainer.prototype = { + addDynamicProperty: function(prop) { + if (this.dynamicProperties.indexOf(prop) === -1) { + this.dynamicProperties.push(prop); + this.container.addDynamicProperty(this); + this._isAnimated = true; + } + }, + iterateDynamicProperties: function() { + this._mdf = false; + var i; + var len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + if (this.dynamicProperties[i]._mdf) { + this._mdf = true; + } + } + }, + initDynamicPropertyContainer: function(container) { + this.container = container; + this.dynamicProperties = []; + this._mdf = false; + this._isAnimated = false; + } + }; + const pointPool = function() { + function create() { + return createTypedArray("float32", 2); + } + return poolFactory(8, create); + }(); + ShapePath.prototype.setPathData = function(closed, len) { + this.c = closed; + this.setLength(len); + var i = 0; + while (i < len) { + this.v[i] = pointPool.newElement(); + this.o[i] = pointPool.newElement(); + this.i[i] = pointPool.newElement(); + i += 1; + } + }; + ShapePath.prototype.setLength = function(len) { + while (this._maxLength < len) { + this.doubleArrayLength(); + } + this._length = len; + }; + ShapePath.prototype.doubleArrayLength = function() { + this.v = this.v.concat(createSizedArray(this._maxLength)); + this.i = this.i.concat(createSizedArray(this._maxLength)); + this.o = this.o.concat(createSizedArray(this._maxLength)); + this._maxLength *= 2; + }; + ShapePath.prototype.setXYAt = function(x2, y2, type, pos, replace) { + var arr; + this._length = Math.max(this._length, pos + 1); + if (this._length >= this._maxLength) { + this.doubleArrayLength(); + } + switch (type) { + case "v": + arr = this.v; + break; + case "i": + arr = this.i; + break; + case "o": + arr = this.o; + break; + default: + arr = []; + break; + } + if (!arr[pos] || arr[pos] && !replace) { + arr[pos] = pointPool.newElement(); + } + arr[pos][0] = x2; + arr[pos][1] = y2; + }; + ShapePath.prototype.setTripleAt = function(vX, vY, oX, oY, iX, iY, pos, replace) { + this.setXYAt(vX, vY, "v", pos, replace); + this.setXYAt(oX, oY, "o", pos, replace); + this.setXYAt(iX, iY, "i", pos, replace); + }; + ShapePath.prototype.reverse = function() { + var newPath = new ShapePath(); + newPath.setPathData(this.c, this._length); + var vertices = this.v; + var outPoints = this.o; + var inPoints = this.i; + var init = 0; + if (this.c) { + newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); + init = 1; + } + var cnt = this._length - 1; + var len = this._length; + var i; + for (i = init; i < len; i += 1) { + newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); + cnt -= 1; + } + return newPath; + }; + const shapePool = function() { + function create() { + return new ShapePath(); + } + function release(shapePath) { + var len = shapePath._length; + var i; + for (i = 0; i < len; i += 1) { + pointPool.release(shapePath.v[i]); + pointPool.release(shapePath.i[i]); + pointPool.release(shapePath.o[i]); + shapePath.v[i] = null; + shapePath.i[i] = null; + shapePath.o[i] = null; + } + shapePath._length = 0; + shapePath.c = false; + } + function clone2(shape) { + var cloned = factory.newElement(); + var i; + var len = shape._length === void 0 ? shape.v.length : shape._length; + cloned.setLength(len); + cloned.c = shape.c; + for (i = 0; i < len; i += 1) { + 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); + } + return cloned; + } + var factory = poolFactory(4, create, release); + factory.clone = clone2; + return factory; + }(); + ShapeCollection.prototype.addShape = function(shapeData) { + if (this._length === this._maxLength) { + this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); + this._maxLength *= 2; + } + this.shapes[this._length] = shapeData; + this._length += 1; + }; + ShapeCollection.prototype.releaseShapes = function() { + var i; + for (i = 0; i < this._length; i += 1) { + shapePool.release(this.shapes[i]); + } + this._length = 0; + }; + const shapeCollectionPool = function() { + var ob2 = { + newShapeCollection, + release + }; + var _length = 0; + var _maxLength = 4; + var pool = createSizedArray(_maxLength); + function newShapeCollection() { + var shapeCollection; + if (_length) { + _length -= 1; + shapeCollection = pool[_length]; + } else { + shapeCollection = new ShapeCollection(); + } + return shapeCollection; + } + function release(shapeCollection) { + var i; + var len = shapeCollection._length; + for (i = 0; i < len; i += 1) { + shapePool.release(shapeCollection.shapes[i]); + } + shapeCollection._length = 0; + if (_length === _maxLength) { + pool = pooling.double(pool); + _maxLength *= 2; + } + pool[_length] = shapeCollection; + _length += 1; + } + return ob2; + }(); + const ShapePropertyFactory = function() { + var initFrame = -999999; + function interpolateShape(frameNum, previousValue, caching) { + var iterationIndex = caching.lastIndex; + var keyPropS; + var keyPropE; + var isHold; + var j; + var k2; + var jLen; + var kLen; + var perc; + var vertexValue; + var kf = this.keyframes; + if (frameNum < kf[0].t - this.offsetTime) { + keyPropS = kf[0].s[0]; + isHold = true; + iterationIndex = 0; + } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { + keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; + isHold = true; + } else { + var i = iterationIndex; + var len = kf.length - 1; + var flag = true; + var keyData; + var nextKeyData; + var keyframeMetadata; + while (flag) { + keyData = kf[i]; + nextKeyData = kf[i + 1]; + if (nextKeyData.t - this.offsetTime > frameNum) { + break; + } + if (i < len - 1) { + i += 1; + } else { + flag = false; + } + } + keyframeMetadata = this.keyframesMetadata[i] || {}; + isHold = keyData.h === 1; + iterationIndex = i; + if (!isHold) { + if (frameNum >= nextKeyData.t - this.offsetTime) { + perc = 1; + } else if (frameNum < keyData.t - this.offsetTime) { + perc = 0; + } else { + var fnc; + if (keyframeMetadata.__fnct) { + fnc = keyframeMetadata.__fnct; + } else { + fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; + keyframeMetadata.__fnct = fnc; + } + perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); + } + keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; + } + keyPropS = keyData.s[0]; + } + jLen = previousValue._length; + kLen = keyPropS.i[0].length; + caching.lastIndex = iterationIndex; + for (j = 0; j < jLen; j += 1) { + for (k2 = 0; k2 < kLen; k2 += 1) { + vertexValue = isHold ? keyPropS.i[j][k2] : keyPropS.i[j][k2] + (keyPropE.i[j][k2] - keyPropS.i[j][k2]) * perc; + previousValue.i[j][k2] = vertexValue; + vertexValue = isHold ? keyPropS.o[j][k2] : keyPropS.o[j][k2] + (keyPropE.o[j][k2] - keyPropS.o[j][k2]) * perc; + previousValue.o[j][k2] = vertexValue; + vertexValue = isHold ? keyPropS.v[j][k2] : keyPropS.v[j][k2] + (keyPropE.v[j][k2] - keyPropS.v[j][k2]) * perc; + previousValue.v[j][k2] = vertexValue; + } + } + } + function interpolateShapeCurrentTime() { + var frameNum = this.comp.renderedFrame - this.offsetTime; + var initTime = this.keyframes[0].t - this.offsetTime; + var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; + var lastFrame = this._caching.lastFrame; + if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { + this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; + this.interpolateShape(frameNum, this.pv, this._caching); + } + this._caching.lastFrame = frameNum; + return this.pv; + } + function resetShape() { + this.paths = this.localShapeCollection; + } + function shapesEqual(shape1, shape2) { + if (shape1._length !== shape2._length || shape1.c !== shape2.c) { + return false; + } + var i; + var len = shape1._length; + for (i = 0; i < len; i += 1) { + if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) { + return false; + } + } + return true; + } + function setVValue(newPath) { + if (!shapesEqual(this.v, newPath)) { + this.v = shapePool.clone(newPath); + this.localShapeCollection.releaseShapes(); + this.localShapeCollection.addShape(this.v); + this._mdf = true; + this.paths = this.localShapeCollection; + } + } + function processEffectsSequence() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + if (!this.effectsSequence.length) { + this._mdf = false; + return; + } + if (this.lock) { + this.setVValue(this.pv); + return; + } + this.lock = true; + this._mdf = false; + var finalValue; + if (this.kf) { + finalValue = this.pv; + } else if (this.data.ks) { + finalValue = this.data.ks.k; + } else { + finalValue = this.data.pt.k; + } + var i; + var len = this.effectsSequence.length; + for (i = 0; i < len; i += 1) { + finalValue = this.effectsSequence[i](finalValue); + } + this.setVValue(finalValue); + this.lock = false; + this.frameId = this.elem.globalData.frameId; + } + function ShapeProperty(elem2, data2, type) { + this.propType = "shape"; + this.comp = elem2.comp; + this.container = elem2; + this.elem = elem2; + this.data = data2; + this.k = false; + this.kf = false; + this._mdf = false; + var pathData = type === 3 ? data2.pt.k : data2.ks.k; + this.v = shapePool.clone(pathData); + this.pv = shapePool.clone(this.v); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.paths.addShape(this.v); + this.reset = resetShape; + this.effectsSequence = []; + } + function addEffect(effectFunction) { + this.effectsSequence.push(effectFunction); + this.container.addDynamicProperty(this); + } + ShapeProperty.prototype.interpolateShape = interpolateShape; + ShapeProperty.prototype.getValue = processEffectsSequence; + ShapeProperty.prototype.setVValue = setVValue; + ShapeProperty.prototype.addEffect = addEffect; + function KeyframedShapeProperty(elem2, data2, type) { + this.propType = "shape"; + this.comp = elem2.comp; + this.elem = elem2; + this.container = elem2; + this.offsetTime = elem2.data.st; + this.keyframes = type === 3 ? data2.pt.k : data2.ks.k; + this.keyframesMetadata = []; + this.k = true; + this.kf = true; + var len = this.keyframes[0].s[0].i.length; + this.v = shapePool.newElement(); + this.v.setPathData(this.keyframes[0].s[0].c, len); + this.pv = shapePool.clone(this.v); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.paths.addShape(this.v); + this.lastFrame = initFrame; + this.reset = resetShape; + this._caching = { lastFrame: initFrame, lastIndex: 0 }; + this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; + } + KeyframedShapeProperty.prototype.getValue = processEffectsSequence; + KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; + KeyframedShapeProperty.prototype.setVValue = setVValue; + KeyframedShapeProperty.prototype.addEffect = addEffect; + var EllShapeProperty = function() { + var cPoint = roundCorner; + function EllShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.setPathData(true, 4); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.paths = this.localShapeCollection; + this.localShapeCollection.addShape(this.v); + this.d = data2.d; + this.elem = elem2; + this.comp = elem2.comp; + this.frameId = -1; + this.initDynamicPropertyContainer(elem2); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, 0, this); + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertEllToPath(); + } + } + EllShapePropertyFactory.prototype = { + reset: resetShape, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertEllToPath(); + } + }, + convertEllToPath: function() { + var p0 = this.p.v[0]; + var p1 = this.p.v[1]; + var s0 = this.s.v[0] / 2; + var s1 = this.s.v[1] / 2; + var _cw = this.d !== 3; + var _v = this.v; + _v.v[0][0] = p0; + _v.v[0][1] = p1 - s1; + _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.v[1][1] = p1; + _v.v[2][0] = p0; + _v.v[2][1] = p1 + s1; + _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.v[3][1] = p1; + _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; + _v.i[0][1] = p1 - s1; + _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.i[1][1] = p1 - s1 * cPoint; + _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; + _v.i[2][1] = p1 + s1; + _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.i[3][1] = p1 + s1 * cPoint; + _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; + _v.o[0][1] = p1 - s1; + _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; + _v.o[1][1] = p1 + s1 * cPoint; + _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; + _v.o[2][1] = p1 + s1; + _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; + _v.o[3][1] = p1 - s1 * cPoint; + } + }; + extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); + return EllShapePropertyFactory; + }(); + var StarShapeProperty = function() { + function StarShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.setPathData(true, 0); + this.elem = elem2; + this.comp = elem2.comp; + this.data = data2; + this.frameId = -1; + this.d = data2.d; + this.initDynamicPropertyContainer(elem2); + if (data2.sy === 1) { + this.ir = PropertyFactory.getProp(elem2, data2.ir, 0, 0, this); + this.is = PropertyFactory.getProp(elem2, data2.is, 0, 0.01, this); + this.convertToPath = this.convertStarToPath; + } else { + this.convertToPath = this.convertPolygonToPath; + } + this.pt = PropertyFactory.getProp(elem2, data2.pt, 0, 0, this); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.r = PropertyFactory.getProp(elem2, data2.r, 0, degToRads, this); + this.or = PropertyFactory.getProp(elem2, data2.or, 0, 0, this); + this.os = PropertyFactory.getProp(elem2, data2.os, 0, 0.01, this); + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.localShapeCollection.addShape(this.v); + this.paths = this.localShapeCollection; + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertToPath(); + } + } + StarShapePropertyFactory.prototype = { + reset: resetShape, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertToPath(); + } + }, + convertStarToPath: function() { + var numPts = Math.floor(this.pt.v) * 2; + var angle = Math.PI * 2 / numPts; + var longFlag = true; + var longRad = this.or.v; + var shortRad = this.ir.v; + var longRound = this.os.v; + var shortRound = this.is.v; + var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); + var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); + var i; + var rad; + var roundness; + var perimSegment; + var currentAng = -Math.PI / 2; + currentAng += this.r.v; + var dir = this.data.d === 3 ? -1 : 1; + this.v._length = 0; + for (i = 0; i < numPts; i += 1) { + rad = longFlag ? longRad : shortRad; + roundness = longFlag ? longRound : shortRound; + perimSegment = longFlag ? longPerimSegment : shortPerimSegment; + var x2 = rad * Math.cos(currentAng); + var y2 = rad * Math.sin(currentAng); + var ox = x2 === 0 && y2 === 0 ? 0 : y2 / Math.sqrt(x2 * x2 + y2 * y2); + var oy = x2 === 0 && y2 === 0 ? 0 : -x2 / Math.sqrt(x2 * x2 + y2 * y2); + x2 += +this.p.v[0]; + y2 += +this.p.v[1]; + this.v.setTripleAt(x2, y2, x2 - ox * perimSegment * roundness * dir, y2 - oy * perimSegment * roundness * dir, x2 + ox * perimSegment * roundness * dir, y2 + oy * perimSegment * roundness * dir, i, true); + longFlag = !longFlag; + currentAng += angle * dir; + } + }, + convertPolygonToPath: function() { + var numPts = Math.floor(this.pt.v); + var angle = Math.PI * 2 / numPts; + var rad = this.or.v; + var roundness = this.os.v; + var perimSegment = 2 * Math.PI * rad / (numPts * 4); + var i; + var currentAng = -Math.PI * 0.5; + var dir = this.data.d === 3 ? -1 : 1; + currentAng += this.r.v; + this.v._length = 0; + for (i = 0; i < numPts; i += 1) { + var x2 = rad * Math.cos(currentAng); + var y2 = rad * Math.sin(currentAng); + var ox = x2 === 0 && y2 === 0 ? 0 : y2 / Math.sqrt(x2 * x2 + y2 * y2); + var oy = x2 === 0 && y2 === 0 ? 0 : -x2 / Math.sqrt(x2 * x2 + y2 * y2); + x2 += +this.p.v[0]; + y2 += +this.p.v[1]; + this.v.setTripleAt(x2, y2, x2 - ox * perimSegment * roundness * dir, y2 - oy * perimSegment * roundness * dir, x2 + ox * perimSegment * roundness * dir, y2 + oy * perimSegment * roundness * dir, i, true); + currentAng += angle * dir; + } + this.paths.length = 0; + this.paths[0] = this.v; + } + }; + extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); + return StarShapePropertyFactory; + }(); + var RectShapeProperty = function() { + function RectShapePropertyFactory(elem2, data2) { + this.v = shapePool.newElement(); + this.v.c = true; + this.localShapeCollection = shapeCollectionPool.newShapeCollection(); + this.localShapeCollection.addShape(this.v); + this.paths = this.localShapeCollection; + this.elem = elem2; + this.comp = elem2.comp; + this.frameId = -1; + this.d = data2.d; + this.initDynamicPropertyContainer(elem2); + this.p = PropertyFactory.getProp(elem2, data2.p, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, 0, this); + this.r = PropertyFactory.getProp(elem2, data2.r, 0, 0, this); + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.k = false; + this.convertRectToPath(); + } + } + RectShapePropertyFactory.prototype = { + convertRectToPath: function() { + var p0 = this.p.v[0]; + var p1 = this.p.v[1]; + var v0 = this.s.v[0] / 2; + var v12 = this.s.v[1] / 2; + var round = bmMin(v0, v12, this.r.v); + var cPoint = round * (1 - roundCorner); + this.v._length = 0; + if (this.d === 2 || this.d === 1) { + this.v.setTripleAt(p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + cPoint, 0, true); + this.v.setTripleAt(p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - cPoint, p0 + v0, p1 + v12 - round, 1, true); + if (round !== 0) { + this.v.setTripleAt(p0 + v0 - round, p1 + v12, p0 + v0 - round, p1 + v12, p0 + v0 - cPoint, p1 + v12, 2, true); + this.v.setTripleAt(p0 - v0 + round, p1 + v12, p0 - v0 + cPoint, p1 + v12, p0 - v0 + round, p1 + v12, 3, true); + this.v.setTripleAt(p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - cPoint, 4, true); + this.v.setTripleAt(p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + cPoint, p0 - v0, p1 - v12 + round, 5, true); + this.v.setTripleAt(p0 - v0 + round, p1 - v12, p0 - v0 + round, p1 - v12, p0 - v0 + cPoint, p1 - v12, 6, true); + this.v.setTripleAt(p0 + v0 - round, p1 - v12, p0 + v0 - cPoint, p1 - v12, p0 + v0 - round, p1 - v12, 7, true); + } else { + this.v.setTripleAt(p0 - v0, p1 + v12, p0 - v0 + cPoint, p1 + v12, p0 - v0, p1 + v12, 2); + this.v.setTripleAt(p0 - v0, p1 - v12, p0 - v0, p1 - v12 + cPoint, p0 - v0, p1 - v12, 3); + } + } else { + this.v.setTripleAt(p0 + v0, p1 - v12 + round, p0 + v0, p1 - v12 + cPoint, p0 + v0, p1 - v12 + round, 0, true); + if (round !== 0) { + this.v.setTripleAt(p0 + v0 - round, p1 - v12, p0 + v0 - round, p1 - v12, p0 + v0 - cPoint, p1 - v12, 1, true); + this.v.setTripleAt(p0 - v0 + round, p1 - v12, p0 - v0 + cPoint, p1 - v12, p0 - v0 + round, p1 - v12, 2, true); + this.v.setTripleAt(p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + round, p0 - v0, p1 - v12 + cPoint, 3, true); + this.v.setTripleAt(p0 - v0, p1 + v12 - round, p0 - v0, p1 + v12 - cPoint, p0 - v0, p1 + v12 - round, 4, true); + this.v.setTripleAt(p0 - v0 + round, p1 + v12, p0 - v0 + round, p1 + v12, p0 - v0 + cPoint, p1 + v12, 5, true); + this.v.setTripleAt(p0 + v0 - round, p1 + v12, p0 + v0 - cPoint, p1 + v12, p0 + v0 - round, p1 + v12, 6, true); + this.v.setTripleAt(p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - round, p0 + v0, p1 + v12 - cPoint, 7, true); + } else { + this.v.setTripleAt(p0 - v0, p1 - v12, p0 - v0 + cPoint, p1 - v12, p0 - v0, p1 - v12, 1, true); + this.v.setTripleAt(p0 - v0, p1 + v12, p0 - v0, p1 + v12 - cPoint, p0 - v0, p1 + v12, 2, true); + this.v.setTripleAt(p0 + v0, p1 + v12, p0 + v0 - cPoint, p1 + v12, p0 + v0, p1 + v12, 3, true); + } + } + }, + getValue: function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + if (this._mdf) { + this.convertRectToPath(); + } + }, + reset: resetShape + }; + extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); + return RectShapePropertyFactory; + }(); + function getShapeProp(elem2, data2, type) { + var prop; + if (type === 3 || type === 4) { + var dataProp = type === 3 ? data2.pt : data2.ks; + var keys2 = dataProp.k; + if (keys2.length) { + prop = new KeyframedShapeProperty(elem2, data2, type); + } else { + prop = new ShapeProperty(elem2, data2, type); + } + } else if (type === 5) { + prop = new RectShapeProperty(elem2, data2); + } else if (type === 6) { + prop = new EllShapeProperty(elem2, data2); + } else if (type === 7) { + prop = new StarShapeProperty(elem2, data2); + } + if (prop.k) { + elem2.addDynamicProperty(prop); + } + return prop; + } + function getConstructorFunction() { + return ShapeProperty; + } + function getKeyframedConstructorFunction() { + return KeyframedShapeProperty; + } + var ob2 = {}; + ob2.getShapeProp = getShapeProp; + ob2.getConstructorFunction = getConstructorFunction; + ob2.getKeyframedConstructorFunction = getKeyframedConstructorFunction; + return ob2; + }(); + const Matrix = /* @__PURE__ */ function() { + var _cos = Math.cos; + var _sin = Math.sin; + var _tan = Math.tan; + var _rnd = Math.round; + function reset() { + 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; + return this; + } + function rotate(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function rotateX(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); + } + function rotateY(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); + } + function rotateZ(angle) { + if (angle === 0) { + return this; + } + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function shear(sx, sy) { + return this._t(1, sy, sx, 1, 0, 0); + } + function skew(ax, ay) { + return this.shear(_tan(ax), _tan(ay)); + } + function skewFromAxis(ax, angle) { + var mCos = _cos(angle); + var mSin = _sin(angle); + return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + } + function scale2(sx, sy, sz) { + if (!sz && sz !== 0) { + sz = 1; + } + if (sx === 1 && sy === 1 && sz === 1) { + return this; + } + return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); + } + function setTransform(a2, b3, c2, d, e, f, g2, h, i, j, k2, l2, m, n2, o, p2) { + this.props[0] = a2; + this.props[1] = b3; + this.props[2] = c2; + this.props[3] = d; + this.props[4] = e; + this.props[5] = f; + this.props[6] = g2; + this.props[7] = h; + this.props[8] = i; + this.props[9] = j; + this.props[10] = k2; + this.props[11] = l2; + this.props[12] = m; + this.props[13] = n2; + this.props[14] = o; + this.props[15] = p2; + return this; + } + function translate(tx, ty, tz) { + tz = tz || 0; + if (tx !== 0 || ty !== 0 || tz !== 0) { + return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); + } + return this; + } + function transform2(a2, b22, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { + var _p2 = this.props; + if (a2 === 1 && b22 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) { + _p2[12] = _p2[12] * a2 + _p2[15] * m2; + _p2[13] = _p2[13] * f2 + _p2[15] * n2; + _p2[14] = _p2[14] * k2 + _p2[15] * o2; + _p2[15] *= p2; + this._identityCalculated = false; + return this; + } + var a1 = _p2[0]; + var b1 = _p2[1]; + var c1 = _p2[2]; + var d1 = _p2[3]; + var e1 = _p2[4]; + var f1 = _p2[5]; + var g1 = _p2[6]; + var h1 = _p2[7]; + var i1 = _p2[8]; + var j1 = _p2[9]; + var k1 = _p2[10]; + var l1 = _p2[11]; + var m1 = _p2[12]; + var n1 = _p2[13]; + var o1 = _p2[14]; + var p1 = _p2[15]; + _p2[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; + _p2[1] = a1 * b22 + b1 * f2 + c1 * j2 + d1 * n2; + _p2[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; + _p2[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; + _p2[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; + _p2[5] = e1 * b22 + f1 * f2 + g1 * j2 + h1 * n2; + _p2[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; + _p2[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; + _p2[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; + _p2[9] = i1 * b22 + j1 * f2 + k1 * j2 + l1 * n2; + _p2[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; + _p2[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; + _p2[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; + _p2[13] = m1 * b22 + n1 * f2 + o1 * j2 + p1 * n2; + _p2[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; + _p2[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; + this._identityCalculated = false; + return this; + } + function isIdentity() { + if (!this._identityCalculated) { + 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); + this._identityCalculated = true; + } + return this._identity; + } + function equals2(matr) { + var i = 0; + while (i < 16) { + if (matr.props[i] !== this.props[i]) { + return false; + } + i += 1; + } + return true; + } + function clone2(matr) { + var i; + for (i = 0; i < 16; i += 1) { + matr.props[i] = this.props[i]; + } + return matr; + } + function cloneFromProps(props) { + var i; + for (i = 0; i < 16; i += 1) { + this.props[i] = props[i]; + } + } + function applyToPoint(x2, y2, z) { + return { + x: x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12], + y: x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13], + z: x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14] + }; + } + function applyToX(x2, y2, z) { + return x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12]; + } + function applyToY(x2, y2, z) { + return x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13]; + } + function applyToZ(x2, y2, z) { + return x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14]; + } + function getInverseMatrix() { + var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; + var a2 = this.props[5] / determinant; + var b3 = -this.props[1] / determinant; + var c2 = -this.props[4] / determinant; + var d = this.props[0] / determinant; + var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; + var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; + var inverseMatrix = new Matrix(); + inverseMatrix.props[0] = a2; + inverseMatrix.props[1] = b3; + inverseMatrix.props[4] = c2; + inverseMatrix.props[5] = d; + inverseMatrix.props[12] = e; + inverseMatrix.props[13] = f; + return inverseMatrix; + } + function inversePoint(pt) { + var inverseMatrix = this.getInverseMatrix(); + return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0); + } + function inversePoints(pts) { + var i; + var len = pts.length; + var retPts = []; + for (i = 0; i < len; i += 1) { + retPts[i] = inversePoint(pts[i]); + } + return retPts; + } + function applyToTriplePoints(pt1, pt2, pt3) { + var arr = createTypedArray("float32", 6); + if (this.isIdentity()) { + arr[0] = pt1[0]; + arr[1] = pt1[1]; + arr[2] = pt2[0]; + arr[3] = pt2[1]; + arr[4] = pt3[0]; + arr[5] = pt3[1]; + } else { + var p0 = this.props[0]; + var p1 = this.props[1]; + var p4 = this.props[4]; + var p5 = this.props[5]; + var p12 = this.props[12]; + var p13 = this.props[13]; + arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; + arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; + arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; + arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; + arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; + arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; + } + return arr; + } + function applyToPointArray(x2, y2, z) { + var arr; + if (this.isIdentity()) { + arr = [x2, y2, z]; + } else { + arr = [ + x2 * this.props[0] + y2 * this.props[4] + z * this.props[8] + this.props[12], + x2 * this.props[1] + y2 * this.props[5] + z * this.props[9] + this.props[13], + x2 * this.props[2] + y2 * this.props[6] + z * this.props[10] + this.props[14] + ]; + } + return arr; + } + function applyToPointStringified(x2, y2) { + if (this.isIdentity()) { + return x2 + "," + y2; + } + var _p2 = this.props; + return Math.round((x2 * _p2[0] + y2 * _p2[4] + _p2[12]) * 100) / 100 + "," + Math.round((x2 * _p2[1] + y2 * _p2[5] + _p2[13]) * 100) / 100; + } + function toCSS() { + var i = 0; + var props = this.props; + var cssValue = "matrix3d("; + var v = 1e4; + while (i < 16) { + cssValue += _rnd(props[i] * v) / v; + cssValue += i === 15 ? ")" : ","; + i += 1; + } + return cssValue; + } + function roundMatrixProperty(val2) { + var v = 1e4; + if (val2 < 1e-6 && val2 > 0 || val2 > -1e-6 && val2 < 0) { + return _rnd(val2 * v) / v; + } + return val2; + } + function to2dCSS() { + var props = this.props; + var _a3 = roundMatrixProperty(props[0]); + var _b3 = roundMatrixProperty(props[1]); + var _c = roundMatrixProperty(props[4]); + var _d = roundMatrixProperty(props[5]); + var _e = roundMatrixProperty(props[12]); + var _f = roundMatrixProperty(props[13]); + return "matrix(" + _a3 + "," + _b3 + "," + _c + "," + _d + "," + _e + "," + _f + ")"; + } + return function() { + this.reset = reset; + this.rotate = rotate; + this.rotateX = rotateX; + this.rotateY = rotateY; + this.rotateZ = rotateZ; + this.skew = skew; + this.skewFromAxis = skewFromAxis; + this.shear = shear; + this.scale = scale2; + this.setTransform = setTransform; + this.translate = translate; + this.transform = transform2; + this.applyToPoint = applyToPoint; + this.applyToX = applyToX; + this.applyToY = applyToY; + this.applyToZ = applyToZ; + this.applyToPointArray = applyToPointArray; + this.applyToTriplePoints = applyToTriplePoints; + this.applyToPointStringified = applyToPointStringified; + this.toCSS = toCSS; + this.to2dCSS = to2dCSS; + this.clone = clone2; + this.cloneFromProps = cloneFromProps; + this.equals = equals2; + this.inversePoints = inversePoints; + this.inversePoint = inversePoint; + this.getInverseMatrix = getInverseMatrix; + this._t = this.transform; + this.isIdentity = isIdentity; + this._identity = true; + this._identityCalculated = false; + this.props = createTypedArray("float32", 16); + this.reset(); + }; + }(); + standalone = "__[STANDALONE]__"; + animationData = "__[ANIMATIONDATA]__"; + renderer = ""; + lottie.play = animationManager.play; + lottie.pause = animationManager.pause; + lottie.setLocationHref = setLocation; + lottie.togglePause = animationManager.togglePause; + lottie.setSpeed = animationManager.setSpeed; + lottie.setDirection = animationManager.setDirection; + lottie.stop = animationManager.stop; + lottie.searchAnimations = searchAnimations; + lottie.registerAnimation = animationManager.registerAnimation; + lottie.loadAnimation = loadAnimation; + lottie.setSubframeRendering = setSubframeRendering; + lottie.resize = animationManager.resize; + lottie.goToAndStop = animationManager.goToAndStop; + lottie.destroy = animationManager.destroy; + lottie.setQuality = setQuality; + lottie.inBrowser = inBrowser; + lottie.installPlugin = installPlugin; + lottie.freeze = animationManager.freeze; + lottie.unfreeze = animationManager.unfreeze; + lottie.setVolume = animationManager.setVolume; + lottie.mute = animationManager.mute; + lottie.unmute = animationManager.unmute; + lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations; + lottie.useWebWorker = setWebWorker; + lottie.setIDPrefix = setPrefix; + lottie.__getFactory = getFactory; + lottie.version = "[[BM_VERSION]]"; + queryString = ""; + if (standalone) { + scripts = document.getElementsByTagName("script"); + index2 = scripts.length - 1; + myScript = scripts[index2] || { + src: "" + }; + queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, "") : ""; + renderer = getQueryVariable("renderer"); + } + readyStateCheckInterval = setInterval(checkReady, 100); + try { + if (!(typeof exports === "object" && typeof module !== "undefined") && !(typeof define === "function" && define.amd)) { + window.bodymovin = lottie; + } + } catch (err2) { + } + const ShapeModifiers = function() { + var ob2 = {}; + var modifiers = {}; + ob2.registerModifier = registerModifier; + ob2.getModifier = getModifier; + function registerModifier(nm, factory) { + if (!modifiers[nm]) { + modifiers[nm] = factory; + } + } + function getModifier(nm, elem2, data2) { + return new modifiers[nm](elem2, data2); + } + return ob2; + }(); + ShapeModifier.prototype.initModifierProperties = function() { + }; + ShapeModifier.prototype.addShapeToModifier = function() { + }; + ShapeModifier.prototype.addShape = function(data2) { + if (!this.closed) { + data2.sh.container.addDynamicProperty(data2.sh); + var shapeData = { shape: data2.sh, data: data2, localShapeCollection: shapeCollectionPool.newShapeCollection() }; + this.shapes.push(shapeData); + this.addShapeToModifier(shapeData); + if (this._isAnimated) { + data2.setAsAnimated(); + } + } + }; + ShapeModifier.prototype.init = function(elem2, data2) { + this.shapes = []; + this.elem = elem2; + this.initDynamicPropertyContainer(elem2); + this.initModifierProperties(elem2, data2); + this.frameId = initialDefaultFrame; + this.closed = false; + this.k = false; + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.getValue(true); + } + }; + ShapeModifier.prototype.processKeys = function() { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + }; + extendPrototype([DynamicPropertyContainer], ShapeModifier); + extendPrototype([ShapeModifier], TrimModifier); + TrimModifier.prototype.initModifierProperties = function(elem2, data2) { + this.s = PropertyFactory.getProp(elem2, data2.s, 0, 0.01, this); + this.e = PropertyFactory.getProp(elem2, data2.e, 0, 0.01, this); + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0, this); + this.sValue = 0; + this.eValue = 0; + this.getValue = this.processKeys; + this.m = data2.m; + this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; + }; + TrimModifier.prototype.addShapeToModifier = function(shapeData) { + shapeData.pathsData = []; + }; + TrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) { + var segments = []; + if (e <= 1) { + segments.push({ + s, + e + }); + } else if (s >= 1) { + segments.push({ + s: s - 1, + e: e - 1 + }); + } else { + segments.push({ + s, + e: 1 + }); + segments.push({ + s: 0, + e: e - 1 + }); + } + var shapeSegments = []; + var i; + var len = segments.length; + var segmentOb; + for (i = 0; i < len; i += 1) { + segmentOb = segments[i]; + if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { + var shapeS; + var shapeE; + if (segmentOb.s * totalModifierLength <= addedLength) { + shapeS = 0; + } else { + shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; + } + if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) { + shapeE = 1; + } else { + shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; + } + shapeSegments.push([shapeS, shapeE]); + } + } + if (!shapeSegments.length) { + shapeSegments.push([0, 0]); + } + return shapeSegments; + }; + TrimModifier.prototype.releasePathsData = function(pathsData) { + var i; + var len = pathsData.length; + for (i = 0; i < len; i += 1) { + segmentsLengthPool.release(pathsData[i]); + } + pathsData.length = 0; + return pathsData; + }; + TrimModifier.prototype.processShapes = function(_isFirstFrame) { + var s; + var e; + if (this._mdf || _isFirstFrame) { + var o = this.o.v % 360 / 360; + if (o < 0) { + o += 1; + } + if (this.s.v > 1) { + s = 1 + o; + } else if (this.s.v < 0) { + s = 0 + o; + } else { + s = this.s.v + o; + } + if (this.e.v > 1) { + e = 1 + o; + } else if (this.e.v < 0) { + e = 0 + o; + } else { + e = this.e.v + o; + } + if (s > e) { + var _s = s; + s = e; + e = _s; + } + s = Math.round(s * 1e4) * 1e-4; + e = Math.round(e * 1e4) * 1e-4; + this.sValue = s; + this.eValue = e; + } else { + s = this.sValue; + e = this.eValue; + } + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var pathsData; + var pathData; + var totalShapeLength; + var totalModifierLength = 0; + if (e === s) { + for (i = 0; i < len; i += 1) { + this.shapes[i].localShapeCollection.releaseShapes(); + this.shapes[i].shape._mdf = true; + this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; + if (this._mdf) { + this.shapes[i].pathsData.length = 0; + } + } + } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { + var segments = []; + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) { + shapeData.shape.paths = shapeData.localShapeCollection; + } else { + shapePaths = shapeData.shape.paths; + jLen = shapePaths._length; + totalShapeLength = 0; + if (!shapeData.shape._mdf && shapeData.pathsData.length) { + totalShapeLength = shapeData.totalShapeLength; + } else { + pathsData = this.releasePathsData(shapeData.pathsData); + for (j = 0; j < jLen; j += 1) { + pathData = bez.getSegmentsLength(shapePaths.shapes[j]); + pathsData.push(pathData); + totalShapeLength += pathData.totalLength; + } + shapeData.totalShapeLength = totalShapeLength; + shapeData.pathsData = pathsData; + } + totalModifierLength += totalShapeLength; + shapeData.shape._mdf = true; + } + } + var shapeS = s; + var shapeE = e; + var addedLength = 0; + var edges; + for (i = len - 1; i >= 0; i -= 1) { + shapeData = this.shapes[i]; + if (shapeData.shape._mdf) { + localShapeCollection = shapeData.localShapeCollection; + localShapeCollection.releaseShapes(); + if (this.m === 2 && len > 1) { + edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); + addedLength += shapeData.totalShapeLength; + } else { + edges = [[shapeS, shapeE]]; + } + jLen = edges.length; + for (j = 0; j < jLen; j += 1) { + shapeS = edges[j][0]; + shapeE = edges[j][1]; + segments.length = 0; + if (shapeE <= 1) { + segments.push({ + s: shapeData.totalShapeLength * shapeS, + e: shapeData.totalShapeLength * shapeE + }); + } else if (shapeS >= 1) { + segments.push({ + s: shapeData.totalShapeLength * (shapeS - 1), + e: shapeData.totalShapeLength * (shapeE - 1) + }); + } else { + segments.push({ + s: shapeData.totalShapeLength * shapeS, + e: shapeData.totalShapeLength + }); + segments.push({ + s: 0, + e: shapeData.totalShapeLength * (shapeE - 1) + }); + } + var newShapesData = this.addShapes(shapeData, segments[0]); + if (segments[0].s !== segments[0].e) { + if (segments.length > 1) { + var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1]; + if (lastShapeInCollection.c) { + var lastShape = newShapesData.pop(); + this.addPaths(newShapesData, localShapeCollection); + newShapesData = this.addShapes(shapeData, segments[1], lastShape); + } else { + this.addPaths(newShapesData, localShapeCollection); + newShapesData = this.addShapes(shapeData, segments[1]); + } + } + this.addPaths(newShapesData, localShapeCollection); + } + } + shapeData.shape.paths = localShapeCollection; + } + } + } else if (this._mdf) { + for (i = 0; i < len; i += 1) { + this.shapes[i].pathsData.length = 0; + this.shapes[i].shape._mdf = true; + } + } + }; + TrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) { + var i; + var len = newPaths.length; + for (i = 0; i < len; i += 1) { + localShapeCollection.addShape(newPaths[i]); + } + }; + TrimModifier.prototype.addSegment = function(pt1, pt2, pt3, pt4, shapePath, pos, newShape) { + shapePath.setXYAt(pt2[0], pt2[1], "o", pos); + shapePath.setXYAt(pt3[0], pt3[1], "i", pos + 1); + if (newShape) { + shapePath.setXYAt(pt1[0], pt1[1], "v", pos); + } + shapePath.setXYAt(pt4[0], pt4[1], "v", pos + 1); + }; + TrimModifier.prototype.addSegmentFromArray = function(points, shapePath, pos, newShape) { + shapePath.setXYAt(points[1], points[5], "o", pos); + shapePath.setXYAt(points[2], points[6], "i", pos + 1); + if (newShape) { + shapePath.setXYAt(points[0], points[4], "v", pos); + } + shapePath.setXYAt(points[3], points[7], "v", pos + 1); + }; + TrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath) { + var pathsData = shapeData.pathsData; + var shapePaths = shapeData.shape.paths.shapes; + var i; + var len = shapeData.shape.paths._length; + var j; + var jLen; + var addedLength = 0; + var currentLengthData; + var segmentCount; + var lengths2; + var segment; + var shapes = []; + var initPos; + var newShape = true; + if (!shapePath) { + shapePath = shapePool.newElement(); + segmentCount = 0; + initPos = 0; + } else { + segmentCount = shapePath._length; + initPos = shapePath._length; + } + shapes.push(shapePath); + for (i = 0; i < len; i += 1) { + lengths2 = pathsData[i].lengths; + shapePath.c = shapePaths[i].c; + jLen = shapePaths[i].c ? lengths2.length : lengths2.length + 1; + for (j = 1; j < jLen; j += 1) { + currentLengthData = lengths2[j - 1]; + if (addedLength + currentLengthData.addedLength < shapeSegment.s) { + addedLength += currentLengthData.addedLength; + shapePath.c = false; + } else if (addedLength > shapeSegment.e) { + shapePath.c = false; + break; + } else { + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); + newShape = false; + } else { + 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, lengths2[j - 1]); + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); + newShape = false; + shapePath.c = false; + } + addedLength += currentLengthData.addedLength; + segmentCount += 1; + } + } + if (shapePaths[i].c && lengths2.length) { + currentLengthData = lengths2[j - 1]; + if (addedLength <= shapeSegment.e) { + var segmentLength = lengths2[j - 1].addedLength; + if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { + this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); + newShape = false; + } else { + 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, lengths2[j - 1]); + this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); + newShape = false; + shapePath.c = false; + } + } else { + shapePath.c = false; + } + addedLength += currentLengthData.addedLength; + segmentCount += 1; + } + if (shapePath._length) { + shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], "i", initPos); + shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], "o", shapePath._length - 1); + } + if (addedLength > shapeSegment.e) { + break; + } + if (i < len - 1) { + shapePath = shapePool.newElement(); + newShape = true; + shapes.push(shapePath); + segmentCount = 0; + } + } + return shapes; + }; + extendPrototype([ShapeModifier], PuckerAndBloatModifier); + PuckerAndBloatModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.amount = PropertyFactory.getProp(elem2, data2.a, 0, null, this); + this._isAnimated = !!this.amount.effectsSequence.length; + }; + PuckerAndBloatModifier.prototype.processPath = function(path, amount) { + var percent = amount / 100; + var centerPoint = [0, 0]; + var pathLength = path._length; + var i = 0; + for (i = 0; i < pathLength; i += 1) { + centerPoint[0] += path.v[i][0]; + centerPoint[1] += path.v[i][1]; + } + centerPoint[0] /= pathLength; + centerPoint[1] /= pathLength; + var clonedPath = shapePool.newElement(); + clonedPath.c = path.c; + var vX; + var vY; + var oX; + var oY; + var iX; + var iY; + for (i = 0; i < pathLength; i += 1) { + vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; + vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; + oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; + oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; + iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; + iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); + } + return clonedPath; + }; + PuckerAndBloatModifier.prototype.processShapes = function(_isFirstFrame) { + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var amount = this.amount.v; + if (amount !== 0) { + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + localShapeCollection = shapeData.localShapeCollection; + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { + localShapeCollection.releaseShapes(); + shapeData.shape._mdf = true; + shapePaths = shapeData.shape.paths.shapes; + jLen = shapeData.shape.paths._length; + for (j = 0; j < jLen; j += 1) { + localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); + } + } + shapeData.shape.paths = shapeData.localShapeCollection; + } + } + if (!this.dynamicProperties.length) { + this._mdf = false; + } + }; + const TransformPropertyFactory = function() { + var defaultVector = [0, 0]; + function applyToMatrix(mat) { + var _mdf = this._mdf; + this.iterateDynamicProperties(); + this._mdf = this._mdf || _mdf; + if (this.a) { + mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + } + if (this.s) { + mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + } + if (this.sk) { + mat.skewFromAxis(-this.sk.v, this.sa.v); + } + if (this.r) { + mat.rotate(-this.r.v); + } else { + mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + } + if (this.data.p.s) { + if (this.data.p.z) { + mat.translate(this.px.v, this.py.v, -this.pz.v); + } else { + mat.translate(this.px.v, this.py.v, 0); + } + } else { + mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + } + } + function processKeys(forceRender) { + if (this.elem.globalData.frameId === this.frameId) { + return; + } + if (this._isDirty) { + this.precalculateMatrix(); + this._isDirty = false; + } + this.iterateDynamicProperties(); + if (this._mdf || forceRender) { + var frameRate2; + this.v.cloneFromProps(this.pre.props); + if (this.appliedTransformations < 1) { + this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + } + if (this.appliedTransformations < 2) { + this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + } + if (this.sk && this.appliedTransformations < 3) { + this.v.skewFromAxis(-this.sk.v, this.sa.v); + } + if (this.r && this.appliedTransformations < 4) { + this.v.rotate(-this.r.v); + } else if (!this.r && this.appliedTransformations < 4) { + this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + } + if (this.autoOriented) { + var v12; + var v2; + frameRate2 = this.elem.globalData.frameRate; + if (this.p && this.p.keyframes && this.p.getValueAtTime) { + if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { + v12 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate2, 0); + v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate2, 0); + } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { + v12 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate2, 0); + v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate2, 0); + } else { + v12 = this.p.pv; + v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate2, this.p.offsetTime); + } + } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { + v12 = []; + v2 = []; + var px = this.px; + var py = this.py; + if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { + v12[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate2, 0); + v12[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate2, 0); + v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate2, 0); + v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate2, 0); + } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { + v12[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate2, 0); + v12[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate2, 0); + v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate2, 0); + v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate2, 0); + } else { + v12 = [px.pv, py.pv]; + v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate2, px.offsetTime); + v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate2, py.offsetTime); + } + } else { + v2 = defaultVector; + v12 = v2; + } + this.v.rotate(-Math.atan2(v12[1] - v2[1], v12[0] - v2[0])); + } + if (this.data.p && this.data.p.s) { + if (this.data.p.z) { + this.v.translate(this.px.v, this.py.v, -this.pz.v); + } else { + this.v.translate(this.px.v, this.py.v, 0); + } + } else { + this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); + } + } + this.frameId = this.elem.globalData.frameId; + } + function precalculateMatrix() { + if (!this.a.k) { + this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); + this.appliedTransformations = 1; + } else { + return; + } + if (!this.s.effectsSequence.length) { + this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); + this.appliedTransformations = 2; + } else { + return; + } + if (this.sk) { + if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { + this.pre.skewFromAxis(-this.sk.v, this.sa.v); + this.appliedTransformations = 3; + } else { + return; + } + } + if (this.r) { + if (!this.r.effectsSequence.length) { + this.pre.rotate(-this.r.v); + this.appliedTransformations = 4; + } + } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { + this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); + this.appliedTransformations = 4; + } + } + function autoOrient() { + } + function addDynamicProperty(prop) { + this._addDynamicProperty(prop); + this.elem.addDynamicProperty(prop); + this._isDirty = true; + } + function TransformProperty(elem2, data2, container) { + this.elem = elem2; + this.frameId = -1; + this.propType = "transform"; + this.data = data2; + this.v = new Matrix(); + this.pre = new Matrix(); + this.appliedTransformations = 0; + this.initDynamicPropertyContainer(container || elem2); + if (data2.p && data2.p.s) { + this.px = PropertyFactory.getProp(elem2, data2.p.x, 0, 0, this); + this.py = PropertyFactory.getProp(elem2, data2.p.y, 0, 0, this); + if (data2.p.z) { + this.pz = PropertyFactory.getProp(elem2, data2.p.z, 0, 0, this); + } + } else { + this.p = PropertyFactory.getProp(elem2, data2.p || { k: [0, 0, 0] }, 1, 0, this); + } + if (data2.rx) { + this.rx = PropertyFactory.getProp(elem2, data2.rx, 0, degToRads, this); + this.ry = PropertyFactory.getProp(elem2, data2.ry, 0, degToRads, this); + this.rz = PropertyFactory.getProp(elem2, data2.rz, 0, degToRads, this); + if (data2.or.k[0].ti) { + var i; + var len = data2.or.k.length; + for (i = 0; i < len; i += 1) { + data2.or.k[i].to = null; + data2.or.k[i].ti = null; + } + } + this.or = PropertyFactory.getProp(elem2, data2.or, 1, degToRads, this); + this.or.sh = true; + } else { + this.r = PropertyFactory.getProp(elem2, data2.r || { k: 0 }, 0, degToRads, this); + } + if (data2.sk) { + this.sk = PropertyFactory.getProp(elem2, data2.sk, 0, degToRads, this); + this.sa = PropertyFactory.getProp(elem2, data2.sa, 0, degToRads, this); + } + this.a = PropertyFactory.getProp(elem2, data2.a || { k: [0, 0, 0] }, 1, 0, this); + this.s = PropertyFactory.getProp(elem2, data2.s || { k: [100, 100, 100] }, 1, 0.01, this); + if (data2.o) { + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, elem2); + } else { + this.o = { _mdf: false, v: 1 }; + } + this._isDirty = true; + if (!this.dynamicProperties.length) { + this.getValue(true); + } + } + TransformProperty.prototype = { + applyToMatrix, + getValue: processKeys, + precalculateMatrix, + autoOrient + }; + extendPrototype([DynamicPropertyContainer], TransformProperty); + TransformProperty.prototype.addDynamicProperty = addDynamicProperty; + TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; + function getTransformProperty(elem2, data2, container) { + return new TransformProperty(elem2, data2, container); + } + return { + getTransformProperty + }; + }(); + extendPrototype([ShapeModifier], RepeaterModifier); + RepeaterModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.c = PropertyFactory.getProp(elem2, data2.c, 0, null, this); + this.o = PropertyFactory.getProp(elem2, data2.o, 0, null, this); + this.tr = TransformPropertyFactory.getTransformProperty(elem2, data2.tr, this); + this.so = PropertyFactory.getProp(elem2, data2.tr.so, 0, 0.01, this); + this.eo = PropertyFactory.getProp(elem2, data2.tr.eo, 0, 0.01, this); + this.data = data2; + if (!this.dynamicProperties.length) { + this.getValue(true); + } + this._isAnimated = !!this.dynamicProperties.length; + this.pMatrix = new Matrix(); + this.rMatrix = new Matrix(); + this.sMatrix = new Matrix(); + this.tMatrix = new Matrix(); + this.matrix = new Matrix(); + }; + RepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform2, perc, inv) { + var dir = inv ? -1 : 1; + var scaleX = transform2.s.v[0] + (1 - transform2.s.v[0]) * (1 - perc); + var scaleY = transform2.s.v[1] + (1 - transform2.s.v[1]) * (1 - perc); + pMatrix.translate(transform2.p.v[0] * dir * perc, transform2.p.v[1] * dir * perc, transform2.p.v[2]); + rMatrix.translate(-transform2.a.v[0], -transform2.a.v[1], transform2.a.v[2]); + rMatrix.rotate(-transform2.r.v * dir * perc); + rMatrix.translate(transform2.a.v[0], transform2.a.v[1], transform2.a.v[2]); + sMatrix.translate(-transform2.a.v[0], -transform2.a.v[1], transform2.a.v[2]); + sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); + sMatrix.translate(transform2.a.v[0], transform2.a.v[1], transform2.a.v[2]); + }; + RepeaterModifier.prototype.init = function(elem2, arr, pos, elemsData) { + this.elem = elem2; + this.arr = arr; + this.pos = pos; + this.elemsData = elemsData; + this._currentCopies = 0; + this._elements = []; + this._groups = []; + this.frameId = -1; + this.initDynamicPropertyContainer(elem2); + this.initModifierProperties(elem2, arr[pos]); + while (pos > 0) { + pos -= 1; + this._elements.unshift(arr[pos]); + } + if (this.dynamicProperties.length) { + this.k = true; + } else { + this.getValue(true); + } + }; + RepeaterModifier.prototype.resetElements = function(elements) { + var i; + var len = elements.length; + for (i = 0; i < len; i += 1) { + elements[i]._processed = false; + if (elements[i].ty === "gr") { + this.resetElements(elements[i].it); + } + } + }; + RepeaterModifier.prototype.cloneElements = function(elements) { + var newElements = JSON.parse(JSON.stringify(elements)); + this.resetElements(newElements); + return newElements; + }; + RepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) { + var i; + var len = elements.length; + for (i = 0; i < len; i += 1) { + elements[i]._render = renderFlag; + if (elements[i].ty === "gr") { + this.changeGroupRender(elements[i].it, renderFlag); + } + } + }; + RepeaterModifier.prototype.processShapes = function(_isFirstFrame) { + var items; + var itemsTransform; + var i; + var dir; + var cont; + var hasReloaded = false; + if (this._mdf || _isFirstFrame) { + var copies = Math.ceil(this.c.v); + if (this._groups.length < copies) { + while (this._groups.length < copies) { + var group = { + it: this.cloneElements(this._elements), + ty: "gr" + }; + group.it.push({ + 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" + }); + this.arr.splice(0, 0, group); + this._groups.splice(0, 0, group); + this._currentCopies += 1; + } + this.elem.reloadShapes(); + hasReloaded = true; + } + cont = 0; + var renderFlag; + for (i = 0; i <= this._groups.length - 1; i += 1) { + renderFlag = cont < copies; + this._groups[i]._render = renderFlag; + this.changeGroupRender(this._groups[i].it, renderFlag); + if (!renderFlag) { + var elems = this.elemsData[i].it; + var transformData = elems[elems.length - 1]; + if (transformData.transform.op.v !== 0) { + transformData.transform.op._mdf = true; + transformData.transform.op.v = 0; + } else { + transformData.transform.op._mdf = false; + } + } + cont += 1; + } + this._currentCopies = copies; + var offset = this.o.v; + var offsetModulo = offset % 1; + var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); + var pProps = this.pMatrix.props; + var rProps = this.rMatrix.props; + var sProps = this.sMatrix.props; + this.pMatrix.reset(); + this.rMatrix.reset(); + this.sMatrix.reset(); + this.tMatrix.reset(); + this.matrix.reset(); + var iteration = 0; + if (offset > 0) { + while (iteration < roundOffset) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); + iteration += 1; + } + if (offsetModulo) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); + iteration += offsetModulo; + } + } else if (offset < 0) { + while (iteration > roundOffset) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); + iteration -= 1; + } + if (offsetModulo) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); + iteration -= offsetModulo; + } + } + i = this.data.m === 1 ? 0 : this._currentCopies - 1; + dir = this.data.m === 1 ? 1 : -1; + cont = this._currentCopies; + var j; + var jLen; + while (cont) { + items = this.elemsData[i].it; + itemsTransform = items[items.length - 1].transform.mProps.v.props; + jLen = itemsTransform.length; + items[items.length - 1].transform.mProps._mdf = true; + items[items.length - 1].transform.op._mdf = true; + items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1)); + if (iteration !== 0) { + if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) { + this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); + } + 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]); + 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]); + 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]); + for (j = 0; j < jLen; j += 1) { + itemsTransform[j] = this.matrix.props[j]; + } + this.matrix.reset(); + } else { + this.matrix.reset(); + for (j = 0; j < jLen; j += 1) { + itemsTransform[j] = this.matrix.props[j]; + } + } + iteration += 1; + cont -= 1; + i += dir; + } + } else { + cont = this._currentCopies; + i = 0; + dir = 1; + while (cont) { + items = this.elemsData[i].it; + itemsTransform = items[items.length - 1].transform.mProps.v.props; + items[items.length - 1].transform.mProps._mdf = false; + items[items.length - 1].transform.op._mdf = false; + cont -= 1; + i += dir; + } + } + return hasReloaded; + }; + RepeaterModifier.prototype.addShape = function() { + }; + extendPrototype([ShapeModifier], RoundCornersModifier); + RoundCornersModifier.prototype.initModifierProperties = function(elem2, data2) { + this.getValue = this.processKeys; + this.rd = PropertyFactory.getProp(elem2, data2.r, 0, null, this); + this._isAnimated = !!this.rd.effectsSequence.length; + }; + RoundCornersModifier.prototype.processPath = function(path, round) { + var clonedPath = shapePool.newElement(); + clonedPath.c = path.c; + var i; + var len = path._length; + var currentV; + var currentI; + var currentO; + var closerV; + var distance; + var newPosPerc; + var index2 = 0; + var vX; + var vY; + var oX; + var oY; + var iX; + var iY; + for (i = 0; i < len; i += 1) { + currentV = path.v[i]; + currentO = path.o[i]; + currentI = path.i[i]; + if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) { + if ((i === 0 || i === len - 1) && !path.c) { + clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index2); + index2 += 1; + } else { + if (i === 0) { + closerV = path.v[len - 1]; + } else { + closerV = path.v[i - 1]; + } + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; + iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; + vX = iX; + iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; + vY = iY; + oX = vX - (vX - currentV[0]) * roundCorner; + oY = vY - (vY - currentV[1]) * roundCorner; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); + index2 += 1; + if (i === len - 1) { + closerV = path.v[0]; + } else { + closerV = path.v[i + 1]; + } + distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); + newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; + oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; + vX = oX; + oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; + vY = oY; + iX = vX - (vX - currentV[0]) * roundCorner; + iY = vY - (vY - currentV[1]) * roundCorner; + clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); + index2 += 1; + } + } else { + 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], index2); + index2 += 1; + } + } + return clonedPath; + }; + RoundCornersModifier.prototype.processShapes = function(_isFirstFrame) { + var shapePaths; + var i; + var len = this.shapes.length; + var j; + var jLen; + var rd = this.rd.v; + if (rd !== 0) { + var shapeData; + var localShapeCollection; + for (i = 0; i < len; i += 1) { + shapeData = this.shapes[i]; + localShapeCollection = shapeData.localShapeCollection; + if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { + localShapeCollection.releaseShapes(); + shapeData.shape._mdf = true; + shapePaths = shapeData.shape.paths.shapes; + jLen = shapeData.shape.paths._length; + for (j = 0; j < jLen; j += 1) { + localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); + } + } + shapeData.shape.paths = shapeData.localShapeCollection; + } + } + if (!this.dynamicProperties.length) { + this._mdf = false; + } + }; + const FontManager = function() { + var maxWaitingTime = 5e3; + var emptyChar = { + w: 0, + size: 0, + shapes: [], + data: { + shapes: [] + } + }; + var combinedCharacters = []; + combinedCharacters = combinedCharacters.concat([ + 2304, + 2305, + 2306, + 2307, + 2362, + 2363, + 2364, + 2364, + 2366, + 2367, + 2368, + 2369, + 2370, + 2371, + 2372, + 2373, + 2374, + 2375, + 2376, + 2377, + 2378, + 2379, + 2380, + 2381, + 2382, + 2383, + 2387, + 2388, + 2389, + 2390, + 2391, + 2402, + 2403 + ]); + var surrogateModifiers = [ + "d83cdffb", + "d83cdffc", + "d83cdffd", + "d83cdffe", + "d83cdfff" + ]; + var zeroWidthJoiner = [65039, 8205]; + function trimFontOptions(font) { + var familyArray = font.split(","); + var i; + var len = familyArray.length; + var enabledFamilies = []; + for (i = 0; i < len; i += 1) { + if (familyArray[i] !== "sans-serif" && familyArray[i] !== "monospace") { + enabledFamilies.push(familyArray[i]); + } + } + return enabledFamilies.join(","); + } + function setUpNode(font, family) { + var parentNode = createTag("span"); + parentNode.setAttribute("aria-hidden", true); + parentNode.style.fontFamily = family; + var node = createTag("span"); + node.innerText = "giItT1WQy@!-/#"; + parentNode.style.position = "absolute"; + parentNode.style.left = "-10000px"; + parentNode.style.top = "-10000px"; + parentNode.style.fontSize = "300px"; + parentNode.style.fontVariant = "normal"; + parentNode.style.fontStyle = "normal"; + parentNode.style.fontWeight = "normal"; + parentNode.style.letterSpacing = "0"; + parentNode.appendChild(node); + document.body.appendChild(parentNode); + var width2 = node.offsetWidth; + node.style.fontFamily = trimFontOptions(font) + ", " + family; + return { node, w: width2, parent: parentNode }; + } + function checkLoadedFonts() { + var i; + var len = this.fonts.length; + var node; + var w; + var loadedCount = len; + for (i = 0; i < len; i += 1) { + if (this.fonts[i].loaded) { + loadedCount -= 1; + } else if (this.fonts[i].fOrigin === "n" || this.fonts[i].origin === 0) { + this.fonts[i].loaded = true; + } else { + node = this.fonts[i].monoCase.node; + w = this.fonts[i].monoCase.w; + if (node.offsetWidth !== w) { + loadedCount -= 1; + this.fonts[i].loaded = true; + } else { + node = this.fonts[i].sansCase.node; + w = this.fonts[i].sansCase.w; + if (node.offsetWidth !== w) { + loadedCount -= 1; + this.fonts[i].loaded = true; + } + } + if (this.fonts[i].loaded) { + this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); + this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); + } + } + } + if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) { + setTimeout(this.checkLoadedFontsBinded, 20); + } else { + setTimeout(this.setIsLoadedBinded, 10); + } + } + function createHelper(fontData, def) { + var engine = document.body && def ? "svg" : "canvas"; + var helper; + var fontProps = getFontProperties(fontData); + if (engine === "svg") { + var tHelper = createNS("text"); + tHelper.style.fontSize = "100px"; + tHelper.setAttribute("font-family", fontData.fFamily); + tHelper.setAttribute("font-style", fontProps.style); + tHelper.setAttribute("font-weight", fontProps.weight); + tHelper.textContent = "1"; + if (fontData.fClass) { + tHelper.style.fontFamily = "inherit"; + tHelper.setAttribute("class", fontData.fClass); + } else { + tHelper.style.fontFamily = fontData.fFamily; + } + def.appendChild(tHelper); + helper = tHelper; + } else { + var tCanvasHelper = new OffscreenCanvas(500, 500).getContext("2d"); + tCanvasHelper.font = fontProps.style + " " + fontProps.weight + " 100px " + fontData.fFamily; + helper = tCanvasHelper; + } + function measure(text2) { + if (engine === "svg") { + helper.textContent = text2; + return helper.getComputedTextLength(); + } + return helper.measureText(text2).width; + } + return { + measureText: measure + }; + } + function addFonts(fontData, defs) { + if (!fontData) { + this.isLoaded = true; + return; + } + if (this.chars) { + this.isLoaded = true; + this.fonts = fontData.list; + return; + } + if (!document.body) { + this.isLoaded = true; + fontData.list.forEach((data2) => { + data2.helper = createHelper(data2); + data2.cache = {}; + }); + this.fonts = fontData.list; + return; + } + var fontArr = fontData.list; + var i; + var len = fontArr.length; + var _pendingFonts = len; + for (i = 0; i < len; i += 1) { + var shouldLoadFont = true; + var loadedSelector; + var j; + fontArr[i].loaded = false; + fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, "monospace"); + fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, "sans-serif"); + if (!fontArr[i].fPath) { + fontArr[i].loaded = true; + _pendingFonts -= 1; + } else if (fontArr[i].fOrigin === "p" || fontArr[i].origin === 3) { + loadedSelector = document.querySelectorAll('style[f-forigin="p"][f-family="' + fontArr[i].fFamily + '"], style[f-origin="3"][f-family="' + fontArr[i].fFamily + '"]'); + if (loadedSelector.length > 0) { + shouldLoadFont = false; + } + if (shouldLoadFont) { + var s = createTag("style"); + s.setAttribute("f-forigin", fontArr[i].fOrigin); + s.setAttribute("f-origin", fontArr[i].origin); + s.setAttribute("f-family", fontArr[i].fFamily); + s.type = "text/css"; + s.innerText = "@font-face {font-family: " + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; + defs.appendChild(s); + } + } else if (fontArr[i].fOrigin === "g" || fontArr[i].origin === 1) { + loadedSelector = document.querySelectorAll('link[f-forigin="g"], link[f-origin="1"]'); + for (j = 0; j < loadedSelector.length; j += 1) { + if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) { + shouldLoadFont = false; + } + } + if (shouldLoadFont) { + var l2 = createTag("link"); + l2.setAttribute("f-forigin", fontArr[i].fOrigin); + l2.setAttribute("f-origin", fontArr[i].origin); + l2.type = "text/css"; + l2.rel = "stylesheet"; + l2.href = fontArr[i].fPath; + document.body.appendChild(l2); + } + } else if (fontArr[i].fOrigin === "t" || fontArr[i].origin === 2) { + loadedSelector = document.querySelectorAll('script[f-forigin="t"], script[f-origin="2"]'); + for (j = 0; j < loadedSelector.length; j += 1) { + if (fontArr[i].fPath === loadedSelector[j].src) { + shouldLoadFont = false; + } + } + if (shouldLoadFont) { + var sc = createTag("link"); + sc.setAttribute("f-forigin", fontArr[i].fOrigin); + sc.setAttribute("f-origin", fontArr[i].origin); + sc.setAttribute("rel", "stylesheet"); + sc.setAttribute("href", fontArr[i].fPath); + defs.appendChild(sc); + } + } + fontArr[i].helper = createHelper(fontArr[i], defs); + fontArr[i].cache = {}; + this.fonts.push(fontArr[i]); + } + if (_pendingFonts === 0) { + this.isLoaded = true; + } else { + setTimeout(this.checkLoadedFonts.bind(this), 100); + } + } + function addChars(chars) { + if (!chars) { + return; + } + if (!this.chars) { + this.chars = []; + } + var i; + var len = chars.length; + var j; + var jLen = this.chars.length; + var found; + for (i = 0; i < len; i += 1) { + j = 0; + found = false; + while (j < jLen) { + if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) { + found = true; + } + j += 1; + } + if (!found) { + this.chars.push(chars[i]); + jLen += 1; + } + } + } + function getCharData(char, style, font) { + var i = 0; + var len = this.chars.length; + while (i < len) { + if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) { + return this.chars[i]; + } + i += 1; + } + if ((typeof char === "string" && char.charCodeAt(0) !== 13 || !char) && console && console.warn && !this._warned) { + this._warned = true; + console.warn("Missing character from exported characters list: ", char, style, font); + } + return emptyChar; + } + function measureText(char, fontName, size2) { + var fontData = this.getFontByName(fontName); + var index2 = char.charCodeAt(0); + if (!fontData.cache[index2 + 1]) { + var tHelper = fontData.helper; + if (char === " ") { + var doubleSize = tHelper.measureText("|" + char + "|"); + var singleSize = tHelper.measureText("||"); + fontData.cache[index2 + 1] = (doubleSize - singleSize) / 100; + } else { + fontData.cache[index2 + 1] = tHelper.measureText(char) / 100; + } + } + return fontData.cache[index2 + 1] * size2; + } + function getFontByName(name2) { + var i = 0; + var len = this.fonts.length; + while (i < len) { + if (this.fonts[i].fName === name2) { + return this.fonts[i]; + } + i += 1; + } + return this.fonts[0]; + } + function isModifier(firstCharCode, secondCharCode) { + var sum2 = firstCharCode.toString(16) + secondCharCode.toString(16); + return surrogateModifiers.indexOf(sum2) !== -1; + } + function isZeroWidthJoiner(firstCharCode, secondCharCode) { + if (!secondCharCode) { + return firstCharCode === zeroWidthJoiner[1]; + } + return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1]; + } + function isCombinedCharacter(char) { + return combinedCharacters.indexOf(char) !== -1; + } + function setIsLoaded() { + this.isLoaded = true; + } + var Font3 = function() { + this.fonts = []; + this.chars = null; + this.typekitLoaded = 0; + this.isLoaded = false; + this._warned = false; + this.initTime = Date.now(); + this.setIsLoadedBinded = this.setIsLoaded.bind(this); + this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); + }; + Font3.isModifier = isModifier; + Font3.isZeroWidthJoiner = isZeroWidthJoiner; + Font3.isCombinedCharacter = isCombinedCharacter; + var fontPrototype = { + addChars, + addFonts, + getCharData, + getFontByName, + measureText, + checkLoadedFonts, + setIsLoaded + }; + Font3.prototype = fontPrototype; + return Font3; + }(); + RenderableElement.prototype = { + initRenderable: function() { + this.isInRange = false; + this.hidden = false; + this.isTransparent = false; + this.renderableComponents = []; + }, + addRenderableComponent: function(component) { + if (this.renderableComponents.indexOf(component) === -1) { + this.renderableComponents.push(component); + } + }, + removeRenderableComponent: function(component) { + if (this.renderableComponents.indexOf(component) !== -1) { + this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); + } + }, + prepareRenderableFrame: function(num) { + this.checkLayerLimits(num); + }, + checkTransparency: function() { + if (this.finalTransform.mProp.o.v <= 0) { + if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { + this.isTransparent = true; + this.hide(); + } + } else if (this.isTransparent) { + this.isTransparent = false; + this.show(); + } + }, + /** + * @function + * Initializes frame related properties. + * + * @param {number} num + * current frame number in Layer's time + * + */ + checkLayerLimits: function(num) { + if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { + if (this.isInRange !== true) { + this.globalData._mdf = true; + this._mdf = true; + this.isInRange = true; + this.show(); + } + } else if (this.isInRange !== false) { + this.globalData._mdf = true; + this.isInRange = false; + this.hide(); + } + }, + renderRenderable: function() { + var i; + var len = this.renderableComponents.length; + for (i = 0; i < len; i += 1) { + this.renderableComponents[i].renderFrame(this._isFirstFrame); + } + }, + sourceRectAtTime: function() { + return { + top: 0, + left: 0, + width: 100, + height: 100 + }; + }, + getLayerSize: function() { + if (this.data.ty === 5) { + return { w: this.data.textData.width, h: this.data.textData.height }; + } + return { w: this.data.width, h: this.data.height }; + } + }; + const MaskManagerInterface = function() { + function MaskInterface(mask2, data2) { + this._mask = mask2; + this._data = data2; + } + Object.defineProperty(MaskInterface.prototype, "maskPath", { + get: function() { + if (this._mask.prop.k) { + this._mask.prop.getValue(); + } + return this._mask.prop; + } + }); + Object.defineProperty(MaskInterface.prototype, "maskOpacity", { + get: function() { + if (this._mask.op.k) { + this._mask.op.getValue(); + } + return this._mask.op.v * 100; + } + }); + var MaskManager = function(maskManager) { + var _masksInterfaces = createSizedArray(maskManager.viewData.length); + var i; + var len = maskManager.viewData.length; + for (i = 0; i < len; i += 1) { + _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); + } + var maskFunction = function(name2) { + i = 0; + while (i < len) { + if (maskManager.masksProperties[i].nm === name2) { + return _masksInterfaces[i]; + } + i += 1; + } + return null; + }; + return maskFunction; + }; + return MaskManager; + }(); + const ExpressionPropertyInterface = /* @__PURE__ */ function() { + var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 }; + var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 }; + function completeProperty(expressionValue, property2, type) { + Object.defineProperty(expressionValue, "velocity", { + get: function() { + return property2.getVelocityAtTime(property2.comp.currentFrame); + } + }); + expressionValue.numKeys = property2.keyframes ? property2.keyframes.length : 0; + expressionValue.key = function(pos) { + if (!expressionValue.numKeys) { + return 0; + } + var value2 = ""; + if ("s" in property2.keyframes[pos - 1]) { + value2 = property2.keyframes[pos - 1].s; + } else if ("e" in property2.keyframes[pos - 2]) { + value2 = property2.keyframes[pos - 2].e; + } else { + value2 = property2.keyframes[pos - 2].s; + } + var valueProp = type === "unidimensional" ? new Number(value2) : Object.assign({}, value2); + valueProp.time = property2.keyframes[pos - 1].t / property2.elem.comp.globalData.frameRate; + valueProp.value = type === "unidimensional" ? value2[0] : value2; + return valueProp; + }; + expressionValue.valueAtTime = property2.getValueAtTime; + expressionValue.speedAtTime = property2.getSpeedAtTime; + expressionValue.velocityAtTime = property2.getVelocityAtTime; + expressionValue.propertyGroup = property2.propertyGroup; + } + function UnidimensionalPropertyInterface(property2) { + if (!property2 || !("pv" in property2)) { + property2 = defaultUnidimensionalValue; + } + var mult = 1 / property2.mult; + var val2 = property2.pv * mult; + var expressionValue = new Number(val2); + expressionValue.value = val2; + completeProperty(expressionValue, property2, "unidimensional"); + return function() { + if (property2.k) { + property2.getValue(); + } + val2 = property2.v * mult; + if (expressionValue.value !== val2) { + expressionValue = new Number(val2); + expressionValue.value = val2; + completeProperty(expressionValue, property2, "unidimensional"); + } + return expressionValue; + }; + } + function MultidimensionalPropertyInterface(property2) { + if (!property2 || !("pv" in property2)) { + property2 = defaultMultidimensionalValue; + } + var mult = 1 / property2.mult; + var len = property2.data && property2.data.l || property2.pv.length; + var expressionValue = createTypedArray("float32", len); + var arrValue = createTypedArray("float32", len); + expressionValue.value = arrValue; + completeProperty(expressionValue, property2, "multidimensional"); + return function() { + if (property2.k) { + property2.getValue(); + } + for (var i = 0; i < len; i += 1) { + arrValue[i] = property2.v[i] * mult; + expressionValue[i] = arrValue[i]; + } + return expressionValue; + }; + } + function defaultGetter() { + return defaultUnidimensionalValue; + } + return function(property2) { + if (!property2) { + return defaultGetter; + } + if (property2.propType === "unidimensional") { + return UnidimensionalPropertyInterface(property2); + } + return MultidimensionalPropertyInterface(property2); + }; + }(); + const TransformExpressionInterface = /* @__PURE__ */ function() { + return function(transform2) { + function _thisFunction(name2) { + switch (name2) { + case "scale": + case "Scale": + case "ADBE Scale": + case 6: + return _thisFunction.scale; + case "rotation": + case "Rotation": + case "ADBE Rotation": + case "ADBE Rotate Z": + case 10: + return _thisFunction.rotation; + case "ADBE Rotate X": + return _thisFunction.xRotation; + case "ADBE Rotate Y": + return _thisFunction.yRotation; + case "position": + case "Position": + case "ADBE Position": + case 2: + return _thisFunction.position; + case "ADBE Position_0": + return _thisFunction.xPosition; + case "ADBE Position_1": + return _thisFunction.yPosition; + case "ADBE Position_2": + return _thisFunction.zPosition; + case "anchorPoint": + case "AnchorPoint": + case "Anchor Point": + case "ADBE AnchorPoint": + case 1: + return _thisFunction.anchorPoint; + case "opacity": + case "Opacity": + case 11: + return _thisFunction.opacity; + default: + return null; + } + } + Object.defineProperty(_thisFunction, "rotation", { + get: ExpressionPropertyInterface(transform2.r || transform2.rz) + }); + Object.defineProperty(_thisFunction, "zRotation", { + get: ExpressionPropertyInterface(transform2.rz || transform2.r) + }); + Object.defineProperty(_thisFunction, "xRotation", { + get: ExpressionPropertyInterface(transform2.rx) + }); + Object.defineProperty(_thisFunction, "yRotation", { + get: ExpressionPropertyInterface(transform2.ry) + }); + Object.defineProperty(_thisFunction, "scale", { + get: ExpressionPropertyInterface(transform2.s) + }); + var _px; + var _py; + var _pz; + var _transformFactory; + if (transform2.p) { + _transformFactory = ExpressionPropertyInterface(transform2.p); + } else { + _px = ExpressionPropertyInterface(transform2.px); + _py = ExpressionPropertyInterface(transform2.py); + if (transform2.pz) { + _pz = ExpressionPropertyInterface(transform2.pz); + } + } + Object.defineProperty(_thisFunction, "position", { + get: function() { + if (transform2.p) { + return _transformFactory(); + } + return [ + _px(), + _py(), + _pz ? _pz() : 0 + ]; + } + }); + Object.defineProperty(_thisFunction, "xPosition", { + get: ExpressionPropertyInterface(transform2.px) + }); + Object.defineProperty(_thisFunction, "yPosition", { + get: ExpressionPropertyInterface(transform2.py) + }); + Object.defineProperty(_thisFunction, "zPosition", { + get: ExpressionPropertyInterface(transform2.pz) + }); + Object.defineProperty(_thisFunction, "anchorPoint", { + get: ExpressionPropertyInterface(transform2.a) + }); + Object.defineProperty(_thisFunction, "opacity", { + get: ExpressionPropertyInterface(transform2.o) + }); + Object.defineProperty(_thisFunction, "skew", { + get: ExpressionPropertyInterface(transform2.sk) + }); + Object.defineProperty(_thisFunction, "skewAxis", { + get: ExpressionPropertyInterface(transform2.sa) + }); + Object.defineProperty(_thisFunction, "orientation", { + get: ExpressionPropertyInterface(transform2.or) + }); + return _thisFunction; + }; + }(); + const LayerExpressionInterface = /* @__PURE__ */ function() { + function getMatrix(time2) { + var toWorldMat = new Matrix(); + if (time2 !== void 0) { + var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time2); + propMatrix.clone(toWorldMat); + } else { + var transformMat = this._elem.finalTransform.mProp; + transformMat.applyToMatrix(toWorldMat); + } + return toWorldMat; + } + function toWorldVec(arr, time2) { + var toWorldMat = this.getMatrix(time2); + toWorldMat.props[12] = 0; + toWorldMat.props[13] = 0; + toWorldMat.props[14] = 0; + return this.applyPoint(toWorldMat, arr); + } + function toWorld2(arr, time2) { + var toWorldMat = this.getMatrix(time2); + return this.applyPoint(toWorldMat, arr); + } + function fromWorldVec(arr, time2) { + var toWorldMat = this.getMatrix(time2); + toWorldMat.props[12] = 0; + toWorldMat.props[13] = 0; + toWorldMat.props[14] = 0; + return this.invertPoint(toWorldMat, arr); + } + function fromWorld2(arr, time2) { + var toWorldMat = this.getMatrix(time2); + return this.invertPoint(toWorldMat, arr); + } + function applyPoint(matrix3, arr) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix3); + } + } + return matrix3.applyToPointArray(arr[0], arr[1], arr[2] || 0); + } + function invertPoint(matrix3, arr) { + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix3); + } + } + return matrix3.inversePoint(arr); + } + function fromComp2(arr) { + var toWorldMat = new Matrix(); + toWorldMat.reset(); + this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); + if (this._elem.hierarchy && this._elem.hierarchy.length) { + var i; + var len = this._elem.hierarchy.length; + for (i = 0; i < len; i += 1) { + this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); + } + return toWorldMat.inversePoint(arr); + } + return toWorldMat.inversePoint(arr); + } + function sampleImage() { + return [1, 1, 1, 1]; + } + return function(elem2) { + var transformInterface; + function _registerMaskInterface(maskManager) { + _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem2); + } + function _registerEffectsInterface(effects) { + _thisLayerFunction.effect = effects; + } + function _thisLayerFunction(name2) { + switch (name2) { + case "ADBE Root Vectors Group": + case "Contents": + case 2: + return _thisLayerFunction.shapeInterface; + case 1: + case 6: + case "Transform": + case "transform": + case "ADBE Transform Group": + return transformInterface; + case 4: + case "ADBE Effect Parade": + case "effects": + case "Effects": + return _thisLayerFunction.effect; + case "ADBE Text Properties": + return _thisLayerFunction.textInterface; + default: + return null; + } + } + _thisLayerFunction.getMatrix = getMatrix; + _thisLayerFunction.invertPoint = invertPoint; + _thisLayerFunction.applyPoint = applyPoint; + _thisLayerFunction.toWorld = toWorld2; + _thisLayerFunction.toWorldVec = toWorldVec; + _thisLayerFunction.fromWorld = fromWorld2; + _thisLayerFunction.fromWorldVec = fromWorldVec; + _thisLayerFunction.toComp = toWorld2; + _thisLayerFunction.fromComp = fromComp2; + _thisLayerFunction.sampleImage = sampleImage; + _thisLayerFunction.sourceRectAtTime = elem2.sourceRectAtTime.bind(elem2); + _thisLayerFunction._elem = elem2; + transformInterface = TransformExpressionInterface(elem2.finalTransform.mProp); + var anchorPointDescriptor = getDescriptor(transformInterface, "anchorPoint"); + Object.defineProperties(_thisLayerFunction, { + hasParent: { + get: function() { + return elem2.hierarchy.length; + } + }, + parent: { + get: function() { + return elem2.hierarchy[0].layerInterface; + } + }, + rotation: getDescriptor(transformInterface, "rotation"), + scale: getDescriptor(transformInterface, "scale"), + position: getDescriptor(transformInterface, "position"), + opacity: getDescriptor(transformInterface, "opacity"), + anchorPoint: anchorPointDescriptor, + anchor_point: anchorPointDescriptor, + transform: { + get: function() { + return transformInterface; + } + }, + active: { + get: function() { + return elem2.isInRange; + } + } + }); + _thisLayerFunction.startTime = elem2.data.st; + _thisLayerFunction.index = elem2.data.ind; + _thisLayerFunction.source = elem2.data.refId; + _thisLayerFunction.height = elem2.data.ty === 0 ? elem2.data.h : 100; + _thisLayerFunction.width = elem2.data.ty === 0 ? elem2.data.w : 100; + _thisLayerFunction.inPoint = elem2.data.ip / elem2.comp.globalData.frameRate; + _thisLayerFunction.outPoint = elem2.data.op / elem2.comp.globalData.frameRate; + _thisLayerFunction._name = elem2.data.nm; + _thisLayerFunction.registerMaskInterface = _registerMaskInterface; + _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; + return _thisLayerFunction; + }; + }(); + const propertyGroupFactory = /* @__PURE__ */ function() { + return function(interfaceFunction, parentPropertyGroup) { + return function(val2) { + val2 = val2 === void 0 ? 1 : val2; + if (val2 <= 0) { + return interfaceFunction; + } + return parentPropertyGroup(val2 - 1); + }; + }; + }(); + const PropertyInterface = /* @__PURE__ */ function() { + return function(propertyName, propertyGroup) { + var interfaceFunction = { + _name: propertyName + }; + function _propertyGroup(val2) { + val2 = val2 === void 0 ? 1 : val2; + if (val2 <= 0) { + return interfaceFunction; + } + return propertyGroup(val2 - 1); + } + return _propertyGroup; + }; + }(); + const EffectsExpressionInterface = /* @__PURE__ */ function() { + var ob2 = { + createEffectsInterface + }; + function createEffectsInterface(elem2, propertyGroup) { + if (elem2.effectsManager) { + var effectElements = []; + var effectsData = elem2.data.ef; + var i; + var len = elem2.effectsManager.effectElements.length; + for (i = 0; i < len; i += 1) { + effectElements.push(createGroupInterface(effectsData[i], elem2.effectsManager.effectElements[i], propertyGroup, elem2)); + } + var effects = elem2.data.ef || []; + var groupInterface = function(name2) { + i = 0; + len = effects.length; + while (i < len) { + if (name2 === effects[i].nm || name2 === effects[i].mn || name2 === effects[i].ix) { + return effectElements[i]; + } + i += 1; + } + return null; + }; + Object.defineProperty(groupInterface, "numProperties", { + get: function() { + return effects.length; + } + }); + return groupInterface; + } + return null; + } + function createGroupInterface(data2, elements, propertyGroup, elem2) { + function groupInterface(name2) { + var effects = data2.ef; + var i2 = 0; + var len2 = effects.length; + while (i2 < len2) { + if (name2 === effects[i2].nm || name2 === effects[i2].mn || name2 === effects[i2].ix) { + if (effects[i2].ty === 5) { + return effectElements[i2]; + } + return effectElements[i2](); + } + i2 += 1; + } + throw new Error(); + } + var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); + var effectElements = []; + var i; + var len = data2.ef.length; + for (i = 0; i < len; i += 1) { + if (data2.ef[i].ty === 5) { + effectElements.push(createGroupInterface(data2.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem2)); + } else { + effectElements.push(createValueInterface(elements.effectElements[i], data2.ef[i].ty, elem2, _propertyGroup)); + } + } + if (data2.mn === "ADBE Color Control") { + Object.defineProperty(groupInterface, "color", { + get: function() { + return effectElements[0](); + } + }); + } + Object.defineProperties(groupInterface, { + numProperties: { + get: function() { + return data2.np; + } + }, + _name: { value: data2.nm }, + propertyGroup: { value: _propertyGroup } + }); + groupInterface.enabled = data2.en !== 0; + groupInterface.active = groupInterface.enabled; + return groupInterface; + } + function createValueInterface(element, type, elem2, propertyGroup) { + var expressionProperty = ExpressionPropertyInterface(element.p); + function interfaceFunction() { + if (type === 10) { + return elem2.comp.compInterface(element.p.v); + } + return expressionProperty(); + } + if (element.p.setGroupProperty) { + element.p.setGroupProperty(PropertyInterface("", propertyGroup)); + } + return interfaceFunction; + } + return ob2; + }(); + const CompExpressionInterface = /* @__PURE__ */ function() { + return function(comp2) { + function _thisLayerFunction(name2) { + var i = 0; + var len = comp2.layers.length; + while (i < len) { + if (comp2.layers[i].nm === name2 || comp2.layers[i].ind === name2) { + return comp2.elements[i].layerInterface; + } + i += 1; + } + return null; + } + Object.defineProperty(_thisLayerFunction, "_name", { value: comp2.data.nm }); + _thisLayerFunction.layer = _thisLayerFunction; + _thisLayerFunction.pixelAspect = 1; + _thisLayerFunction.height = comp2.data.h || comp2.globalData.compSize.h; + _thisLayerFunction.width = comp2.data.w || comp2.globalData.compSize.w; + _thisLayerFunction.pixelAspect = 1; + _thisLayerFunction.frameDuration = 1 / comp2.globalData.frameRate; + _thisLayerFunction.displayStartTime = 0; + _thisLayerFunction.numLayers = comp2.layers.length; + return _thisLayerFunction; + }; + }(); + const ShapePathInterface = /* @__PURE__ */ function() { + return function pathInterfaceFactory(shape, view, propertyGroup) { + var prop = view.sh; + function interfaceFunction(val2) { + if (val2 === "Shape" || val2 === "shape" || val2 === "Path" || val2 === "path" || val2 === "ADBE Vector Shape" || val2 === 2) { + return interfaceFunction.path; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + prop.setGroupProperty(PropertyInterface("Path", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + path: { + get: function() { + if (prop.k) { + prop.getValue(); + } + return prop; + } + }, + shape: { + get: function() { + if (prop.k) { + prop.getValue(); + } + return prop; + } + }, + _name: { value: shape.nm }, + ix: { value: shape.ix }, + propertyIndex: { value: shape.ix }, + mn: { value: shape.mn }, + propertyGroup: { value: propertyGroup } + }); + return interfaceFunction; + }; + }(); + const ShapeExpressionInterface = /* @__PURE__ */ function() { + function iterateElements(shapes, view, propertyGroup) { + var arr = []; + var i; + var len = shapes ? shapes.length : 0; + for (i = 0; i < len; i += 1) { + if (shapes[i].ty === "gr") { + arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "fl") { + arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "st") { + arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "tm") { + arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "tr") { + } else if (shapes[i].ty === "el") { + arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "sr") { + arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "sh") { + arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rc") { + arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rd") { + arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "rp") { + arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else if (shapes[i].ty === "gf") { + arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); + } else { + arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup)); + } + } + return arr; + } + function contentsInterfaceFactory(shape, view, propertyGroup) { + var interfaces; + var interfaceFunction = function _interfaceFunction(value2) { + var i = 0; + var len = interfaces.length; + while (i < len) { + if (interfaces[i]._name === value2 || interfaces[i].mn === value2 || interfaces[i].propertyIndex === value2 || interfaces[i].ix === value2 || interfaces[i].ind === value2) { + return interfaces[i]; + } + i += 1; + } + if (typeof value2 === "number") { + return interfaces[value2 - 1]; + } + return null; + }; + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); + interfaceFunction.numProperties = interfaces.length; + var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); + interfaceFunction.transform = transformInterface; + interfaceFunction.propertyIndex = shape.cix; + interfaceFunction._name = shape.nm; + return interfaceFunction; + } + function groupInterfaceFactory(shape, view, propertyGroup) { + var interfaceFunction = function _interfaceFunction(value2) { + switch (value2) { + case "ADBE Vectors Group": + case "Contents": + case 2: + return interfaceFunction.content; + default: + return interfaceFunction.transform; + } + }; + interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var content2 = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); + var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); + interfaceFunction.content = content2; + interfaceFunction.transform = transformInterface; + Object.defineProperty(interfaceFunction, "_name", { + get: function() { + return shape.nm; + } + }); + interfaceFunction.numProperties = shape.np; + interfaceFunction.propertyIndex = shape.ix; + interfaceFunction.nm = shape.nm; + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function fillInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === "Color" || val2 === "color") { + return interfaceFunction.color; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + return null; + } + Object.defineProperties(interfaceFunction, { + color: { + get: ExpressionPropertyInterface(view.c) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.c.setGroupProperty(PropertyInterface("Color", propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); + return interfaceFunction; + } + function gradientFillInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === "Start Point" || val2 === "start point") { + return interfaceFunction.startPoint; + } + if (val2 === "End Point" || val2 === "end point") { + return interfaceFunction.endPoint; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + return null; + } + Object.defineProperties(interfaceFunction, { + startPoint: { + get: ExpressionPropertyInterface(view.s) + }, + endPoint: { + get: ExpressionPropertyInterface(view.e) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + type: { + get: function() { + return "a"; + } + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.s.setGroupProperty(PropertyInterface("Start Point", propertyGroup)); + view.e.setGroupProperty(PropertyInterface("End Point", propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); + return interfaceFunction; + } + function defaultInterfaceFactory() { + function interfaceFunction() { + return null; + } + return interfaceFunction; + } + function strokeInterfaceFactory(shape, view, propertyGroup) { + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); + function addPropertyToDashOb(i2) { + Object.defineProperty(dashOb, shape.d[i2].nm, { + get: ExpressionPropertyInterface(view.d.dataProps[i2].p) + }); + } + var i; + var len = shape.d ? shape.d.length : 0; + var dashOb = {}; + for (i = 0; i < len; i += 1) { + addPropertyToDashOb(i); + view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); + } + function interfaceFunction(val2) { + if (val2 === "Color" || val2 === "color") { + return interfaceFunction.color; + } + if (val2 === "Opacity" || val2 === "opacity") { + return interfaceFunction.opacity; + } + if (val2 === "Stroke Width" || val2 === "stroke width") { + return interfaceFunction.strokeWidth; + } + return null; + } + Object.defineProperties(interfaceFunction, { + color: { + get: ExpressionPropertyInterface(view.c) + }, + opacity: { + get: ExpressionPropertyInterface(view.o) + }, + strokeWidth: { + get: ExpressionPropertyInterface(view.w) + }, + dash: { + get: function() { + return dashOb; + } + }, + _name: { value: shape.nm }, + mn: { value: shape.mn } + }); + view.c.setGroupProperty(PropertyInterface("Color", _propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + view.w.setGroupProperty(PropertyInterface("Stroke Width", _propertyGroup)); + return interfaceFunction; + } + function trimInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(val2) { + if (val2 === shape.e.ix || val2 === "End" || val2 === "end") { + return interfaceFunction.end; + } + if (val2 === shape.s.ix) { + return interfaceFunction.start; + } + if (val2 === shape.o.ix) { + return interfaceFunction.offset; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaceFunction.propertyIndex = shape.ix; + view.s.setGroupProperty(PropertyInterface("Start", _propertyGroup)); + view.e.setGroupProperty(PropertyInterface("End", _propertyGroup)); + view.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); + interfaceFunction.propertyIndex = shape.ix; + interfaceFunction.propertyGroup = propertyGroup; + Object.defineProperties(interfaceFunction, { + start: { + get: ExpressionPropertyInterface(view.s) + }, + end: { + get: ExpressionPropertyInterface(view.e) + }, + offset: { + get: ExpressionPropertyInterface(view.o) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function transformInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.a.ix === value2 || value2 === "Anchor Point") { + return interfaceFunction.anchorPoint; + } + if (shape.o.ix === value2 || value2 === "Opacity") { + return interfaceFunction.opacity; + } + if (shape.p.ix === value2 || value2 === "Position") { + return interfaceFunction.position; + } + if (shape.r.ix === value2 || value2 === "Rotation" || value2 === "ADBE Vector Rotation") { + return interfaceFunction.rotation; + } + if (shape.s.ix === value2 || value2 === "Scale") { + return interfaceFunction.scale; + } + if (shape.sk && shape.sk.ix === value2 || value2 === "Skew") { + return interfaceFunction.skew; + } + if (shape.sa && shape.sa.ix === value2 || value2 === "Skew Axis") { + return interfaceFunction.skewAxis; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + view.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + view.transform.mProps.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + view.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point", _propertyGroup)); + view.transform.mProps.s.setGroupProperty(PropertyInterface("Scale", _propertyGroup)); + view.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + if (view.transform.mProps.sk) { + view.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew", _propertyGroup)); + view.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle", _propertyGroup)); + } + view.transform.op.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + opacity: { + get: ExpressionPropertyInterface(view.transform.mProps.o) + }, + position: { + get: ExpressionPropertyInterface(view.transform.mProps.p) + }, + anchorPoint: { + get: ExpressionPropertyInterface(view.transform.mProps.a) + }, + scale: { + get: ExpressionPropertyInterface(view.transform.mProps.s) + }, + rotation: { + get: ExpressionPropertyInterface(view.transform.mProps.r) + }, + skew: { + get: ExpressionPropertyInterface(view.transform.mProps.sk) + }, + skewAxis: { + get: ExpressionPropertyInterface(view.transform.mProps.sa) + }, + _name: { value: shape.nm } + }); + interfaceFunction.ty = "tr"; + interfaceFunction.mn = shape.mn; + interfaceFunction.propertyGroup = propertyGroup; + return interfaceFunction; + } + function ellipseInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.s.ix === value2) { + return interfaceFunction.size; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + interfaceFunction.propertyIndex = shape.ix; + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + size: { + get: ExpressionPropertyInterface(prop.s) + }, + position: { + get: ExpressionPropertyInterface(prop.p) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function starInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.r.ix === value2) { + return interfaceFunction.rotation; + } + if (shape.pt.ix === value2) { + return interfaceFunction.points; + } + if (shape.or.ix === value2 || value2 === "ADBE Vector Star Outer Radius") { + return interfaceFunction.outerRadius; + } + if (shape.os.ix === value2) { + return interfaceFunction.outerRoundness; + } + if (shape.ir && (shape.ir.ix === value2 || value2 === "ADBE Vector Star Inner Radius")) { + return interfaceFunction.innerRadius; + } + if (shape.is && shape.is.ix === value2) { + return interfaceFunction.innerRoundness; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + interfaceFunction.propertyIndex = shape.ix; + prop.or.setGroupProperty(PropertyInterface("Outer Radius", _propertyGroup)); + prop.os.setGroupProperty(PropertyInterface("Outer Roundness", _propertyGroup)); + prop.pt.setGroupProperty(PropertyInterface("Points", _propertyGroup)); + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + if (shape.ir) { + prop.ir.setGroupProperty(PropertyInterface("Inner Radius", _propertyGroup)); + prop.is.setGroupProperty(PropertyInterface("Inner Roundness", _propertyGroup)); + } + Object.defineProperties(interfaceFunction, { + position: { + get: ExpressionPropertyInterface(prop.p) + }, + rotation: { + get: ExpressionPropertyInterface(prop.r) + }, + points: { + get: ExpressionPropertyInterface(prop.pt) + }, + outerRadius: { + get: ExpressionPropertyInterface(prop.or) + }, + outerRoundness: { + get: ExpressionPropertyInterface(prop.os) + }, + innerRadius: { + get: ExpressionPropertyInterface(prop.ir) + }, + innerRoundness: { + get: ExpressionPropertyInterface(prop.is) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function rectInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.p.ix === value2) { + return interfaceFunction.position; + } + if (shape.r.ix === value2) { + return interfaceFunction.roundness; + } + if (shape.s.ix === value2 || value2 === "Size" || value2 === "ADBE Vector Rect Size") { + return interfaceFunction.size; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; + interfaceFunction.propertyIndex = shape.ix; + prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); + prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); + prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + position: { + get: ExpressionPropertyInterface(prop.p) + }, + roundness: { + get: ExpressionPropertyInterface(prop.r) + }, + size: { + get: ExpressionPropertyInterface(prop.s) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function roundedInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.r.ix === value2 || value2 === "Round Corners 1") { + return interfaceFunction.radius; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view; + interfaceFunction.propertyIndex = shape.ix; + prop.rd.setGroupProperty(PropertyInterface("Radius", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + radius: { + get: ExpressionPropertyInterface(prop.rd) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + function repeaterInterfaceFactory(shape, view, propertyGroup) { + function interfaceFunction(value2) { + if (shape.c.ix === value2 || value2 === "Copies") { + return interfaceFunction.copies; + } + if (shape.o.ix === value2 || value2 === "Offset") { + return interfaceFunction.offset; + } + return null; + } + var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); + var prop = view; + interfaceFunction.propertyIndex = shape.ix; + prop.c.setGroupProperty(PropertyInterface("Copies", _propertyGroup)); + prop.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); + Object.defineProperties(interfaceFunction, { + copies: { + get: ExpressionPropertyInterface(prop.c) + }, + offset: { + get: ExpressionPropertyInterface(prop.o) + }, + _name: { value: shape.nm } + }); + interfaceFunction.mn = shape.mn; + return interfaceFunction; + } + return function(shapes, view, propertyGroup) { + var interfaces; + function _interfaceFunction(value2) { + if (typeof value2 === "number") { + value2 = value2 === void 0 ? 1 : value2; + if (value2 === 0) { + return propertyGroup; + } + return interfaces[value2 - 1]; + } + var i = 0; + var len = interfaces.length; + while (i < len) { + if (interfaces[i]._name === value2) { + return interfaces[i]; + } + i += 1; + } + return null; + } + function parentGroupWrapper() { + return propertyGroup; + } + _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); + interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); + _interfaceFunction.numProperties = interfaces.length; + _interfaceFunction._name = "Contents"; + return _interfaceFunction; + }; + }(); + const TextExpressionInterface = /* @__PURE__ */ function() { + return function(elem2) { + var _prevValue; + var _sourceText; + function _thisLayerFunction(name2) { + switch (name2) { + case "ADBE Text Document": + return _thisLayerFunction.sourceText; + default: + return null; + } + } + Object.defineProperty(_thisLayerFunction, "sourceText", { + get: function() { + elem2.textProperty.getValue(); + var stringValue = elem2.textProperty.currentData.t; + if (stringValue !== _prevValue) { + elem2.textProperty.currentData.t = _prevValue; + _sourceText = new String(stringValue); + _sourceText.value = stringValue || new String(stringValue); + } + return _sourceText; + } + }); + return _thisLayerFunction; + }; + }(); + const getBlendMode = /* @__PURE__ */ function() { + var blendModeEnums = { + 0: "source-over", + 1: "multiply", + 2: "screen", + 3: "overlay", + 4: "darken", + 5: "lighten", + 6: "color-dodge", + 7: "color-burn", + 8: "hard-light", + 9: "soft-light", + 10: "difference", + 11: "exclusion", + 12: "hue", + 13: "saturation", + 14: "color", + 15: "luminosity" + }; + return function(mode) { + return blendModeEnums[mode] || ""; + }; + }(); + extendPrototype([DynamicPropertyContainer], GroupEffect); + GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; + GroupEffect.prototype.init = function(data2, element) { + this.data = data2; + this.effectElements = []; + this.initDynamicPropertyContainer(element); + var i; + var len = this.data.ef.length; + var eff; + var effects = this.data.ef; + for (i = 0; i < len; i += 1) { + eff = null; + switch (effects[i].ty) { + case 0: + eff = new SliderEffect(effects[i], element, this); + break; + case 1: + eff = new AngleEffect(effects[i], element, this); + break; + case 2: + eff = new ColorEffect(effects[i], element, this); + break; + case 3: + eff = new PointEffect(effects[i], element, this); + break; + case 4: + case 7: + eff = new CheckboxEffect(effects[i], element, this); + break; + case 10: + eff = new LayerIndexEffect(effects[i], element, this); + break; + case 11: + eff = new MaskIndexEffect(effects[i], element, this); + break; + case 5: + eff = new EffectsManager(effects[i], element, this); + break; + default: + eff = new NoValueEffect(effects[i], element, this); + break; + } + if (eff) { + this.effectElements.push(eff); + } + } + }; + BaseElement.prototype = { + checkMasks: function() { + if (!this.data.hasMask) { + return false; + } + var i = 0; + var len = this.data.masksProperties.length; + while (i < len) { + if (this.data.masksProperties[i].mode !== "n" && this.data.masksProperties[i].cl !== false) { + return true; + } + i += 1; + } + return false; + }, + initExpressions: function() { + this.layerInterface = LayerExpressionInterface(this); + if (this.data.hasMask && this.maskManager) { + this.layerInterface.registerMaskInterface(this.maskManager); + } + var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); + this.layerInterface.registerEffectsInterface(effectsInterface); + if (this.data.ty === 0 || this.data.xt) { + this.compInterface = CompExpressionInterface(this); + } else if (this.data.ty === 4) { + this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); + this.layerInterface.content = this.layerInterface.shapeInterface; + } else if (this.data.ty === 5) { + this.layerInterface.textInterface = TextExpressionInterface(this); + this.layerInterface.text = this.layerInterface.textInterface; + } + }, + setBlendMode: function() { + var blendModeValue = getBlendMode(this.data.bm); + var elem2 = this.baseElement || this.layerElement; + elem2.style["mix-blend-mode"] = blendModeValue; + }, + initBaseData: function(data2, globalData2, comp2) { + this.globalData = globalData2; + this.comp = comp2; + this.data = data2; + this.layerId = createElementID(); + if (!this.data.sr) { + this.data.sr = 1; + } + this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); + }, + getType: function() { + return this.type; + }, + sourceRectAtTime: function() { + } + }; + FrameElement.prototype = { + /** + * @function + * Initializes frame related properties. + * + */ + initFrame: function() { + this._isFirstFrame = false; + this.dynamicProperties = []; + this._mdf = false; + }, + /** + * @function + * Calculates all dynamic values + * + * @param {number} num + * current frame number in Layer's time + * @param {boolean} isVisible + * if layers is currently in range + * + */ + prepareProperties: function(num, isVisible) { + var i; + var len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + if (isVisible || this._isParent && this.dynamicProperties[i].propType === "transform") { + this.dynamicProperties[i].getValue(); + if (this.dynamicProperties[i]._mdf) { + this.globalData._mdf = true; + this._mdf = true; + } + } + } + }, + addDynamicProperty: function(prop) { + if (this.dynamicProperties.indexOf(prop) === -1) { + this.dynamicProperties.push(prop); + } + } + }; + const FootageInterface = /* @__PURE__ */ function() { + var outlineInterfaceFactory = function(elem2) { + var currentPropertyName = ""; + var currentProperty = elem2.getFootageData(); + function init() { + currentPropertyName = ""; + currentProperty = elem2.getFootageData(); + return searchProperty; + } + function searchProperty(value2) { + if (currentProperty[value2]) { + currentPropertyName = value2; + currentProperty = currentProperty[value2]; + if (typeof currentProperty === "object") { + return searchProperty; + } + return currentProperty; + } + var propertyNameIndex = value2.indexOf(currentPropertyName); + if (propertyNameIndex !== -1) { + var index2 = parseInt(value2.substr(propertyNameIndex + currentPropertyName.length), 10); + currentProperty = currentProperty[index2]; + if (typeof currentProperty === "object") { + return searchProperty; + } + return currentProperty; + } + return ""; + } + return init; + }; + var dataInterfaceFactory = function(elem2) { + function interfaceFunction(value2) { + if (value2 === "Outline") { + return interfaceFunction.outlineInterface(); + } + return null; + } + interfaceFunction._name = "Outline"; + interfaceFunction.outlineInterface = outlineInterfaceFactory(elem2); + return interfaceFunction; + }; + return function(elem2) { + function _interfaceFunction(value2) { + if (value2 === "Data") { + return _interfaceFunction.dataInterface; + } + return null; + } + _interfaceFunction._name = "Data"; + _interfaceFunction.dataInterface = dataInterfaceFactory(elem2); + return _interfaceFunction; + }; + }(); + FootageElement.prototype.prepareFrame = function() { + }; + extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement); + FootageElement.prototype.getBaseElement = function() { + return null; + }; + FootageElement.prototype.renderFrame = function() { + }; + FootageElement.prototype.destroy = function() { + }; + FootageElement.prototype.initExpressions = function() { + this.layerInterface = FootageInterface(this); + }; + FootageElement.prototype.getFootageData = function() { + return this.footageData; + }; + AudioElement.prototype.prepareFrame = function(num) { + this.prepareRenderableFrame(num, true); + this.prepareProperties(num, true); + if (!this.tm._placeholder) { + var timeRemapped = this.tm.v; + this._currentTime = timeRemapped; + } else { + this._currentTime = num / this.data.sr; + } + this._volume = this.lv.v[0]; + var totalVolume = this._volume * this._volumeMultiplier; + if (this._previousVolume !== totalVolume) { + this._previousVolume = totalVolume; + this.audio.volume(totalVolume); + } + }; + extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement); + AudioElement.prototype.renderFrame = function() { + if (this.isInRange && this._canPlay) { + if (!this._isPlaying) { + this.audio.play(); + this.audio.seek(this._currentTime / this.globalData.frameRate); + this._isPlaying = true; + } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) { + this.audio.seek(this._currentTime / this.globalData.frameRate); + } + } + }; + AudioElement.prototype.show = function() { + }; + AudioElement.prototype.hide = function() { + this.audio.pause(); + this._isPlaying = false; + }; + AudioElement.prototype.pause = function() { + this.audio.pause(); + this._isPlaying = false; + this._canPlay = false; + }; + AudioElement.prototype.resume = function() { + this._canPlay = true; + }; + AudioElement.prototype.setRate = function(rateValue) { + this.audio.rate(rateValue); + }; + AudioElement.prototype.volume = function(volumeValue) { + this._volumeMultiplier = volumeValue; + this._previousVolume = volumeValue * this._volume; + this.audio.volume(this._previousVolume); + }; + AudioElement.prototype.getBaseElement = function() { + return null; + }; + AudioElement.prototype.destroy = function() { + }; + AudioElement.prototype.sourceRectAtTime = function() { + }; + AudioElement.prototype.initExpressions = function() { + }; + BaseRenderer.prototype.checkLayers = function(num) { + var i; + var len = this.layers.length; + var data2; + this.completeLayers = true; + for (i = len - 1; i >= 0; i -= 1) { + if (!this.elements[i]) { + data2 = this.layers[i]; + if (data2.ip - data2.st <= num - this.layers[i].st && data2.op - data2.st > num - this.layers[i].st) { + this.buildItem(i); + } + } + this.completeLayers = this.elements[i] ? this.completeLayers : false; + } + this.checkPendingElements(); + }; + BaseRenderer.prototype.createItem = function(layer) { + switch (layer.ty) { + case 2: + return this.createImage(layer); + case 0: + return this.createComp(layer); + case 1: + return this.createSolid(layer); + case 3: + return this.createNull(layer); + case 4: + return this.createShape(layer); + case 5: + return this.createText(layer); + case 6: + return this.createAudio(layer); + case 13: + return this.createCamera(layer); + case 15: + return this.createFootage(layer); + default: + return this.createNull(layer); + } + }; + BaseRenderer.prototype.createCamera = function() { + throw new Error("You're using a 3d camera. Try the html renderer."); + }; + BaseRenderer.prototype.createAudio = function(data2) { + return new AudioElement(data2, this.globalData, this); + }; + BaseRenderer.prototype.createFootage = function(data2) { + return new FootageElement(data2, this.globalData, this); + }; + BaseRenderer.prototype.buildAllItems = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + this.buildItem(i); + } + this.checkPendingElements(); + }; + BaseRenderer.prototype.includeLayers = function(newLayers) { + this.completeLayers = false; + var i; + var len = newLayers.length; + var j; + var jLen = this.layers.length; + for (i = 0; i < len; i += 1) { + j = 0; + while (j < jLen) { + if (this.layers[j].id === newLayers[i].id) { + this.layers[j] = newLayers[i]; + break; + } + j += 1; + } + } + }; + BaseRenderer.prototype.setProjectInterface = function(pInterface) { + this.globalData.projectInterface = pInterface; + }; + BaseRenderer.prototype.initItems = function() { + if (!this.globalData.progressiveLoad) { + this.buildAllItems(); + } + }; + BaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy) { + var elements = this.elements; + var layers = this.layers; + var i = 0; + var len = layers.length; + while (i < len) { + if (layers[i].ind == parentName) { + if (!elements[i] || elements[i] === true) { + this.buildItem(i); + this.addPendingElement(element); + } else { + hierarchy.push(elements[i]); + elements[i].setAsParent(); + if (layers[i].parent !== void 0) { + this.buildElementParenting(element, layers[i].parent, hierarchy); + } else { + element.setHierarchy(hierarchy); + } + } + } + i += 1; + } + }; + BaseRenderer.prototype.addPendingElement = function(element) { + this.pendingElements.push(element); + }; + BaseRenderer.prototype.searchExtraCompositions = function(assets) { + var i; + var len = assets.length; + for (i = 0; i < len; i += 1) { + if (assets[i].xt) { + var comp2 = this.createComp(assets[i]); + comp2.initExpressions(); + this.globalData.projectInterface.registerComposition(comp2); + } + } + }; + BaseRenderer.prototype.getElementByPath = function(path) { + var pathValue = path.shift(); + var element; + if (typeof pathValue === "number") { + element = this.elements[pathValue]; + } else { + var i; + var len = this.elements.length; + for (i = 0; i < len; i += 1) { + if (this.elements[i].data.nm === pathValue) { + element = this.elements[i]; + break; + } + } + } + if (path.length === 0) { + return element; + } + return element.getElementByPath(path); + }; + BaseRenderer.prototype.setupGlobalData = function(animData, fontsContainer) { + this.globalData.fontManager = new FontManager(); + this.globalData.fontManager.addChars(animData.chars); + this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); + this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); + this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); + this.globalData.imageLoader = this.animationItem.imagePreloader; + this.globalData.audioController = this.animationItem.audioController; + this.globalData.frameId = 0; + this.globalData.frameRate = animData.fr; + this.globalData.nm = animData.nm; + this.globalData.compSize = { + w: animData.w, + h: animData.h + }; + }; + TransformElement.prototype = { + initTransform: function() { + this.finalTransform = { + mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 }, + _matMdf: false, + _opMdf: false, + mat: new Matrix() + }; + if (this.data.ao) { + this.finalTransform.mProp.autoOriented = true; + } + if (this.data.ty !== 11) { + } + }, + renderTransform: function() { + this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; + this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; + if (this.hierarchy) { + var mat; + var finalMat = this.finalTransform.mat; + var i = 0; + var len = this.hierarchy.length; + if (!this.finalTransform._matMdf) { + while (i < len) { + if (this.hierarchy[i].finalTransform.mProp._mdf) { + this.finalTransform._matMdf = true; + break; + } + i += 1; + } + } + if (this.finalTransform._matMdf) { + mat = this.finalTransform.mProp.v.props; + finalMat.cloneFromProps(mat); + for (i = 0; i < len; i += 1) { + mat = this.hierarchy[i].finalTransform.mProp.v.props; + 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]); + } + } + } + }, + globalToLocal: function(pt) { + var transforms = []; + transforms.push(this.finalTransform); + var flag = true; + var comp2 = this.comp; + while (flag) { + if (comp2.finalTransform) { + if (comp2.data.hasMask) { + transforms.splice(0, 0, comp2.finalTransform); + } + comp2 = comp2.comp; + } else { + flag = false; + } + } + var i; + var len = transforms.length; + var ptNew; + for (i = 0; i < len; i += 1) { + ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); + pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0]; + } + return pt; + }, + mHelper: new Matrix() + }; + MaskElement.prototype.getMaskProperty = function(pos) { + return this.viewData[pos].prop; + }; + MaskElement.prototype.renderFrame = function(isFirstFrame) { + var finalMat = this.element.finalTransform.mat; + var i; + var len = this.masksProperties.length; + for (i = 0; i < len; i += 1) { + if (this.viewData[i].prop._mdf || isFirstFrame) { + this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); + } + if (this.viewData[i].op._mdf || isFirstFrame) { + this.viewData[i].elem.setAttribute("fill-opacity", this.viewData[i].op.v); + } + if (this.masksProperties[i].mode !== "n") { + if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) { + this.viewData[i].invRect.setAttribute("transform", finalMat.getInverseMatrix().to2dCSS()); + } + if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { + var feMorph = this.storedData[i].expan; + if (this.storedData[i].x.v < 0) { + if (this.storedData[i].lastOperator !== "erode") { + this.storedData[i].lastOperator = "erode"; + this.storedData[i].elem.setAttribute("filter", "url(" + getLocationHref() + "#" + this.storedData[i].filterId + ")"); + } + feMorph.setAttribute("radius", -this.storedData[i].x.v); + } else { + if (this.storedData[i].lastOperator !== "dilate") { + this.storedData[i].lastOperator = "dilate"; + this.storedData[i].elem.setAttribute("filter", null); + } + this.storedData[i].elem.setAttribute("stroke-width", this.storedData[i].x.v * 2); + } + } + } + } + }; + MaskElement.prototype.getMaskelement = function() { + return this.maskElement; + }; + MaskElement.prototype.createLayerSolidPath = function() { + var path = "M0,0 "; + path += " h" + this.globalData.compSize.w; + path += " v" + this.globalData.compSize.h; + path += " h-" + this.globalData.compSize.w; + path += " v-" + this.globalData.compSize.h + " "; + return path; + }; + MaskElement.prototype.drawPath = function(pathData, pathNodes, viewData) { + var pathString = " M" + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; + var i; + var len; + len = pathNodes._length; + for (i = 1; i < len; i += 1) { + 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]; + } + if (pathNodes.c && len > 1) { + 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]; + } + if (viewData.lastPath !== pathString) { + var pathShapeValue = ""; + if (viewData.elem) { + if (pathNodes.c) { + pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; + } + viewData.elem.setAttribute("d", pathShapeValue); + } + viewData.lastPath = pathString; + } + }; + MaskElement.prototype.destroy = function() { + this.element = null; + this.globalData = null; + this.maskElement = null; + this.data = null; + this.masksProperties = null; + }; + const filtersFactory = function() { + var ob2 = {}; + ob2.createFilter = createFilter; + ob2.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; + function createFilter(filId, skipCoordinates) { + var fil = createNS("filter"); + fil.setAttribute("id", filId); + if (skipCoordinates !== true) { + fil.setAttribute("filterUnits", "objectBoundingBox"); + fil.setAttribute("x", "0%"); + fil.setAttribute("y", "0%"); + fil.setAttribute("width", "100%"); + fil.setAttribute("height", "100%"); + } + return fil; + } + function createAlphaToLuminanceFilter() { + var feColorMatrix = createNS("feColorMatrix"); + feColorMatrix.setAttribute("type", "matrix"); + feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); + feColorMatrix.setAttribute("values", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"); + return feColorMatrix; + } + return ob2; + }(); + const featureSupport = function() { + var ob2 = { + maskType: true + }; + 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)) { + ob2.maskType = false; + } + return ob2; + }(); + registeredEffects = {}; + idPrefix = "filter_result_"; + SVGEffects.prototype.renderFrame = function(_isFirstFrame) { + var i; + var len = this.filters.length; + for (i = 0; i < len; i += 1) { + this.filters[i].renderFrame(_isFirstFrame); + } + }; + SVGBaseElement.prototype = { + initRendererElement: function() { + this.layerElement = createNS("g"); + }, + createContainerElements: function() { + this.matteElement = createNS("g"); + this.transformedElement = this.layerElement; + this.maskedElement = this.layerElement; + this._sizeChanged = false; + var layerElementParent = null; + var filId; + var fil; + var gg; + if (this.data.td) { + if (this.data.td == 3 || this.data.td == 1) { + var masker = createNS("mask"); + masker.setAttribute("id", this.layerId); + masker.setAttribute("mask-type", this.data.td == 3 ? "luminance" : "alpha"); + masker.appendChild(this.layerElement); + layerElementParent = masker; + this.globalData.defs.appendChild(masker); + if (!featureSupport.maskType && this.data.td == 1) { + masker.setAttribute("mask-type", "luminance"); + filId = createElementID(); + fil = filtersFactory.createFilter(filId); + this.globalData.defs.appendChild(fil); + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); + gg = createNS("g"); + gg.appendChild(this.layerElement); + layerElementParent = gg; + masker.appendChild(gg); + gg.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + } + } else if (this.data.td == 2) { + var maskGroup = createNS("mask"); + maskGroup.setAttribute("id", this.layerId); + maskGroup.setAttribute("mask-type", "alpha"); + var maskGrouper = createNS("g"); + maskGroup.appendChild(maskGrouper); + filId = createElementID(); + fil = filtersFactory.createFilter(filId); + var feCTr = createNS("feComponentTransfer"); + feCTr.setAttribute("in", "SourceGraphic"); + fil.appendChild(feCTr); + var feFunc = createNS("feFuncA"); + feFunc.setAttribute("type", "table"); + feFunc.setAttribute("tableValues", "1.0 0.0"); + feCTr.appendChild(feFunc); + this.globalData.defs.appendChild(fil); + var alphaRect = createNS("rect"); + alphaRect.setAttribute("width", this.comp.data.w); + alphaRect.setAttribute("height", this.comp.data.h); + alphaRect.setAttribute("x", "0"); + alphaRect.setAttribute("y", "0"); + alphaRect.setAttribute("fill", "#ffffff"); + alphaRect.setAttribute("opacity", "0"); + maskGrouper.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); + maskGrouper.appendChild(alphaRect); + maskGrouper.appendChild(this.layerElement); + layerElementParent = maskGrouper; + if (!featureSupport.maskType) { + maskGroup.setAttribute("mask-type", "luminance"); + fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); + gg = createNS("g"); + maskGrouper.appendChild(alphaRect); + gg.appendChild(this.layerElement); + layerElementParent = gg; + maskGrouper.appendChild(gg); + } + this.globalData.defs.appendChild(maskGroup); + } + } else if (this.data.tt) { + this.matteElement.appendChild(this.layerElement); + layerElementParent = this.matteElement; + this.baseElement = this.matteElement; + } else { + this.baseElement = this.layerElement; + } + if (this.data.ln) { + this.layerElement.setAttribute("id", this.data.ln); + } + if (this.data.cl) { + this.layerElement.setAttribute("class", this.data.cl); + } + if (this.data.ty === 0 && !this.data.hd) { + var cp = createNS("clipPath"); + var pt = createNS("path"); + pt.setAttribute("d", "M0,0 L" + this.data.w + ",0 L" + this.data.w + "," + this.data.h + " L0," + this.data.h + "z"); + var clipId = createElementID(); + cp.setAttribute("id", clipId); + cp.appendChild(pt); + this.globalData.defs.appendChild(cp); + if (this.checkMasks()) { + var cpGroup = createNS("g"); + cpGroup.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); + cpGroup.appendChild(this.layerElement); + this.transformedElement = cpGroup; + if (layerElementParent) { + layerElementParent.appendChild(this.transformedElement); + } else { + this.baseElement = this.transformedElement; + } + } else { + this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); + } + } + if (this.data.bm !== 0) { + this.setBlendMode(); + } + }, + renderElement: function() { + if (this.finalTransform._matMdf) { + this.transformedElement.setAttribute("transform", this.finalTransform.mat.to2dCSS()); + } + if (this.finalTransform._opMdf) { + this.transformedElement.setAttribute("opacity", this.finalTransform.mProp.o.v); + } + }, + destroyBaseElement: function() { + this.layerElement = null; + this.matteElement = null; + this.maskManager.destroy(); + }, + getBaseElement: function() { + if (this.data.hd) { + return null; + } + return this.baseElement; + }, + createRenderableComponents: function() { + this.maskManager = new MaskElement(this.data, this, this.globalData); + this.renderableEffectsManager = new SVGEffects(this); + }, + setMatte: function(id) { + if (!this.matteElement) { + return; + } + this.matteElement.setAttribute("mask", "url(" + getLocationHref() + "#" + id + ")"); + } + }; + HierarchyElement.prototype = { + /** + * @function + * Initializes hierarchy properties + * + */ + initHierarchy: function() { + this.hierarchy = []; + this._isParent = false; + this.checkParenting(); + }, + /** + * @function + * Sets layer's hierarchy. + * @param {array} hierarch + * layer's parent list + * + */ + setHierarchy: function(hierarchy) { + this.hierarchy = hierarchy; + }, + /** + * @function + * Sets layer as parent. + * + */ + setAsParent: function() { + this._isParent = true; + }, + /** + * @function + * Searches layer's parenting chain + * + */ + checkParenting: function() { + if (this.data.parent !== void 0) { + this.comp.buildElementParenting(this, this.data.parent, []); + } + } + }; + (function() { + var _prototype = { + initElement: function(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + this.initRenderable(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + this.createContent(); + this.hide(); + }, + hide: function() { + if (!this.hidden && (!this.isInRange || this.isTransparent)) { + var elem2 = this.baseElement || this.layerElement; + elem2.style.display = "none"; + this.hidden = true; + } + }, + show: function() { + if (this.isInRange && !this.isTransparent) { + if (!this.data.hd) { + var elem2 = this.baseElement || this.layerElement; + elem2.style.display = "block"; + } + this.hidden = false; + this._isFirstFrame = true; + } + }, + renderFrame: function() { + if (this.data.hd || this.hidden) { + return; + } + this.renderTransform(); + this.renderRenderable(); + this.renderElement(); + this.renderInnerContent(); + if (this._isFirstFrame) { + this._isFirstFrame = false; + } + }, + renderInnerContent: function() { + }, + prepareFrame: function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + this.checkTransparency(); + }, + destroy: function() { + this.innerElem = null; + this.destroyBaseElement(); + } + }; + extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement); + })(); + extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement); + IImageElement.prototype.createContent = function() { + var assetPath = this.globalData.getAssetsPath(this.assetData); + this.innerElem = createNS("image"); + this.innerElem.setAttribute("width", this.assetData.w + "px"); + this.innerElem.setAttribute("height", this.assetData.h + "px"); + this.innerElem.setAttribute("preserveAspectRatio", this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); + this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink", "href", assetPath); + this.layerElement.appendChild(this.innerElem); + }; + IImageElement.prototype.sourceRectAtTime = function() { + return this.sourceRect; + }; + IShapeElement.prototype = { + addShapeToModifiers: function(data2) { + var i; + var len = this.shapeModifiers.length; + for (i = 0; i < len; i += 1) { + this.shapeModifiers[i].addShape(data2); + } + }, + isShapeInAnimatedModifiers: function(data2) { + var i = 0; + var len = this.shapeModifiers.length; + while (i < len) { + if (this.shapeModifiers[i].isAnimatedWithShape(data2)) { + return true; + } + } + return false; + }, + renderModifiers: function() { + if (!this.shapeModifiers.length) { + return; + } + var i; + var len = this.shapes.length; + for (i = 0; i < len; i += 1) { + this.shapes[i].sh.reset(); + } + len = this.shapeModifiers.length; + var shouldBreakProcess; + for (i = len - 1; i >= 0; i -= 1) { + shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); + if (shouldBreakProcess) { + break; + } + } + }, + searchProcessedElement: function(elem2) { + var elements = this.processedElements; + var i = 0; + var len = elements.length; + while (i < len) { + if (elements[i].elem === elem2) { + return elements[i].pos; + } + i += 1; + } + return 0; + }, + addProcessedElement: function(elem2, pos) { + var elements = this.processedElements; + var i = elements.length; + while (i) { + i -= 1; + if (elements[i].elem === elem2) { + elements[i].pos = pos; + return; + } + } + elements.push(new ProcessedElement(elem2, pos)); + }, + prepareFrame: function(num) { + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + } + }; + const lineCapEnum = { + 1: "butt", + 2: "round", + 3: "square" + }; + const lineJoinEnum = { + 1: "miter", + 2: "round", + 3: "bevel" + }; + SVGShapeData.prototype.setAsAnimated = function() { + this._isAnimated = true; + }; + SVGStyleData.prototype.reset = function() { + this.d = ""; + this._mdf = false; + }; + DashProperty.prototype.getValue = function(forceRender) { + if (this.elem.globalData.frameId === this.frameId && !forceRender) { + return; + } + this.frameId = this.elem.globalData.frameId; + this.iterateDynamicProperties(); + this._mdf = this._mdf || forceRender; + if (this._mdf) { + var i = 0; + var len = this.dataProps.length; + if (this.renderer === "svg") { + this.dashStr = ""; + } + for (i = 0; i < len; i += 1) { + if (this.dataProps[i].n !== "o") { + if (this.renderer === "svg") { + this.dashStr += " " + this.dataProps[i].p.v; + } else { + this.dashArray[i] = this.dataProps[i].p.v; + } + } else { + this.dashoffset[0] = this.dataProps[i].p.v; + } + } + } + }; + extendPrototype([DynamicPropertyContainer], DashProperty); + extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); + extendPrototype([DynamicPropertyContainer], SVGFillStyleData); + extendPrototype([DynamicPropertyContainer], SVGNoStyleData); + GradientProperty.prototype.comparePoints = function(values2, points) { + var i = 0; + var len = this.o.length / 2; + var diff; + while (i < len) { + diff = Math.abs(values2[i * 4] - values2[points * 4 + i * 2]); + if (diff > 0.01) { + return false; + } + i += 1; + } + return true; + }; + GradientProperty.prototype.checkCollapsable = function() { + if (this.o.length / 2 !== this.c.length / 4) { + return false; + } + if (this.data.k.k[0].s) { + var i = 0; + var len = this.data.k.k.length; + while (i < len) { + if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) { + return false; + } + i += 1; + } + } else if (!this.comparePoints(this.data.k.k, this.data.p)) { + return false; + } + return true; + }; + GradientProperty.prototype.getValue = function(forceRender) { + this.prop.getValue(); + this._mdf = false; + this._cmdf = false; + this._omdf = false; + if (this.prop._mdf || forceRender) { + var i; + var len = this.data.p * 4; + var mult; + var val2; + for (i = 0; i < len; i += 1) { + mult = i % 4 === 0 ? 100 : 255; + val2 = Math.round(this.prop.v[i] * mult); + if (this.c[i] !== val2) { + this.c[i] = val2; + this._cmdf = !forceRender; + } + } + if (this.o.length) { + len = this.prop.v.length; + for (i = this.data.p * 4; i < len; i += 1) { + mult = i % 2 === 0 ? 100 : 1; + val2 = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; + if (this.o[i - this.data.p * 4] !== val2) { + this.o[i - this.data.p * 4] = val2; + this._omdf = !forceRender; + } + } + } + this._mdf = !forceRender; + } + }; + extendPrototype([DynamicPropertyContainer], GradientProperty); + SVGGradientFillStyleData.prototype.initGradientData = function(elem2, data2, styleOb) { + this.o = PropertyFactory.getProp(elem2, data2.o, 0, 0.01, this); + this.s = PropertyFactory.getProp(elem2, data2.s, 1, null, this); + this.e = PropertyFactory.getProp(elem2, data2.e, 1, null, this); + this.h = PropertyFactory.getProp(elem2, data2.h || { k: 0 }, 0, 0.01, this); + this.a = PropertyFactory.getProp(elem2, data2.a || { k: 0 }, 0, degToRads, this); + this.g = new GradientProperty(elem2, data2.g, this); + this.style = styleOb; + this.stops = []; + this.setGradientData(styleOb.pElem, data2); + this.setGradientOpacity(data2, styleOb); + this._isAnimated = !!this._isAnimated; + }; + SVGGradientFillStyleData.prototype.setGradientData = function(pathElement, data2) { + var gradientId = createElementID(); + var gfill = createNS(data2.t === 1 ? "linearGradient" : "radialGradient"); + gfill.setAttribute("id", gradientId); + gfill.setAttribute("spreadMethod", "pad"); + gfill.setAttribute("gradientUnits", "userSpaceOnUse"); + var stops = []; + var stop; + var j; + var jLen; + jLen = data2.g.p * 4; + for (j = 0; j < jLen; j += 4) { + stop = createNS("stop"); + gfill.appendChild(stop); + stops.push(stop); + } + pathElement.setAttribute(data2.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + gradientId + ")"); + this.gf = gfill; + this.cst = stops; + }; + SVGGradientFillStyleData.prototype.setGradientOpacity = function(data2, styleOb) { + if (this.g._hasOpacity && !this.g._collapsable) { + var stop; + var j; + var jLen; + var mask2 = createNS("mask"); + var maskElement = createNS("path"); + mask2.appendChild(maskElement); + var opacityId = createElementID(); + var maskId = createElementID(); + mask2.setAttribute("id", maskId); + var opFill = createNS(data2.t === 1 ? "linearGradient" : "radialGradient"); + opFill.setAttribute("id", opacityId); + opFill.setAttribute("spreadMethod", "pad"); + opFill.setAttribute("gradientUnits", "userSpaceOnUse"); + jLen = data2.g.k.k[0].s ? data2.g.k.k[0].s.length : data2.g.k.k.length; + var stops = this.stops; + for (j = data2.g.p * 4; j < jLen; j += 2) { + stop = createNS("stop"); + stop.setAttribute("stop-color", "rgb(255,255,255)"); + opFill.appendChild(stop); + stops.push(stop); + } + maskElement.setAttribute(data2.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + opacityId + ")"); + if (data2.ty === "gs") { + maskElement.setAttribute("stroke-linecap", lineCapEnum[data2.lc || 2]); + maskElement.setAttribute("stroke-linejoin", lineJoinEnum[data2.lj || 2]); + if (data2.lj === 1) { + maskElement.setAttribute("stroke-miterlimit", data2.ml); + } + } + this.of = opFill; + this.ms = mask2; + this.ost = stops; + this.maskId = maskId; + styleOb.msElem = maskElement; + } + }; + extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); + extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); + const buildShapeString = function(pathNodes, length2, closed, mat) { + if (length2 === 0) { + return ""; + } + var _o = pathNodes.o; + var _i = pathNodes.i; + var _v = pathNodes.v; + var i; + var shapeString = " M" + mat.applyToPointStringified(_v[0][0], _v[0][1]); + for (i = 1; i < length2; i += 1) { + 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]); + } + if (closed && length2) { + 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]); + shapeString += "z"; + } + return shapeString; + }; + const SVGElementsRenderer = function() { + var _identityMatrix2 = new Matrix(); + var _matrixHelper = new Matrix(); + var ob2 = { + createRenderFunction + }; + function createRenderFunction(data2) { + switch (data2.ty) { + case "fl": + return renderFill; + case "gf": + return renderGradient; + case "gs": + return renderGradientStroke; + case "st": + return renderStroke; + case "sh": + case "el": + case "rc": + case "sr": + return renderPath; + case "tr": + return renderContentTransform; + case "no": + return renderNoop; + default: + return null; + } + } + function renderContentTransform(styleData, itemData, isFirstFrame) { + if (isFirstFrame || itemData.transform.op._mdf) { + itemData.transform.container.setAttribute("opacity", itemData.transform.op.v); + } + if (isFirstFrame || itemData.transform.mProps._mdf) { + itemData.transform.container.setAttribute("transform", itemData.transform.mProps.v.to2dCSS()); + } + } + function renderNoop() { + } + function renderPath(styleData, itemData, isFirstFrame) { + var j; + var jLen; + var pathStringTransformed; + var redraw; + var pathNodes; + var l2; + var lLen = itemData.styles.length; + var lvl = itemData.lvl; + var paths; + var mat; + var props; + var iterations; + var k2; + for (l2 = 0; l2 < lLen; l2 += 1) { + redraw = itemData.sh._mdf || isFirstFrame; + if (itemData.styles[l2].lvl < lvl) { + mat = _matrixHelper.reset(); + iterations = lvl - itemData.styles[l2].lvl; + k2 = itemData.transformers.length - 1; + while (!redraw && iterations > 0) { + redraw = itemData.transformers[k2].mProps._mdf || redraw; + iterations -= 1; + k2 -= 1; + } + if (redraw) { + iterations = lvl - itemData.styles[l2].lvl; + k2 = itemData.transformers.length - 1; + while (iterations > 0) { + props = itemData.transformers[k2].mProps.v.props; + 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]); + iterations -= 1; + k2 -= 1; + } + } + } else { + mat = _identityMatrix2; + } + paths = itemData.sh.paths; + jLen = paths._length; + if (redraw) { + pathStringTransformed = ""; + for (j = 0; j < jLen; j += 1) { + pathNodes = paths.shapes[j]; + if (pathNodes && pathNodes._length) { + pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); + } + } + itemData.caches[l2] = pathStringTransformed; + } else { + pathStringTransformed = itemData.caches[l2]; + } + itemData.styles[l2].d += styleData.hd === true ? "" : pathStringTransformed; + itemData.styles[l2]._mdf = redraw || itemData.styles[l2]._mdf; + } + } + function renderFill(styleData, itemData, isFirstFrame) { + var styleElem = itemData.style; + if (itemData.c._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("fill", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); + } + if (itemData.o._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("fill-opacity", itemData.o.v); + } + } + function renderGradientStroke(styleData, itemData, isFirstFrame) { + renderGradient(styleData, itemData, isFirstFrame); + renderStroke(styleData, itemData, isFirstFrame); + } + function renderGradient(styleData, itemData, isFirstFrame) { + var gfill = itemData.gf; + var hasOpacity = itemData.g._hasOpacity; + var pt1 = itemData.s.v; + var pt2 = itemData.e.v; + if (itemData.o._mdf || isFirstFrame) { + var attr = styleData.ty === "gf" ? "fill-opacity" : "stroke-opacity"; + itemData.style.pElem.setAttribute(attr, itemData.o.v); + } + if (itemData.s._mdf || isFirstFrame) { + var attr1 = styleData.t === 1 ? "x1" : "cx"; + var attr2 = attr1 === "x1" ? "y1" : "cy"; + gfill.setAttribute(attr1, pt1[0]); + gfill.setAttribute(attr2, pt1[1]); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute(attr1, pt1[0]); + itemData.of.setAttribute(attr2, pt1[1]); + } + } + var stops; + var i; + var len; + var stop; + if (itemData.g._cmdf || isFirstFrame) { + stops = itemData.cst; + var cValues = itemData.g.c; + len = stops.length; + for (i = 0; i < len; i += 1) { + stop = stops[i]; + stop.setAttribute("offset", cValues[i * 4] + "%"); + stop.setAttribute("stop-color", "rgb(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + ")"); + } + } + if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { + var oValues = itemData.g.o; + if (itemData.g._collapsable) { + stops = itemData.cst; + } else { + stops = itemData.ost; + } + len = stops.length; + for (i = 0; i < len; i += 1) { + stop = stops[i]; + if (!itemData.g._collapsable) { + stop.setAttribute("offset", oValues[i * 2] + "%"); + } + stop.setAttribute("stop-opacity", oValues[i * 2 + 1]); + } + } + if (styleData.t === 1) { + if (itemData.e._mdf || isFirstFrame) { + gfill.setAttribute("x2", pt2[0]); + gfill.setAttribute("y2", pt2[1]); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("x2", pt2[0]); + itemData.of.setAttribute("y2", pt2[1]); + } + } + } else { + var rad; + if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { + rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + gfill.setAttribute("r", rad); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("r", rad); + } + } + if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { + if (!rad) { + rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + } + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); + var percent = itemData.h.v; + if (percent >= 1) { + percent = 0.99; + } else if (percent <= -1) { + percent = -0.99; + } + var dist = rad * percent; + var x2 = Math.cos(ang + itemData.a.v) * dist + pt1[0]; + var y2 = Math.sin(ang + itemData.a.v) * dist + pt1[1]; + gfill.setAttribute("fx", x2); + gfill.setAttribute("fy", y2); + if (hasOpacity && !itemData.g._collapsable) { + itemData.of.setAttribute("fx", x2); + itemData.of.setAttribute("fy", y2); + } + } + } + } + function renderStroke(styleData, itemData, isFirstFrame) { + var styleElem = itemData.style; + var d = itemData.d; + if (d && (d._mdf || isFirstFrame) && d.dashStr) { + styleElem.pElem.setAttribute("stroke-dasharray", d.dashStr); + styleElem.pElem.setAttribute("stroke-dashoffset", d.dashoffset[0]); + } + if (itemData.c && (itemData.c._mdf || isFirstFrame)) { + styleElem.pElem.setAttribute("stroke", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); + } + if (itemData.o._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("stroke-opacity", itemData.o.v); + } + if (itemData.w._mdf || isFirstFrame) { + styleElem.pElem.setAttribute("stroke-width", itemData.w.v); + if (styleElem.msElem) { + styleElem.msElem.setAttribute("stroke-width", itemData.w.v); + } + } + } + return ob2; + }(); + extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement); + SVGShapeElement.prototype.initSecondaryElement = function() { + }; + SVGShapeElement.prototype.identityMatrix = new Matrix(); + SVGShapeElement.prototype.buildExpressionInterface = function() { + }; + SVGShapeElement.prototype.createContent = function() { + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); + this.filterUniqueShapes(); + }; + SVGShapeElement.prototype.filterUniqueShapes = function() { + var i; + var len = this.shapes.length; + var shape; + var j; + var jLen = this.stylesList.length; + var style; + var tempShapes = []; + var areAnimated = false; + for (j = 0; j < jLen; j += 1) { + style = this.stylesList[j]; + areAnimated = false; + tempShapes.length = 0; + for (i = 0; i < len; i += 1) { + shape = this.shapes[i]; + if (shape.styles.indexOf(style) !== -1) { + tempShapes.push(shape); + areAnimated = shape._isAnimated || areAnimated; + } + } + if (tempShapes.length > 1 && areAnimated) { + this.setShapesAsAnimated(tempShapes); + } + } + }; + SVGShapeElement.prototype.setShapesAsAnimated = function(shapes) { + var i; + var len = shapes.length; + for (i = 0; i < len; i += 1) { + shapes[i].setAsAnimated(); + } + }; + SVGShapeElement.prototype.createStyleElement = function(data2, level) { + var elementData; + var styleOb = new SVGStyleData(data2, level); + var pathElement = styleOb.pElem; + if (data2.ty === "st") { + elementData = new SVGStrokeStyleData(this, data2, styleOb); + } else if (data2.ty === "fl") { + elementData = new SVGFillStyleData(this, data2, styleOb); + } else if (data2.ty === "gf" || data2.ty === "gs") { + var GradientConstructor = data2.ty === "gf" ? SVGGradientFillStyleData : SVGGradientStrokeStyleData; + elementData = new GradientConstructor(this, data2, styleOb); + this.globalData.defs.appendChild(elementData.gf); + if (elementData.maskId) { + this.globalData.defs.appendChild(elementData.ms); + this.globalData.defs.appendChild(elementData.of); + pathElement.setAttribute("mask", "url(" + getLocationHref() + "#" + elementData.maskId + ")"); + } + } else if (data2.ty === "no") { + elementData = new SVGNoStyleData(this, data2, styleOb); + } + if (data2.ty === "st" || data2.ty === "gs") { + pathElement.setAttribute("stroke-linecap", lineCapEnum[data2.lc || 2]); + pathElement.setAttribute("stroke-linejoin", lineJoinEnum[data2.lj || 2]); + pathElement.setAttribute("fill-opacity", "0"); + if (data2.lj === 1) { + pathElement.setAttribute("stroke-miterlimit", data2.ml); + } + } + if (data2.r === 2) { + pathElement.setAttribute("fill-rule", "evenodd"); + } + if (data2.ln) { + pathElement.setAttribute("id", data2.ln); + } + if (data2.cl) { + pathElement.setAttribute("class", data2.cl); + } + if (data2.bm) { + pathElement.style["mix-blend-mode"] = getBlendMode(data2.bm); + } + this.stylesList.push(styleOb); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.createGroupElement = function(data2) { + var elementData = new ShapeGroupData(); + if (data2.ln) { + elementData.gr.setAttribute("id", data2.ln); + } + if (data2.cl) { + elementData.gr.setAttribute("class", data2.cl); + } + if (data2.bm) { + elementData.gr.style["mix-blend-mode"] = getBlendMode(data2.bm); + } + return elementData; + }; + SVGShapeElement.prototype.createTransformElement = function(data2, container) { + var transformProperty = TransformPropertyFactory.getTransformProperty(this, data2, this); + var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.createShapeElement = function(data2, ownTransformers, level) { + var ty = 4; + if (data2.ty === "rc") { + ty = 5; + } else if (data2.ty === "el") { + ty = 6; + } else if (data2.ty === "sr") { + ty = 7; + } + var shapeProperty = ShapePropertyFactory.getShapeProp(this, data2, ty, this); + var elementData = new SVGShapeData(ownTransformers, level, shapeProperty); + this.shapes.push(elementData); + this.addShapeToModifiers(elementData); + this.addToAnimatedContents(data2, elementData); + return elementData; + }; + SVGShapeElement.prototype.addToAnimatedContents = function(data2, element) { + var i = 0; + var len = this.animatedContents.length; + while (i < len) { + if (this.animatedContents[i].element === element) { + return; + } + i += 1; + } + this.animatedContents.push({ + fn: SVGElementsRenderer.createRenderFunction(data2), + element, + data: data2 + }); + }; + SVGShapeElement.prototype.setElementStyles = function(elementData) { + var arr = elementData.styles; + var j; + var jLen = this.stylesList.length; + for (j = 0; j < jLen; j += 1) { + if (!this.stylesList[j].closed) { + arr.push(this.stylesList[j]); + } + } + }; + SVGShapeElement.prototype.reloadShapes = function() { + this._isFirstFrame = true; + var i; + var len = this.itemsData.length; + for (i = 0; i < len; i += 1) { + this.prevViewData[i] = this.itemsData[i]; + } + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); + this.filterUniqueShapes(); + len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + } + this.renderModifiers(); + }; + SVGShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, container, level, transformers, render) { + var ownTransformers = [].concat(transformers); + var i; + var len = arr.length - 1; + var j; + var jLen; + var ownStyles = []; + var ownModifiers = []; + var currentTransform; + var modifier; + var processedPos; + for (i = len; i >= 0; i -= 1) { + processedPos = this.searchProcessedElement(arr[i]); + if (!processedPos) { + arr[i]._render = render; + } else { + itemsData[i] = prevViewData[processedPos - 1]; + } + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs" || arr[i].ty === "no") { + if (!processedPos) { + itemsData[i] = this.createStyleElement(arr[i], level); + } else { + itemsData[i].style.closed = false; + } + if (arr[i]._render) { + if (itemsData[i].style.pElem.parentNode !== container) { + container.appendChild(itemsData[i].style.pElem); + } + } + ownStyles.push(itemsData[i].style); + } else if (arr[i].ty === "gr") { + if (!processedPos) { + itemsData[i] = this.createGroupElement(arr[i]); + } else { + jLen = itemsData[i].it.length; + for (j = 0; j < jLen; j += 1) { + itemsData[i].prevViewData[j] = itemsData[i].it[j]; + } + } + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); + if (arr[i]._render) { + if (itemsData[i].gr.parentNode !== container) { + container.appendChild(itemsData[i].gr); + } + } + } else if (arr[i].ty === "tr") { + if (!processedPos) { + itemsData[i] = this.createTransformElement(arr[i], container); + } + currentTransform = itemsData[i].transform; + ownTransformers.push(currentTransform); + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { + if (!processedPos) { + itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); + } + this.setElementStyles(itemsData[i]); + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "ms" || arr[i].ty === "pb") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + modifier.init(this, arr[i]); + itemsData[i] = modifier; + this.shapeModifiers.push(modifier); + } else { + modifier = itemsData[i]; + modifier.closed = false; + } + ownModifiers.push(modifier); + } else if (arr[i].ty === "rp") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + itemsData[i] = modifier; + modifier.init(this, arr, i, itemsData); + this.shapeModifiers.push(modifier); + render = false; + } else { + modifier = itemsData[i]; + modifier.closed = true; + } + ownModifiers.push(modifier); + } + this.addProcessedElement(arr[i], i + 1); + } + len = ownStyles.length; + for (i = 0; i < len; i += 1) { + ownStyles[i].closed = true; + } + len = ownModifiers.length; + for (i = 0; i < len; i += 1) { + ownModifiers[i].closed = true; + } + }; + SVGShapeElement.prototype.renderInnerContent = function() { + this.renderModifiers(); + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + this.stylesList[i].reset(); + } + this.renderShape(); + for (i = 0; i < len; i += 1) { + if (this.stylesList[i]._mdf || this._isFirstFrame) { + if (this.stylesList[i].msElem) { + this.stylesList[i].msElem.setAttribute("d", this.stylesList[i].d); + this.stylesList[i].d = "M0 0" + this.stylesList[i].d; + } + this.stylesList[i].pElem.setAttribute("d", this.stylesList[i].d || "M0 0"); + } + } + }; + SVGShapeElement.prototype.renderShape = function() { + var i; + var len = this.animatedContents.length; + var animatedContent; + for (i = 0; i < len; i += 1) { + animatedContent = this.animatedContents[i]; + if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) { + animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); + } + } + }; + SVGShapeElement.prototype.destroy = function() { + this.destroyBaseElement(); + this.shapesData = null; + this.itemsData = null; + }; + LetterProps.prototype.update = function(o, sw, sc, fc, m, p2) { + this._mdf.o = false; + this._mdf.sw = false; + this._mdf.sc = false; + this._mdf.fc = false; + this._mdf.m = false; + this._mdf.p = false; + var updated = false; + if (this.o !== o) { + this.o = o; + this._mdf.o = true; + updated = true; + } + if (this.sw !== sw) { + this.sw = sw; + this._mdf.sw = true; + updated = true; + } + if (this.sc !== sc) { + this.sc = sc; + this._mdf.sc = true; + updated = true; + } + if (this.fc !== fc) { + this.fc = fc; + this._mdf.fc = true; + updated = true; + } + if (this.m !== m) { + this.m = m; + this._mdf.m = true; + updated = true; + } + if (p2.length && (this.p[0] !== p2[0] || this.p[1] !== p2[1] || this.p[4] !== p2[4] || this.p[5] !== p2[5] || this.p[12] !== p2[12] || this.p[13] !== p2[13])) { + this.p = p2; + this._mdf.p = true; + updated = true; + } + return updated; + }; + TextProperty.prototype.defaultBoxWidth = [0, 0]; + TextProperty.prototype.copyData = function(obj, data2) { + for (var s in data2) { + if (Object.prototype.hasOwnProperty.call(data2, s)) { + obj[s] = data2[s]; + } + } + return obj; + }; + TextProperty.prototype.setCurrentData = function(data2) { + if (!data2.__complete) { + this.completeTextData(data2); + } + this.currentData = data2; + this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; + this._mdf = true; + }; + TextProperty.prototype.searchProperty = function() { + return this.searchKeyframes(); + }; + TextProperty.prototype.searchKeyframes = function() { + this.kf = this.data.d.k.length > 1; + if (this.kf) { + this.addEffect(this.getKeyframeValue.bind(this)); + } + return this.kf; + }; + TextProperty.prototype.addEffect = function(effectFunction) { + this.effectsSequence.push(effectFunction); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.getValue = function(_finalValue) { + if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) { + return; + } + this.currentData.t = this.data.d.k[this.keysIndex].s.t; + var currentValue = this.currentData; + var currentIndex = this.keysIndex; + if (this.lock) { + this.setCurrentData(this.currentData); + return; + } + this.lock = true; + this._mdf = false; + var i; + var len = this.effectsSequence.length; + var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; + for (i = 0; i < len; i += 1) { + if (currentIndex !== this.keysIndex) { + finalValue = this.effectsSequence[i](finalValue, finalValue.t); + } else { + finalValue = this.effectsSequence[i](this.currentData, finalValue.t); + } + } + if (currentValue !== finalValue) { + this.setCurrentData(finalValue); + } + this.v = this.currentData; + this.pv = this.v; + this.lock = false; + this.frameId = this.elem.globalData.frameId; + }; + TextProperty.prototype.getKeyframeValue = function() { + var textKeys = this.data.d.k; + var frameNum = this.elem.comp.renderedFrame; + var i = 0; + var len = textKeys.length; + while (i <= len - 1) { + if (i === len - 1 || textKeys[i + 1].t > frameNum) { + break; + } + i += 1; + } + if (this.keysIndex !== i) { + this.keysIndex = i; + } + return this.data.d.k[this.keysIndex].s; + }; + TextProperty.prototype.buildFinalText = function(text2) { + var charactersArray = []; + var i = 0; + var len = text2.length; + var charCode; + var secondCharCode; + var shouldCombine = false; + while (i < len) { + charCode = text2.charCodeAt(i); + if (FontManager.isCombinedCharacter(charCode)) { + charactersArray[charactersArray.length - 1] += text2.charAt(i); + } else if (charCode >= 55296 && charCode <= 56319) { + secondCharCode = text2.charCodeAt(i + 1); + if (secondCharCode >= 56320 && secondCharCode <= 57343) { + if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) { + charactersArray[charactersArray.length - 1] += text2.substr(i, 2); + shouldCombine = false; + } else { + charactersArray.push(text2.substr(i, 2)); + } + i += 1; + } else { + charactersArray.push(text2.charAt(i)); + } + } else if (charCode > 56319) { + secondCharCode = text2.charCodeAt(i + 1); + if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) { + shouldCombine = true; + charactersArray[charactersArray.length - 1] += text2.substr(i, 2); + i += 1; + } else { + charactersArray.push(text2.charAt(i)); + } + } else if (FontManager.isZeroWidthJoiner(charCode)) { + charactersArray[charactersArray.length - 1] += text2.charAt(i); + shouldCombine = true; + } else { + charactersArray.push(text2.charAt(i)); + } + i += 1; + } + return charactersArray; + }; + TextProperty.prototype.completeTextData = function(documentData) { + documentData.__complete = true; + var fontManager = this.elem.globalData.fontManager; + var data2 = this.data; + var letters = []; + var i; + var len; + var newLineFlag; + var index2 = 0; + var val2; + var anchorGrouping = data2.m.g; + var currentSize = 0; + var currentPos = 0; + var currentLine = 0; + var lineWidths = []; + var lineWidth = 0; + var maxLineWidth = 0; + var j; + var jLen; + var fontData = fontManager.getFontByName(documentData.f); + var charData; + var cLength = 0; + var fontProps = getFontProperties(fontData); + documentData.fWeight = fontProps.weight; + documentData.fStyle = fontProps.style; + documentData.finalSize = documentData.s; + documentData.finalText = this.buildFinalText(documentData.t); + len = documentData.finalText.length; + documentData.finalLineHeight = documentData.lh; + var trackingOffset = documentData.tr / 1e3 * documentData.finalSize; + var charCode; + if (documentData.sz) { + var flag = true; + var boxWidth = documentData.sz[0]; + var boxHeight = documentData.sz[1]; + var currentHeight; + var finalText; + while (flag) { + finalText = this.buildFinalText(documentData.t); + currentHeight = 0; + lineWidth = 0; + len = finalText.length; + trackingOffset = documentData.tr / 1e3 * documentData.finalSize; + var lastSpaceIndex = -1; + for (i = 0; i < len; i += 1) { + charCode = finalText[i].charCodeAt(0); + newLineFlag = false; + if (finalText[i] === " ") { + lastSpaceIndex = i; + } else if (charCode === 13 || charCode === 3) { + lineWidth = 0; + newLineFlag = true; + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; + } + if (fontManager.chars) { + charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; + } else { + cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); + } + if (lineWidth + cLength > boxWidth && finalText[i] !== " ") { + if (lastSpaceIndex === -1) { + len += 1; + } else { + i = lastSpaceIndex; + } + currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; + finalText.splice(i, lastSpaceIndex === i ? 1 : 0, "\r"); + lastSpaceIndex = -1; + lineWidth = 0; + } else { + lineWidth += cLength; + lineWidth += trackingOffset; + } + } + currentHeight += fontData.ascent * documentData.finalSize / 100; + if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { + documentData.finalSize -= 1; + documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; + } else { + documentData.finalText = finalText; + len = documentData.finalText.length; + flag = false; + } + } + } + lineWidth = -trackingOffset; + cLength = 0; + var uncollapsedSpaces = 0; + var currentChar; + for (i = 0; i < len; i += 1) { + newLineFlag = false; + currentChar = documentData.finalText[i]; + charCode = currentChar.charCodeAt(0); + if (charCode === 13 || charCode === 3) { + uncollapsedSpaces = 0; + lineWidths.push(lineWidth); + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; + lineWidth = -2 * trackingOffset; + val2 = ""; + newLineFlag = true; + currentLine += 1; + } else { + val2 = currentChar; + } + if (fontManager.chars) { + charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); + cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; + } else { + cLength = fontManager.measureText(val2, documentData.f, documentData.finalSize); + } + if (currentChar === " ") { + uncollapsedSpaces += cLength + trackingOffset; + } else { + lineWidth += cLength + trackingOffset + uncollapsedSpaces; + uncollapsedSpaces = 0; + } + letters.push({ + l: cLength, + an: cLength, + add: currentSize, + n: newLineFlag, + anIndexes: [], + val: val2, + line: currentLine, + animatorJustifyOffset: 0 + }); + if (anchorGrouping == 2) { + currentSize += cLength; + if (val2 === "" || val2 === " " || i === len - 1) { + if (val2 === "" || val2 === " ") { + currentSize -= cLength; + } + while (currentPos <= i) { + letters[currentPos].an = currentSize; + letters[currentPos].ind = index2; + letters[currentPos].extra = cLength; + currentPos += 1; + } + index2 += 1; + currentSize = 0; + } + } else if (anchorGrouping == 3) { + currentSize += cLength; + if (val2 === "" || i === len - 1) { + if (val2 === "") { + currentSize -= cLength; + } + while (currentPos <= i) { + letters[currentPos].an = currentSize; + letters[currentPos].ind = index2; + letters[currentPos].extra = cLength; + currentPos += 1; + } + currentSize = 0; + index2 += 1; + } + } else { + letters[index2].ind = index2; + letters[index2].extra = 0; + index2 += 1; + } + } + documentData.l = letters; + maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; + lineWidths.push(lineWidth); + if (documentData.sz) { + documentData.boxWidth = documentData.sz[0]; + documentData.justifyOffset = 0; + } else { + documentData.boxWidth = maxLineWidth; + switch (documentData.j) { + case 1: + documentData.justifyOffset = -documentData.boxWidth; + break; + case 2: + documentData.justifyOffset = -documentData.boxWidth / 2; + break; + default: + documentData.justifyOffset = 0; + } + } + documentData.lineWidths = lineWidths; + var animators = data2.a; + var animatorData; + var letterData; + jLen = animators.length; + var based; + var ind; + var indexes = []; + for (j = 0; j < jLen; j += 1) { + animatorData = animators[j]; + if (animatorData.a.sc) { + documentData.strokeColorAnim = true; + } + if (animatorData.a.sw) { + documentData.strokeWidthAnim = true; + } + if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) { + documentData.fillColorAnim = true; + } + ind = 0; + based = animatorData.s.b; + for (i = 0; i < len; i += 1) { + letterData = letters[i]; + letterData.anIndexes[j] = ind; + 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)) { + if (animatorData.s.rn === 1) { + indexes.push(ind); + } + ind += 1; + } + } + data2.a[j].s.totalChars = ind; + var currentInd = -1; + var newInd; + if (animatorData.s.rn === 1) { + for (i = 0; i < len; i += 1) { + letterData = letters[i]; + if (currentInd != letterData.anIndexes[j]) { + currentInd = letterData.anIndexes[j]; + newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; + } + letterData.anIndexes[j] = newInd; + } + } + } + documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; + documentData.ls = documentData.ls || 0; + documentData.ascent = fontData.ascent * documentData.finalSize / 100; + }; + TextProperty.prototype.updateDocumentData = function(newData, index2) { + index2 = index2 === void 0 ? this.keysIndex : index2; + var dData = this.copyData({}, this.data.d.k[index2].s); + dData = this.copyData(dData, newData); + this.data.d.k[index2].s = dData; + this.recalculate(index2); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.recalculate = function(index2) { + var dData = this.data.d.k[index2].s; + dData.__complete = false; + this.keysIndex = 0; + this._isFirstFrame = true; + this.getValue(dData); + }; + TextProperty.prototype.canResizeFont = function(_canResize) { + this.canResize = _canResize; + this.recalculate(this.keysIndex); + this.elem.addDynamicProperty(this); + }; + TextProperty.prototype.setMinimumFontSize = function(_fontValue) { + this.minimumFontSize = Math.floor(_fontValue) || 1; + this.recalculate(this.keysIndex); + this.elem.addDynamicProperty(this); + }; + const TextSelectorProp = function() { + var max2 = Math.max; + var min = Math.min; + var floor = Math.floor; + function TextSelectorPropFactory(elem2, data2) { + this._currentTextLength = -1; + this.k = false; + this.data = data2; + this.elem = elem2; + this.comp = elem2.comp; + this.finalS = 0; + this.finalE = 0; + this.initDynamicPropertyContainer(elem2); + this.s = PropertyFactory.getProp(elem2, data2.s || { k: 0 }, 0, 0, this); + if ("e" in data2) { + this.e = PropertyFactory.getProp(elem2, data2.e, 0, 0, this); + } else { + this.e = { v: 100 }; + } + this.o = PropertyFactory.getProp(elem2, data2.o || { k: 0 }, 0, 0, this); + this.xe = PropertyFactory.getProp(elem2, data2.xe || { k: 0 }, 0, 0, this); + this.ne = PropertyFactory.getProp(elem2, data2.ne || { k: 0 }, 0, 0, this); + this.sm = PropertyFactory.getProp(elem2, data2.sm || { k: 100 }, 0, 0, this); + this.a = PropertyFactory.getProp(elem2, data2.a, 0, 0.01, this); + if (!this.dynamicProperties.length) { + this.getValue(); + } + } + TextSelectorPropFactory.prototype = { + getMult: function(ind) { + if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) { + this.getValue(); + } + var x1 = 0; + var y1 = 0; + var x2 = 1; + var y2 = 1; + if (this.ne.v > 0) { + x1 = this.ne.v / 100; + } else { + y1 = -this.ne.v / 100; + } + if (this.xe.v > 0) { + x2 = 1 - this.xe.v / 100; + } else { + y2 = 1 + this.xe.v / 100; + } + var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; + var mult = 0; + var s = this.finalS; + var e = this.finalE; + var type = this.data.sh; + if (type === 2) { + if (e === s) { + mult = ind >= e ? 1 : 0; + } else { + mult = max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + } + mult = easer(mult); + } else if (type === 3) { + if (e === s) { + mult = ind >= e ? 0 : 1; + } else { + mult = 1 - max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + } + mult = easer(mult); + } else if (type === 4) { + if (e === s) { + mult = 0; + } else { + mult = max2(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1)); + if (mult < 0.5) { + mult *= 2; + } else { + mult = 1 - 2 * (mult - 0.5); + } + } + mult = easer(mult); + } else if (type === 5) { + if (e === s) { + mult = 0; + } else { + var tot = e - s; + ind = min(max2(0, ind + 0.5 - s), e - s); + var x3 = -tot / 2 + ind; + var a2 = tot / 2; + mult = Math.sqrt(1 - x3 * x3 / (a2 * a2)); + } + mult = easer(mult); + } else if (type === 6) { + if (e === s) { + mult = 0; + } else { + ind = min(max2(0, ind + 0.5 - s), e - s); + mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; + } + mult = easer(mult); + } else { + if (ind >= floor(s)) { + if (ind - s < 0) { + mult = max2(0, min(min(e, 1) - (s - ind), 1)); + } else { + mult = max2(0, min(e - ind, 1)); + } + } + mult = easer(mult); + } + if (this.sm.v !== 100) { + var smoothness = this.sm.v * 0.01; + if (smoothness === 0) { + smoothness = 1e-8; + } + var threshold = 0.5 - smoothness * 0.5; + if (mult < threshold) { + mult = 0; + } else { + mult = (mult - threshold) / smoothness; + if (mult > 1) { + mult = 1; + } + } + } + return mult * this.a.v; + }, + getValue: function(newCharsFlag) { + this.iterateDynamicProperties(); + this._mdf = newCharsFlag || this._mdf; + this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; + if (newCharsFlag && this.data.r === 2) { + this.e.v = this._currentTextLength; + } + var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; + var o = this.o.v / divisor; + var s = this.s.v / divisor + o; + var e = this.e.v / divisor + o; + if (s > e) { + var _s = s; + s = e; + e = _s; + } + this.finalS = s; + this.finalE = e; + } + }; + extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); + function getTextSelectorProp(elem2, data2, arr) { + return new TextSelectorPropFactory(elem2, data2, arr); + } + return { + getTextSelectorProp + }; + }(); + TextAnimatorProperty.prototype.searchProperties = function() { + var i; + var len = this._textData.a.length; + var animatorProps; + var getProp = PropertyFactory.getProp; + for (i = 0; i < len; i += 1) { + animatorProps = this._textData.a[i]; + this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); + } + if (this._textData.p && "m" in this._textData.p) { + this._pathData = { + a: getProp(this._elem, this._textData.p.a, 0, 0, this), + f: getProp(this._elem, this._textData.p.f, 0, 0, this), + l: getProp(this._elem, this._textData.p.l, 0, 0, this), + r: getProp(this._elem, this._textData.p.r, 0, 0, this), + p: getProp(this._elem, this._textData.p.p, 0, 0, this), + m: this._elem.maskManager.getMaskProperty(this._textData.p.m) + }; + this._hasMaskedPath = true; + } else { + this._hasMaskedPath = false; + } + this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); + }; + TextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag) { + this.lettersChangedFlag = lettersChangedFlag; + if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) { + return; + } + this._isFirstFrame = false; + var alignment = this._moreOptions.alignment.v; + var animators = this._animatorsData; + var textData = this._textData; + var matrixHelper = this.mHelper; + var renderType = this._renderType; + var renderedLettersCount = this.renderedLetters.length; + var xPos; + var yPos; + var i; + var len; + var letters = documentData.l; + var pathInfo; + var currentLength; + var currentPoint; + var segmentLength; + var flag; + var pointInd; + var segmentInd; + var prevPoint; + var points; + var segments; + var partialLength; + var totalLength; + var perc; + var tanAngle; + var mask2; + if (this._hasMaskedPath) { + mask2 = this._pathData.m; + if (!this._pathData.n || this._pathData._mdf) { + var paths = mask2.v; + if (this._pathData.r.v) { + paths = paths.reverse(); + } + pathInfo = { + tLength: 0, + segments: [] + }; + len = paths._length - 1; + var bezierData; + totalLength = 0; + for (i = 0; i < len; i += 1) { + bezierData = bez.buildBezierData( + paths.v[i], + paths.v[i + 1], + [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], + [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]] + ); + pathInfo.tLength += bezierData.segmentLength; + pathInfo.segments.push(bezierData); + totalLength += bezierData.segmentLength; + } + i = len; + if (mask2.v.c) { + bezierData = bez.buildBezierData( + paths.v[i], + paths.v[0], + [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], + [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]] + ); + pathInfo.tLength += bezierData.segmentLength; + pathInfo.segments.push(bezierData); + totalLength += bezierData.segmentLength; + } + this._pathData.pi = pathInfo; + } + pathInfo = this._pathData.pi; + currentLength = this._pathData.f.v; + segmentInd = 0; + pointInd = 1; + segmentLength = 0; + flag = true; + segments = pathInfo.segments; + if (currentLength < 0 && mask2.v.c) { + if (pathInfo.tLength < Math.abs(currentLength)) { + currentLength = -Math.abs(currentLength) % pathInfo.tLength; + } + segmentInd = segments.length - 1; + points = segments[segmentInd].points; + pointInd = points.length - 1; + while (currentLength < 0) { + currentLength += points[pointInd].partialLength; + pointInd -= 1; + if (pointInd < 0) { + segmentInd -= 1; + points = segments[segmentInd].points; + pointInd = points.length - 1; + } + } + } + points = segments[segmentInd].points; + prevPoint = points[pointInd - 1]; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + } + len = letters.length; + xPos = 0; + yPos = 0; + var yOff = documentData.finalSize * 1.2 * 0.714; + var firstLine = true; + var animatorProps; + var animatorSelector; + var j; + var jLen; + var letterValue; + jLen = animators.length; + var mult; + var ind = -1; + var offf; + var xPathPos; + var yPathPos; + var initPathPos = currentLength; + var initSegmentInd = segmentInd; + var initPointInd = pointInd; + var currentLine = -1; + var elemOpacity; + var sc; + var sw; + var fc; + var k2; + var letterSw; + var letterSc; + var letterFc; + var letterM = ""; + var letterP = this.defaultPropsArray; + var letterO; + if (documentData.j === 2 || documentData.j === 1) { + var animatorJustifyOffset = 0; + var animatorFirstCharOffset = 0; + var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1; + var lastIndex = 0; + var isNewLine = true; + for (i = 0; i < len; i += 1) { + if (letters[i].n) { + if (animatorJustifyOffset) { + animatorJustifyOffset += animatorFirstCharOffset; + } + while (lastIndex < i) { + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; + lastIndex += 1; + } + animatorJustifyOffset = 0; + isNewLine = true; + } else { + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.t.propType) { + if (isNewLine && documentData.j === 2) { + animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; + } + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; + } else { + animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; + } + } + } + isNewLine = false; + } + } + if (animatorJustifyOffset) { + animatorJustifyOffset += animatorFirstCharOffset; + } + while (lastIndex < i) { + letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; + lastIndex += 1; + } + } + for (i = 0; i < len; i += 1) { + matrixHelper.reset(); + elemOpacity = 1; + if (letters[i].n) { + xPos = 0; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + currentLength = initPathPos; + firstLine = false; + if (this._hasMaskedPath) { + segmentInd = initSegmentInd; + pointInd = initPointInd; + points = segments[segmentInd].points; + prevPoint = points[pointInd - 1]; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + segmentLength = 0; + } + letterM = ""; + letterFc = ""; + letterSw = ""; + letterO = ""; + letterP = this.defaultPropsArray; + } else { + if (this._hasMaskedPath) { + if (currentLine !== letters[i].line) { + switch (documentData.j) { + case 1: + currentLength += totalLength - documentData.lineWidths[letters[i].line]; + break; + case 2: + currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; + break; + default: + break; + } + currentLine = letters[i].line; + } + if (ind !== letters[i].ind) { + if (letters[ind]) { + currentLength += letters[ind].extra; + } + currentLength += letters[i].an / 2; + ind = letters[i].ind; + } + currentLength += alignment[0] * letters[i].an * 5e-3; + var animatorOffset = 0; + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.p.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorOffset += animatorProps.p.v[0] * mult[0]; + } else { + animatorOffset += animatorProps.p.v[0] * mult; + } + } + if (animatorProps.a.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + animatorOffset += animatorProps.a.v[0] * mult[0]; + } else { + animatorOffset += animatorProps.a.v[0] * mult; + } + } + } + flag = true; + if (this._pathData.a.v) { + 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); + currentLength += this._pathData.f.v; + } + while (flag) { + if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { + perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; + xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; + yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; + matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -(alignment[1] * yOff) * 0.01); + flag = false; + } else if (points) { + segmentLength += currentPoint.partialLength; + pointInd += 1; + if (pointInd >= points.length) { + pointInd = 0; + segmentInd += 1; + if (!segments[segmentInd]) { + if (mask2.v.c) { + pointInd = 0; + segmentInd = 0; + points = segments[segmentInd].points; + } else { + segmentLength -= currentPoint.partialLength; + points = null; + } + } else { + points = segments[segmentInd].points; + } + } + if (points) { + prevPoint = currentPoint; + currentPoint = points[pointInd]; + partialLength = currentPoint.partialLength; + } + } + } + offf = letters[i].an / 2 - letters[i].add; + matrixHelper.translate(-offf, 0, 0); + } else { + offf = letters[i].an / 2 - letters[i].add; + matrixHelper.translate(-offf, 0, 0); + matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -alignment[1] * yOff * 0.01, 0); + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.t.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (xPos !== 0 || documentData.j !== 0) { + if (this._hasMaskedPath) { + if (mult.length) { + currentLength += animatorProps.t.v * mult[0]; + } else { + currentLength += animatorProps.t.v * mult; + } + } else if (mult.length) { + xPos += animatorProps.t.v * mult[0]; + } else { + xPos += animatorProps.t.v * mult; + } + } + } + } + if (documentData.strokeWidthAnim) { + sw = documentData.sw || 0; + } + if (documentData.strokeColorAnim) { + if (documentData.sc) { + sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]]; + } else { + sc = [0, 0, 0]; + } + } + if (documentData.fillColorAnim && documentData.fc) { + fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]]; + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.a.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); + } else { + matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.s.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (mult.length) { + matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); + } else { + matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (animatorProps.sk.propType) { + if (mult.length) { + matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); + } else { + matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); + } + } + if (animatorProps.r.propType) { + if (mult.length) { + matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); + } else { + matrixHelper.rotateZ(-animatorProps.r.v * mult); + } + } + if (animatorProps.ry.propType) { + if (mult.length) { + matrixHelper.rotateY(animatorProps.ry.v * mult[1]); + } else { + matrixHelper.rotateY(animatorProps.ry.v * mult); + } + } + if (animatorProps.rx.propType) { + if (mult.length) { + matrixHelper.rotateX(animatorProps.rx.v * mult[0]); + } else { + matrixHelper.rotateX(animatorProps.rx.v * mult); + } + } + if (animatorProps.o.propType) { + if (mult.length) { + elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; + } else { + elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; + } + } + if (documentData.strokeWidthAnim && animatorProps.sw.propType) { + if (mult.length) { + sw += animatorProps.sw.v * mult[0]; + } else { + sw += animatorProps.sw.v * mult; + } + } + if (documentData.strokeColorAnim && animatorProps.sc.propType) { + for (k2 = 0; k2 < 3; k2 += 1) { + if (mult.length) { + sc[k2] += (animatorProps.sc.v[k2] - sc[k2]) * mult[0]; + } else { + sc[k2] += (animatorProps.sc.v[k2] - sc[k2]) * mult; + } + } + } + if (documentData.fillColorAnim && documentData.fc) { + if (animatorProps.fc.propType) { + for (k2 = 0; k2 < 3; k2 += 1) { + if (mult.length) { + fc[k2] += (animatorProps.fc.v[k2] - fc[k2]) * mult[0]; + } else { + fc[k2] += (animatorProps.fc.v[k2] - fc[k2]) * mult; + } + } + } + if (animatorProps.fh.propType) { + if (mult.length) { + fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); + } else { + fc = addHueToRGB(fc, animatorProps.fh.v * mult); + } + } + if (animatorProps.fs.propType) { + if (mult.length) { + fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); + } else { + fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); + } + } + if (animatorProps.fb.propType) { + if (mult.length) { + fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); + } else { + fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); + } + } + } + } + for (j = 0; j < jLen; j += 1) { + animatorProps = animators[j].a; + if (animatorProps.p.propType) { + animatorSelector = animators[j].s; + mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); + if (this._hasMaskedPath) { + if (mult.length) { + matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); + } else { + matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); + } + } else if (mult.length) { + matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); + } else { + matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); + } + } + } + if (documentData.strokeWidthAnim) { + letterSw = sw < 0 ? 0 : sw; + } + if (documentData.strokeColorAnim) { + letterSc = "rgb(" + Math.round(sc[0] * 255) + "," + Math.round(sc[1] * 255) + "," + Math.round(sc[2] * 255) + ")"; + } + if (documentData.fillColorAnim && documentData.fc) { + letterFc = "rgb(" + Math.round(fc[0] * 255) + "," + Math.round(fc[1] * 255) + "," + Math.round(fc[2] * 255) + ")"; + } + if (this._hasMaskedPath) { + matrixHelper.translate(0, -documentData.ls); + matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0); + if (this._pathData.p.v) { + tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); + var rot = Math.atan(tanAngle) * 180 / Math.PI; + if (currentPoint.point[0] < prevPoint.point[0]) { + rot += 180; + } + matrixHelper.rotate(-rot * Math.PI / 180); + } + matrixHelper.translate(xPathPos, yPathPos, 0); + currentLength -= alignment[0] * letters[i].an * 5e-3; + if (letters[i + 1] && ind !== letters[i + 1].ind) { + currentLength += letters[i].an / 2; + currentLength += documentData.tr * 1e-3 * documentData.finalSize; + } + } else { + matrixHelper.translate(xPos, yPos, 0); + if (documentData.ps) { + matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); + } + switch (documentData.j) { + case 1: + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); + break; + case 2: + matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); + break; + default: + break; + } + matrixHelper.translate(0, -documentData.ls); + matrixHelper.translate(offf, 0, 0); + matrixHelper.translate(alignment[0] * letters[i].an * 5e-3, alignment[1] * yOff * 0.01, 0); + xPos += letters[i].l + documentData.tr * 1e-3 * documentData.finalSize; + } + if (renderType === "html") { + letterM = matrixHelper.toCSS(); + } else if (renderType === "svg") { + letterM = matrixHelper.to2dCSS(); + } else { + 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]]; + } + letterO = elemOpacity; + } + if (renderedLettersCount <= i) { + letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); + this.renderedLetters.push(letterValue); + renderedLettersCount += 1; + this.lettersChangedFlag = true; + } else { + letterValue = this.renderedLetters[i]; + this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; + } + } + }; + TextAnimatorProperty.prototype.getValue = function() { + if (this._elem.globalData.frameId === this._frameId) { + return; + } + this._frameId = this._elem.globalData.frameId; + this.iterateDynamicProperties(); + }; + TextAnimatorProperty.prototype.mHelper = new Matrix(); + TextAnimatorProperty.prototype.defaultPropsArray = []; + extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); + ITextElement.prototype.initElement = function(data2, globalData2, comp2) { + this.lettersChangedFlag = true; + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.textProperty = new TextProperty(this, data2.t, this.dynamicProperties); + this.textAnimator = new TextAnimatorProperty(data2.t, this.renderType, this); + this.initTransform(data2, globalData2, comp2); + this.initHierarchy(); + this.initRenderable(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + this.createContent(); + this.hide(); + this.textAnimator.searchProperties(this.dynamicProperties); + }; + ITextElement.prototype.prepareFrame = function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + if (this.textProperty._mdf || this.textProperty._isFirstFrame) { + this.buildNewText(); + this.textProperty._isFirstFrame = false; + this.textProperty._mdf = false; + } + }; + ITextElement.prototype.createPathShape = function(matrixHelper, shapes) { + var j; + var jLen = shapes.length; + var pathNodes; + var shapeStr = ""; + for (j = 0; j < jLen; j += 1) { + if (shapes[j].ty === "sh") { + pathNodes = shapes[j].ks.k; + shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); + } + } + return shapeStr; + }; + ITextElement.prototype.updateDocumentData = function(newData, index2) { + this.textProperty.updateDocumentData(newData, index2); + }; + ITextElement.prototype.canResizeFont = function(_canResize) { + this.textProperty.canResizeFont(_canResize); + }; + ITextElement.prototype.setMinimumFontSize = function(_fontSize) { + this.textProperty.setMinimumFontSize(_fontSize); + }; + ITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) { + if (documentData.ps) { + matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); + } + matrixHelper.translate(0, -documentData.ls, 0); + switch (documentData.j) { + case 1: + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); + break; + case 2: + matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); + break; + default: + break; + } + matrixHelper.translate(xPos, yPos, 0); + }; + ITextElement.prototype.buildColor = function(colorData) { + return "rgb(" + Math.round(colorData[0] * 255) + "," + Math.round(colorData[1] * 255) + "," + Math.round(colorData[2] * 255) + ")"; + }; + ITextElement.prototype.emptyProp = new LetterProps(); + ITextElement.prototype.destroy = function() { + }; + emptyShapeData = { + shapes: [] + }; + extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement); + SVGTextLottieElement.prototype.createContent = function() { + if (this.data.singleShape && !this.globalData.fontManager.chars) { + this.textContainer = createNS("text"); + } + }; + SVGTextLottieElement.prototype.buildTextContents = function(textArray) { + var i = 0; + var len = textArray.length; + var textContents = []; + var currentTextContent = ""; + while (i < len) { + if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { + textContents.push(currentTextContent); + currentTextContent = ""; + } else { + currentTextContent += textArray[i]; + } + i += 1; + } + textContents.push(currentTextContent); + return textContents; + }; + SVGTextLottieElement.prototype.buildShapeData = function(data2, scale2) { + if (data2.shapes && data2.shapes.length) { + var shape = data2.shapes[0]; + if (shape.it) { + var shapeItem = shape.it[shape.it.length - 1]; + if (shapeItem.s) { + shapeItem.s.k[0] = scale2; + shapeItem.s.k[1] = scale2; + } + } + } + return data2; + }; + SVGTextLottieElement.prototype.buildNewText = function() { + this.addDynamicProperty(this); + var i; + var len; + var documentData = this.textProperty.currentData; + this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); + if (documentData.fc) { + this.layerElement.setAttribute("fill", this.buildColor(documentData.fc)); + } else { + this.layerElement.setAttribute("fill", "rgba(0,0,0,0)"); + } + if (documentData.sc) { + this.layerElement.setAttribute("stroke", this.buildColor(documentData.sc)); + this.layerElement.setAttribute("stroke-width", documentData.sw); + } + this.layerElement.setAttribute("font-size", documentData.finalSize); + var fontData = this.globalData.fontManager.getFontByName(documentData.f); + if (fontData.fClass) { + this.layerElement.setAttribute("class", fontData.fClass); + } else { + this.layerElement.setAttribute("font-family", fontData.fFamily); + var fWeight = documentData.fWeight; + var fStyle = documentData.fStyle; + this.layerElement.setAttribute("font-style", fStyle); + this.layerElement.setAttribute("font-weight", fWeight); + } + this.layerElement.setAttribute("aria-label", documentData.t); + var letters = documentData.l || []; + var usesGlyphs = !!this.globalData.fontManager.chars; + len = letters.length; + var tSpan; + var matrixHelper = this.mHelper; + var shapeStr = ""; + var singleShape = this.data.singleShape; + var xPos = 0; + var yPos = 0; + var firstLine = true; + var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize; + if (singleShape && !usesGlyphs && !documentData.sz) { + var tElement = this.textContainer; + var justify = "start"; + switch (documentData.j) { + case 1: + justify = "end"; + break; + case 2: + justify = "middle"; + break; + default: + justify = "start"; + break; + } + tElement.setAttribute("text-anchor", justify); + tElement.setAttribute("letter-spacing", trackingOffset); + var textContent = this.buildTextContents(documentData.finalText); + len = textContent.length; + yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; + for (i = 0; i < len; i += 1) { + tSpan = this.textSpans[i].span || createNS("tspan"); + tSpan.textContent = textContent[i]; + tSpan.setAttribute("x", 0); + tSpan.setAttribute("y", yPos); + tSpan.style.display = "inherit"; + tElement.appendChild(tSpan); + if (!this.textSpans[i]) { + this.textSpans[i] = { + span: null, + glyph: null + }; + } + this.textSpans[i].span = tSpan; + yPos += documentData.finalLineHeight; + } + this.layerElement.appendChild(tElement); + } else { + var cachedSpansLength = this.textSpans.length; + var charData; + for (i = 0; i < len; i += 1) { + if (!this.textSpans[i]) { + this.textSpans[i] = { + span: null, + childSpan: null, + glyph: null + }; + } + if (!usesGlyphs || !singleShape || i === 0) { + tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? "g" : "text"); + if (cachedSpansLength <= i) { + tSpan.setAttribute("stroke-linecap", "butt"); + tSpan.setAttribute("stroke-linejoin", "round"); + tSpan.setAttribute("stroke-miterlimit", "4"); + this.textSpans[i].span = tSpan; + if (usesGlyphs) { + var childSpan = createNS("g"); + tSpan.appendChild(childSpan); + this.textSpans[i].childSpan = childSpan; + } + this.textSpans[i].span = tSpan; + this.layerElement.appendChild(tSpan); + } + tSpan.style.display = "inherit"; + } + matrixHelper.reset(); + if (singleShape) { + if (letters[i].n) { + xPos = -trackingOffset; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + firstLine = false; + } + this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); + xPos += letters[i].l || 0; + xPos += trackingOffset; + } + if (usesGlyphs) { + charData = this.globalData.fontManager.getCharData( + documentData.finalText[i], + fontData.fStyle, + this.globalData.fontManager.getFontByName(documentData.f).fFamily + ); + var glyphElement; + if (charData.t === 1) { + glyphElement = new SVGCompElement(charData.data, this.globalData, this); + } else { + var data2 = emptyShapeData; + if (charData.data && charData.data.shapes) { + data2 = this.buildShapeData(charData.data, documentData.finalSize); + } + glyphElement = new SVGShapeElement(data2, this.globalData, this); + } + if (this.textSpans[i].glyph) { + var glyph = this.textSpans[i].glyph; + this.textSpans[i].childSpan.removeChild(glyph.layerElement); + glyph.destroy(); + } + this.textSpans[i].glyph = glyphElement; + glyphElement._debug = true; + glyphElement.prepareFrame(0); + glyphElement.renderFrame(); + this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); + if (charData.t === 1) { + this.textSpans[i].childSpan.setAttribute("transform", "scale(" + documentData.finalSize / 100 + "," + documentData.finalSize / 100 + ")"); + } + } else { + if (singleShape) { + tSpan.setAttribute("transform", "translate(" + matrixHelper.props[12] + "," + matrixHelper.props[13] + ")"); + } + tSpan.textContent = letters[i].val; + tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); + } + } + if (singleShape && tSpan) { + tSpan.setAttribute("d", shapeStr); + } + } + while (i < this.textSpans.length) { + this.textSpans[i].span.style.display = "none"; + i += 1; + } + this._sizeChanged = true; + }; + SVGTextLottieElement.prototype.sourceRectAtTime = function() { + this.prepareFrame(this.comp.renderedFrame - this.data.st); + this.renderInnerContent(); + if (this._sizeChanged) { + this._sizeChanged = false; + var textBox = this.layerElement.getBBox(); + this.bbox = { + top: textBox.y, + left: textBox.x, + width: textBox.width, + height: textBox.height + }; + } + return this.bbox; + }; + SVGTextLottieElement.prototype.getValue = function() { + var i; + var len = this.textSpans.length; + var glyphElement; + this.renderedFrame = this.comp.renderedFrame; + for (i = 0; i < len; i += 1) { + glyphElement = this.textSpans[i].glyph; + if (glyphElement) { + glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); + if (glyphElement._mdf) { + this._mdf = true; + } + } + } + }; + SVGTextLottieElement.prototype.renderInnerContent = function() { + if (!this.data.singleShape || this._mdf) { + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); + if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { + this._sizeChanged = true; + var i; + var len; + var renderedLetters = this.textAnimator.renderedLetters; + var letters = this.textProperty.currentData.l; + len = letters.length; + var renderedLetter; + var textSpan; + var glyphElement; + for (i = 0; i < len; i += 1) { + if (!letters[i].n) { + renderedLetter = renderedLetters[i]; + textSpan = this.textSpans[i].span; + glyphElement = this.textSpans[i].glyph; + if (glyphElement) { + glyphElement.renderFrame(); + } + if (renderedLetter._mdf.m) { + textSpan.setAttribute("transform", renderedLetter.m); + } + if (renderedLetter._mdf.o) { + textSpan.setAttribute("opacity", renderedLetter.o); + } + if (renderedLetter._mdf.sw) { + textSpan.setAttribute("stroke-width", renderedLetter.sw); + } + if (renderedLetter._mdf.sc) { + textSpan.setAttribute("stroke", renderedLetter.sc); + } + if (renderedLetter._mdf.fc) { + textSpan.setAttribute("fill", renderedLetter.fc); + } + } + } + } + } + }; + extendPrototype([IImageElement], ISolidElement); + ISolidElement.prototype.createContent = function() { + var rect = createNS("rect"); + rect.setAttribute("width", this.data.sw); + rect.setAttribute("height", this.data.sh); + rect.setAttribute("fill", this.data.sc); + this.layerElement.appendChild(rect); + }; + NullElement.prototype.prepareFrame = function(num) { + this.prepareProperties(num, true); + }; + NullElement.prototype.renderFrame = function() { + }; + NullElement.prototype.getBaseElement = function() { + return null; + }; + NullElement.prototype.destroy = function() { + }; + NullElement.prototype.sourceRectAtTime = function() { + }; + NullElement.prototype.hide = function() { + }; + extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement); + extendPrototype([BaseRenderer], SVGRendererBase); + SVGRendererBase.prototype.createNull = function(data2) { + return new NullElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createShape = function(data2) { + return new SVGShapeElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createText = function(data2) { + return new SVGTextLottieElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createImage = function(data2) { + return new IImageElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.createSolid = function(data2) { + return new ISolidElement(data2, this.globalData, this); + }; + SVGRendererBase.prototype.configAnimation = function(animData) { + this.svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg"); + if (this.renderConfig.viewBoxSize) { + this.svgElement.setAttribute("viewBox", this.renderConfig.viewBoxSize); + } else { + this.svgElement.setAttribute("viewBox", "0 0 " + animData.w + " " + animData.h); + } + if (!this.renderConfig.viewBoxOnly) { + this.svgElement.setAttribute("width", animData.w); + this.svgElement.setAttribute("height", animData.h); + this.svgElement.style.width = "100%"; + this.svgElement.style.height = "100%"; + this.svgElement.style.transform = "translate3d(0,0,0)"; + this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; + } + if (this.renderConfig.width) { + this.svgElement.setAttribute("width", this.renderConfig.width); + } + if (this.renderConfig.height) { + this.svgElement.setAttribute("height", this.renderConfig.height); + } + if (this.renderConfig.className) { + this.svgElement.setAttribute("class", this.renderConfig.className); + } + if (this.renderConfig.id) { + this.svgElement.setAttribute("id", this.renderConfig.id); + } + if (this.renderConfig.focusable !== void 0) { + this.svgElement.setAttribute("focusable", this.renderConfig.focusable); + } + this.svgElement.setAttribute("preserveAspectRatio", this.renderConfig.preserveAspectRatio); + this.animationItem.wrapper.appendChild(this.svgElement); + var defs = this.globalData.defs; + this.setupGlobalData(animData, defs); + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; + this.data = animData; + var maskElement = createNS("clipPath"); + var rect = createNS("rect"); + rect.setAttribute("width", animData.w); + rect.setAttribute("height", animData.h); + rect.setAttribute("x", 0); + rect.setAttribute("y", 0); + var maskId = createElementID(); + maskElement.setAttribute("id", maskId); + maskElement.appendChild(rect); + this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + maskId + ")"); + defs.appendChild(maskElement); + this.layers = animData.layers; + this.elements = createSizedArray(animData.layers.length); + }; + SVGRendererBase.prototype.destroy = function() { + if (this.animationItem.wrapper) { + this.animationItem.wrapper.innerText = ""; + } + this.layerElement = null; + this.globalData.defs = null; + var i; + var len = this.layers ? this.layers.length : 0; + for (i = 0; i < len; i += 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.elements.length = 0; + this.destroyed = true; + this.animationItem = null; + }; + SVGRendererBase.prototype.updateContainerSize = function() { + }; + SVGRendererBase.prototype.buildItem = function(pos) { + var elements = this.elements; + if (elements[pos] || this.layers[pos].ty === 99) { + return; + } + elements[pos] = true; + var element = this.createItem(this.layers[pos]); + elements[pos] = element; + if (getExpressionsPlugin()) { + if (this.layers[pos].ty === 0) { + this.globalData.projectInterface.registerComposition(element); + } + element.initExpressions(); + } + this.appendElementInPos(element, pos); + if (this.layers[pos].tt) { + if (!this.elements[pos - 1] || this.elements[pos - 1] === true) { + this.buildItem(pos - 1); + this.addPendingElement(element); + } else { + element.setMatte(elements[pos - 1].layerId); + } + } + }; + SVGRendererBase.prototype.checkPendingElements = function() { + while (this.pendingElements.length) { + var element = this.pendingElements.pop(); + element.checkParenting(); + if (element.data.tt) { + var i = 0; + var len = this.elements.length; + while (i < len) { + if (this.elements[i] === element) { + element.setMatte(this.elements[i - 1].layerId); + break; + } + i += 1; + } + } + } + }; + SVGRendererBase.prototype.renderFrame = function(num) { + if (this.renderedFrame === num || this.destroyed) { + return; + } + if (num === null) { + num = this.renderedFrame; + } else { + this.renderedFrame = num; + } + this.globalData.frameNum = num; + this.globalData.frameId += 1; + this.globalData.projectInterface.currentFrame = num; + this.globalData._mdf = false; + var i; + var len = this.layers.length; + if (!this.completeLayers) { + this.checkLayers(num); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(num - this.layers[i].st); + } + } + if (this.globalData._mdf) { + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + } + }; + SVGRendererBase.prototype.appendElementInPos = function(element, pos) { + var newElement = element.getBaseElement(); + if (!newElement) { + return; + } + var i = 0; + var nextElement; + while (i < pos) { + if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) { + nextElement = this.elements[i].getBaseElement(); + } + i += 1; + } + if (nextElement) { + this.layerElement.insertBefore(newElement, nextElement); + } else { + this.layerElement.appendChild(newElement); + } + }; + SVGRendererBase.prototype.hide = function() { + this.layerElement.style.display = "none"; + }; + SVGRendererBase.prototype.show = function() { + this.layerElement.style.display = "block"; + }; + extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement); + ICompElement.prototype.initElement = function(data2, globalData2, comp2) { + this.initFrame(); + this.initBaseData(data2, globalData2, comp2); + this.initTransform(data2, globalData2, comp2); + this.initRenderable(); + this.initHierarchy(); + this.initRendererElement(); + this.createContainerElements(); + this.createRenderableComponents(); + if (this.data.xt || !globalData2.progressiveLoad) { + this.buildAllItems(); + } + this.hide(); + }; + ICompElement.prototype.prepareFrame = function(num) { + this._mdf = false; + this.prepareRenderableFrame(num); + this.prepareProperties(num, this.isInRange); + if (!this.isInRange && !this.data.xt) { + return; + } + if (!this.tm._placeholder) { + var timeRemapped = this.tm.v; + if (timeRemapped === this.data.op) { + timeRemapped = this.data.op - 1; + } + this.renderedFrame = timeRemapped; + } else { + this.renderedFrame = num / this.data.sr; + } + var i; + var len = this.elements.length; + if (!this.completeLayers) { + this.checkLayers(this.renderedFrame); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); + if (this.elements[i]._mdf) { + this._mdf = true; + } + } + } + }; + ICompElement.prototype.renderInnerContent = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + }; + ICompElement.prototype.setElements = function(elems) { + this.elements = elems; + }; + ICompElement.prototype.getElements = function() { + return this.elements; + }; + ICompElement.prototype.destroyElements = function() { + var i; + var len = this.layers.length; + for (i = 0; i < len; i += 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + }; + ICompElement.prototype.destroy = function() { + this.destroyElements(); + this.destroyBaseElement(); + }; + extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement); + SVGCompElement.prototype.createComp = function(data2) { + return new SVGCompElement(data2, this.globalData, this); + }; + extendPrototype([SVGRendererBase], SVGRenderer); + SVGRenderer.prototype.createComp = function(data2) { + return new SVGCompElement(data2, this.globalData, this); + }; + CVContextData.prototype.duplicate = function() { + var newLength = this._length * 2; + var currentSavedOp = this.savedOp; + this.savedOp = createTypedArray("float32", newLength); + this.savedOp.set(currentSavedOp); + var i = 0; + for (i = this._length; i < newLength; i += 1) { + this.saved[i] = createTypedArray("float32", 16); + } + this._length = newLength; + }; + CVContextData.prototype.reset = function() { + this.cArrPos = 0; + this.cTr.reset(); + this.cO = 1; + }; + ShapeTransformManager.prototype = { + addTransformSequence: function(transforms) { + var i; + var len = transforms.length; + var key2 = "_"; + for (i = 0; i < len; i += 1) { + key2 += transforms[i].transform.key + "_"; + } + var sequence = this.sequences[key2]; + if (!sequence) { + sequence = { + transforms: [].concat(transforms), + finalTransform: new Matrix(), + _mdf: false + }; + this.sequences[key2] = sequence; + this.sequenceList.push(sequence); + } + return sequence; + }, + processSequence: function(sequence, isFirstFrame) { + var i = 0; + var len = sequence.transforms.length; + var _mdf = isFirstFrame; + while (i < len && !isFirstFrame) { + if (sequence.transforms[i].transform.mProps._mdf) { + _mdf = true; + break; + } + i += 1; + } + if (_mdf) { + var props; + sequence.finalTransform.reset(); + for (i = len - 1; i >= 0; i -= 1) { + props = sequence.transforms[i].transform.mProps.v.props; + 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]); + } + } + sequence._mdf = _mdf; + }, + processSequences: function(isFirstFrame) { + var i; + var len = this.sequenceList.length; + for (i = 0; i < len; i += 1) { + this.processSequence(this.sequenceList[i], isFirstFrame); + } + }, + getNewKey: function() { + this.transform_key_count += 1; + return "_" + this.transform_key_count; + } + }; + CVEffects.prototype.renderFrame = function() { + }; + CVMaskElement.prototype.renderFrame = function() { + if (!this.hasMasks) { + return; + } + var transform2 = this.element.finalTransform.mat; + var ctx = this.element.canvasContext; + var i; + var len = this.masksProperties.length; + var pt; + var pts; + var data2; + ctx.beginPath(); + for (i = 0; i < len; i += 1) { + if (this.masksProperties[i].mode !== "n") { + if (this.masksProperties[i].inv) { + ctx.moveTo(0, 0); + ctx.lineTo(this.element.globalData.compSize.w, 0); + ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); + ctx.lineTo(0, this.element.globalData.compSize.h); + ctx.lineTo(0, 0); + } + data2 = this.viewData[i].v; + pt = transform2.applyToPointArray(data2.v[0][0], data2.v[0][1], 0); + ctx.moveTo(pt[0], pt[1]); + var j; + var jLen = data2._length; + for (j = 1; j < jLen; j += 1) { + pts = transform2.applyToTriplePoints(data2.o[j - 1], data2.i[j], data2.v[j]); + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); + } + pts = transform2.applyToTriplePoints(data2.o[j - 1], data2.i[0], data2.v[0]); + ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); + } + } + this.element.globalData.renderer.save(true); + ctx.clip(); + }; + CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; + CVMaskElement.prototype.destroy = function() { + this.element = null; + }; + CVBaseElement.prototype = { + createElements: function() { + }, + initRendererElement: function() { + }, + createContainerElements: function() { + this.canvasContext = this.globalData.canvasContext; + this.renderableEffectsManager = new CVEffects(this); + }, + createContent: function() { + }, + setBlendMode: function() { + var globalData2 = this.globalData; + if (globalData2.blendMode !== this.data.bm) { + globalData2.blendMode = this.data.bm; + var blendModeValue = getBlendMode(this.data.bm); + globalData2.canvasContext.globalCompositeOperation = blendModeValue; + } + }, + createRenderableComponents: function() { + this.maskManager = new CVMaskElement(this.data, this); + }, + hideElement: function() { + if (!this.hidden && (!this.isInRange || this.isTransparent)) { + this.hidden = true; + } + }, + showElement: function() { + if (this.isInRange && !this.isTransparent) { + this.hidden = false; + this._isFirstFrame = true; + this.maskManager._isFirstFrame = true; + } + }, + renderFrame: function() { + if (this.hidden || this.data.hd) { + return; + } + this.renderTransform(); + this.renderRenderable(); + this.setBlendMode(); + var forceRealStack = this.data.ty === 0; + this.globalData.renderer.save(forceRealStack); + this.globalData.renderer.ctxTransform(this.finalTransform.mat.props); + this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v); + this.renderInnerContent(); + this.globalData.renderer.restore(forceRealStack); + if (this.maskManager.hasMasks) { + this.globalData.renderer.restore(true); + } + if (this._isFirstFrame) { + this._isFirstFrame = false; + } + }, + destroy: function() { + this.canvasContext = null; + this.data = null; + this.globalData = null; + this.maskManager.destroy(); + }, + mHelper: new Matrix() + }; + CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; + CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; + CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; + extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement); + CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; + CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false }; + CVShapeElement.prototype.dashResetter = []; + CVShapeElement.prototype.createContent = function() { + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); + }; + CVShapeElement.prototype.createStyleElement = function(data2, transforms) { + var styleElem = { + data: data2, + type: data2.ty, + preTransforms: this.transformsManager.addTransformSequence(transforms), + transforms: [], + elements: [], + closed: data2.hd === true + }; + var elementData = {}; + if (data2.ty === "fl" || data2.ty === "st") { + elementData.c = PropertyFactory.getProp(this, data2.c, 1, 255, this); + if (!elementData.c.k) { + styleElem.co = "rgb(" + bmFloor(elementData.c.v[0]) + "," + bmFloor(elementData.c.v[1]) + "," + bmFloor(elementData.c.v[2]) + ")"; + } + } else if (data2.ty === "gf" || data2.ty === "gs") { + elementData.s = PropertyFactory.getProp(this, data2.s, 1, null, this); + elementData.e = PropertyFactory.getProp(this, data2.e, 1, null, this); + elementData.h = PropertyFactory.getProp(this, data2.h || { k: 0 }, 0, 0.01, this); + elementData.a = PropertyFactory.getProp(this, data2.a || { k: 0 }, 0, degToRads, this); + elementData.g = new GradientProperty(this, data2.g, this); + } + elementData.o = PropertyFactory.getProp(this, data2.o, 0, 0.01, this); + if (data2.ty === "st" || data2.ty === "gs") { + styleElem.lc = lineCapEnum[data2.lc || 2]; + styleElem.lj = lineJoinEnum[data2.lj || 2]; + if (data2.lj == 1) { + styleElem.ml = data2.ml; + } + elementData.w = PropertyFactory.getProp(this, data2.w, 0, null, this); + if (!elementData.w.k) { + styleElem.wi = elementData.w.v; + } + if (data2.d) { + var d = new DashProperty(this, data2.d, "canvas", this); + elementData.d = d; + if (!elementData.d.k) { + styleElem.da = elementData.d.dashArray; + styleElem.do = elementData.d.dashoffset[0]; + } + } + } else { + styleElem.r = data2.r === 2 ? "evenodd" : "nonzero"; + } + this.stylesList.push(styleElem); + elementData.style = styleElem; + return elementData; + }; + CVShapeElement.prototype.createGroupElement = function() { + var elementData = { + it: [], + prevViewData: [] + }; + return elementData; + }; + CVShapeElement.prototype.createTransformElement = function(data2) { + var elementData = { + transform: { + opacity: 1, + _opMdf: false, + key: this.transformsManager.getNewKey(), + op: PropertyFactory.getProp(this, data2.o, 0, 0.01, this), + mProps: TransformPropertyFactory.getTransformProperty(this, data2, this) + } + }; + return elementData; + }; + CVShapeElement.prototype.createShapeElement = function(data2) { + var elementData = new CVShapeData(this, data2, this.stylesList, this.transformsManager); + this.shapes.push(elementData); + this.addShapeToModifiers(elementData); + return elementData; + }; + CVShapeElement.prototype.reloadShapes = function() { + this._isFirstFrame = true; + var i; + var len = this.itemsData.length; + for (i = 0; i < len; i += 1) { + this.prevViewData[i] = this.itemsData[i]; + } + this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); + len = this.dynamicProperties.length; + for (i = 0; i < len; i += 1) { + this.dynamicProperties[i].getValue(); + } + this.renderModifiers(); + this.transformsManager.processSequences(this._isFirstFrame); + }; + CVShapeElement.prototype.addTransformToStyleList = function(transform2) { + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + if (!this.stylesList[i].closed) { + this.stylesList[i].transforms.push(transform2); + } + } + }; + CVShapeElement.prototype.removeTransformFromStyleList = function() { + var i; + var len = this.stylesList.length; + for (i = 0; i < len; i += 1) { + if (!this.stylesList[i].closed) { + this.stylesList[i].transforms.pop(); + } + } + }; + CVShapeElement.prototype.closeStyles = function(styles) { + var i; + var len = styles.length; + for (i = 0; i < len; i += 1) { + styles[i].closed = true; + } + }; + CVShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, shouldRender, transforms) { + var i; + var len = arr.length - 1; + var j; + var jLen; + var ownStyles = []; + var ownModifiers = []; + var processedPos; + var modifier; + var currentTransform; + var ownTransforms = [].concat(transforms); + for (i = len; i >= 0; i -= 1) { + processedPos = this.searchProcessedElement(arr[i]); + if (!processedPos) { + arr[i]._shouldRender = shouldRender; + } else { + itemsData[i] = prevViewData[processedPos - 1]; + } + if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs") { + if (!processedPos) { + itemsData[i] = this.createStyleElement(arr[i], ownTransforms); + } else { + itemsData[i].style.closed = false; + } + ownStyles.push(itemsData[i].style); + } else if (arr[i].ty === "gr") { + if (!processedPos) { + itemsData[i] = this.createGroupElement(arr[i]); + } else { + jLen = itemsData[i].it.length; + for (j = 0; j < jLen; j += 1) { + itemsData[i].prevViewData[j] = itemsData[i].it[j]; + } + } + this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); + } else if (arr[i].ty === "tr") { + if (!processedPos) { + currentTransform = this.createTransformElement(arr[i]); + itemsData[i] = currentTransform; + } + ownTransforms.push(itemsData[i]); + this.addTransformToStyleList(itemsData[i]); + } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { + if (!processedPos) { + itemsData[i] = this.createShapeElement(arr[i]); + } + } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "pb") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + modifier.init(this, arr[i]); + itemsData[i] = modifier; + this.shapeModifiers.push(modifier); + } else { + modifier = itemsData[i]; + modifier.closed = false; + } + ownModifiers.push(modifier); + } else if (arr[i].ty === "rp") { + if (!processedPos) { + modifier = ShapeModifiers.getModifier(arr[i].ty); + itemsData[i] = modifier; + modifier.init(this, arr, i, itemsData); + this.shapeModifiers.push(modifier); + shouldRender = false; + } else { + modifier = itemsData[i]; + modifier.closed = true; + } + ownModifiers.push(modifier); + } + this.addProcessedElement(arr[i], i + 1); + } + this.removeTransformFromStyleList(); + this.closeStyles(ownStyles); + len = ownModifiers.length; + for (i = 0; i < len; i += 1) { + ownModifiers[i].closed = true; + } + }; + CVShapeElement.prototype.renderInnerContent = function() { + this.transformHelper.opacity = 1; + this.transformHelper._opMdf = false; + this.renderModifiers(); + this.transformsManager.processSequences(this._isFirstFrame); + this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); + }; + CVShapeElement.prototype.renderShapeTransform = function(parentTransform, groupTransform) { + if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { + groupTransform.opacity = parentTransform.opacity; + groupTransform.opacity *= groupTransform.op.v; + groupTransform._opMdf = true; + } + }; + CVShapeElement.prototype.drawLayer = function() { + var i; + var len = this.stylesList.length; + var j; + var jLen; + var k2; + var kLen; + var elems; + var nodes; + var renderer2 = this.globalData.renderer; + var ctx = this.globalData.canvasContext; + var type; + var currentStyle; + for (i = 0; i < len; i += 1) { + currentStyle = this.stylesList[i]; + type = currentStyle.type; + if (!((type === "st" || type === "gs") && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { + renderer2.save(); + elems = currentStyle.elements; + if (type === "st" || type === "gs") { + ctx.strokeStyle = type === "st" ? currentStyle.co : currentStyle.grd; + ctx.lineWidth = currentStyle.wi; + ctx.lineCap = currentStyle.lc; + ctx.lineJoin = currentStyle.lj; + ctx.miterLimit = currentStyle.ml || 0; + } else { + ctx.fillStyle = type === "fl" ? currentStyle.co : currentStyle.grd; + } + renderer2.ctxOpacity(currentStyle.coOp); + if (type !== "st" && type !== "gs") { + ctx.beginPath(); + } + renderer2.ctxTransform(currentStyle.preTransforms.finalTransform.props); + jLen = elems.length; + for (j = 0; j < jLen; j += 1) { + if (type === "st" || type === "gs") { + ctx.beginPath(); + if (currentStyle.da) { + ctx.setLineDash(currentStyle.da); + ctx.lineDashOffset = currentStyle.do; + } + } + nodes = elems[j].trNodes; + kLen = nodes.length; + for (k2 = 0; k2 < kLen; k2 += 1) { + if (nodes[k2].t === "m") { + ctx.moveTo(nodes[k2].p[0], nodes[k2].p[1]); + } else if (nodes[k2].t === "c") { + ctx.bezierCurveTo(nodes[k2].pts[0], nodes[k2].pts[1], nodes[k2].pts[2], nodes[k2].pts[3], nodes[k2].pts[4], nodes[k2].pts[5]); + } else { + ctx.closePath(); + } + } + if (type === "st" || type === "gs") { + ctx.stroke(); + if (currentStyle.da) { + ctx.setLineDash(this.dashResetter); + } + } + } + if (type !== "st" && type !== "gs") { + ctx.fill(currentStyle.r); + } + renderer2.restore(); + } + } + }; + CVShapeElement.prototype.renderShape = function(parentTransform, items, data2, isMain) { + var i; + var len = items.length - 1; + var groupTransform; + groupTransform = parentTransform; + for (i = len; i >= 0; i -= 1) { + if (items[i].ty === "tr") { + groupTransform = data2[i].transform; + this.renderShapeTransform(parentTransform, groupTransform); + } else if (items[i].ty === "sh" || items[i].ty === "el" || items[i].ty === "rc" || items[i].ty === "sr") { + this.renderPath(items[i], data2[i]); + } else if (items[i].ty === "fl") { + this.renderFill(items[i], data2[i], groupTransform); + } else if (items[i].ty === "st") { + this.renderStroke(items[i], data2[i], groupTransform); + } else if (items[i].ty === "gf" || items[i].ty === "gs") { + this.renderGradientFill(items[i], data2[i], groupTransform); + } else if (items[i].ty === "gr") { + this.renderShape(groupTransform, items[i].it, data2[i].it); + } else if (items[i].ty === "tm") { + } + } + if (isMain) { + this.drawLayer(); + } + }; + CVShapeElement.prototype.renderStyledShape = function(styledShape, shape) { + if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { + var shapeNodes = styledShape.trNodes; + var paths = shape.paths; + var i; + var len; + var j; + var jLen = paths._length; + shapeNodes.length = 0; + var groupTransformMat = styledShape.transforms.finalTransform; + for (j = 0; j < jLen; j += 1) { + var pathNodes = paths.shapes[j]; + if (pathNodes && pathNodes.v) { + len = pathNodes._length; + for (i = 1; i < len; i += 1) { + if (i === 1) { + shapeNodes.push({ + t: "m", + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) + }); + } + shapeNodes.push({ + t: "c", + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) + }); + } + if (len === 1) { + shapeNodes.push({ + t: "m", + p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) + }); + } + if (pathNodes.c && len) { + shapeNodes.push({ + t: "c", + pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) + }); + shapeNodes.push({ + t: "z" + }); + } + } + } + styledShape.trNodes = shapeNodes; + } + }; + CVShapeElement.prototype.renderPath = function(pathData, itemData) { + if (pathData.hd !== true && pathData._shouldRender) { + var i; + var len = itemData.styledShapes.length; + for (i = 0; i < len; i += 1) { + this.renderStyledShape(itemData.styledShapes[i], itemData.sh); + } + } + }; + CVShapeElement.prototype.renderFill = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + if (itemData.c._mdf || this._isFirstFrame) { + styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; + } + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { + styleElem.coOp = itemData.o.v * groupTransform.opacity; + } + }; + CVShapeElement.prototype.renderGradientFill = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + var grd; + if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { + var ctx = this.globalData.canvasContext; + var pt1 = itemData.s.v; + var pt2 = itemData.e.v; + if (styleData.t === 1) { + grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); + } else { + var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); + var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); + var percent = itemData.h.v; + if (percent >= 1) { + percent = 0.99; + } else if (percent <= -1) { + percent = -0.99; + } + var dist = rad * percent; + var x2 = Math.cos(ang + itemData.a.v) * dist + pt1[0]; + var y2 = Math.sin(ang + itemData.a.v) * dist + pt1[1]; + grd = ctx.createRadialGradient(x2, y2, 0, pt1[0], pt1[1], rad); + } + var i; + var len = styleData.g.p; + var cValues = itemData.g.c; + var opacity = 1; + for (i = 0; i < len; i += 1) { + if (itemData.g._hasOpacity && itemData.g._collapsable) { + opacity = itemData.g.o[i * 2 + 1]; + } + grd.addColorStop(cValues[i * 4] / 100, "rgba(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + "," + opacity + ")"); + } + styleElem.grd = grd; + } + styleElem.coOp = itemData.o.v * groupTransform.opacity; + }; + CVShapeElement.prototype.renderStroke = function(styleData, itemData, groupTransform) { + var styleElem = itemData.style; + var d = itemData.d; + if (d && (d._mdf || this._isFirstFrame)) { + styleElem.da = d.dashArray; + styleElem.do = d.dashoffset[0]; + } + if (itemData.c._mdf || this._isFirstFrame) { + styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; + } + if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) { + styleElem.coOp = itemData.o.v * groupTransform.opacity; + } + if (itemData.w._mdf || this._isFirstFrame) { + styleElem.wi = itemData.w.v; + } + }; + CVShapeElement.prototype.destroy = function() { + this.shapesData = null; + this.globalData = null; + this.canvasContext = null; + this.stylesList.length = 0; + this.itemsData.length = 0; + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement); + CVTextElement.prototype.tHelper = createTag("canvas").getContext("2d"); + CVTextElement.prototype.buildNewText = function() { + var documentData = this.textProperty.currentData; + this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); + var hasFill = false; + if (documentData.fc) { + hasFill = true; + this.values.fill = this.buildColor(documentData.fc); + } else { + this.values.fill = "rgba(0,0,0,0)"; + } + this.fill = hasFill; + var hasStroke = false; + if (documentData.sc) { + hasStroke = true; + this.values.stroke = this.buildColor(documentData.sc); + this.values.sWidth = documentData.sw; + } + var fontData = this.globalData.fontManager.getFontByName(documentData.f); + var i; + var len; + var letters = documentData.l; + var matrixHelper = this.mHelper; + this.stroke = hasStroke; + this.values.fValue = documentData.finalSize + "px " + this.globalData.fontManager.getFontByName(documentData.f).fFamily; + len = documentData.finalText.length; + var charData; + var shapeData; + var k2; + var kLen; + var shapes; + var j; + var jLen; + var pathNodes; + var commands; + var pathArr; + var singleShape = this.data.singleShape; + var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize; + var xPos = 0; + var yPos = 0; + var firstLine = true; + var cnt = 0; + for (i = 0; i < len; i += 1) { + charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); + shapeData = charData && charData.data || {}; + matrixHelper.reset(); + if (singleShape && letters[i].n) { + xPos = -trackingOffset; + yPos += documentData.yOffset; + yPos += firstLine ? 1 : 0; + firstLine = false; + } + shapes = shapeData.shapes ? shapeData.shapes[0].it : []; + jLen = shapes.length; + matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); + if (singleShape) { + this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); + } + commands = createSizedArray(jLen - 1); + var commandsCounter = 0; + for (j = 0; j < jLen; j += 1) { + if (shapes[j].ty === "sh") { + kLen = shapes[j].ks.k.i.length; + pathNodes = shapes[j].ks.k; + pathArr = []; + for (k2 = 1; k2 < kLen; k2 += 1) { + if (k2 === 1) { + pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); + } + pathArr.push(matrixHelper.applyToX(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k2][0], pathNodes.i[k2][1], 0), matrixHelper.applyToY(pathNodes.i[k2][0], pathNodes.i[k2][1], 0), matrixHelper.applyToX(pathNodes.v[k2][0], pathNodes.v[k2][1], 0), matrixHelper.applyToY(pathNodes.v[k2][0], pathNodes.v[k2][1], 0)); + } + pathArr.push(matrixHelper.applyToX(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k2 - 1][0], pathNodes.o[k2 - 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)); + commands[commandsCounter] = pathArr; + commandsCounter += 1; + } + } + if (singleShape) { + xPos += letters[i].l; + xPos += trackingOffset; + } + if (this.textSpans[cnt]) { + this.textSpans[cnt].elem = commands; + } else { + this.textSpans[cnt] = { elem: commands }; + } + cnt += 1; + } + }; + CVTextElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.font = this.values.fValue; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 4; + if (!this.data.singleShape) { + this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); + } + var i; + var len; + var j; + var jLen; + var k2; + var kLen; + var renderedLetters = this.textAnimator.renderedLetters; + var letters = this.textProperty.currentData.l; + len = letters.length; + var renderedLetter; + var lastFill = null; + var lastStroke = null; + var lastStrokeW = null; + var commands; + var pathArr; + for (i = 0; i < len; i += 1) { + if (!letters[i].n) { + renderedLetter = renderedLetters[i]; + if (renderedLetter) { + this.globalData.renderer.save(); + this.globalData.renderer.ctxTransform(renderedLetter.p); + this.globalData.renderer.ctxOpacity(renderedLetter.o); + } + if (this.fill) { + if (renderedLetter && renderedLetter.fc) { + if (lastFill !== renderedLetter.fc) { + lastFill = renderedLetter.fc; + ctx.fillStyle = renderedLetter.fc; + } + } else if (lastFill !== this.values.fill) { + lastFill = this.values.fill; + ctx.fillStyle = this.values.fill; + } + commands = this.textSpans[i].elem; + jLen = commands.length; + this.globalData.canvasContext.beginPath(); + for (j = 0; j < jLen; j += 1) { + pathArr = commands[j]; + kLen = pathArr.length; + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); + for (k2 = 2; k2 < kLen; k2 += 6) { + this.globalData.canvasContext.bezierCurveTo(pathArr[k2], pathArr[k2 + 1], pathArr[k2 + 2], pathArr[k2 + 3], pathArr[k2 + 4], pathArr[k2 + 5]); + } + } + this.globalData.canvasContext.closePath(); + this.globalData.canvasContext.fill(); + } + if (this.stroke) { + if (renderedLetter && renderedLetter.sw) { + if (lastStrokeW !== renderedLetter.sw) { + lastStrokeW = renderedLetter.sw; + ctx.lineWidth = renderedLetter.sw; + } + } else if (lastStrokeW !== this.values.sWidth) { + lastStrokeW = this.values.sWidth; + ctx.lineWidth = this.values.sWidth; + } + if (renderedLetter && renderedLetter.sc) { + if (lastStroke !== renderedLetter.sc) { + lastStroke = renderedLetter.sc; + ctx.strokeStyle = renderedLetter.sc; + } + } else if (lastStroke !== this.values.stroke) { + lastStroke = this.values.stroke; + ctx.strokeStyle = this.values.stroke; + } + commands = this.textSpans[i].elem; + jLen = commands.length; + this.globalData.canvasContext.beginPath(); + for (j = 0; j < jLen; j += 1) { + pathArr = commands[j]; + kLen = pathArr.length; + this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); + for (k2 = 2; k2 < kLen; k2 += 6) { + this.globalData.canvasContext.bezierCurveTo(pathArr[k2], pathArr[k2 + 1], pathArr[k2 + 2], pathArr[k2 + 3], pathArr[k2 + 4], pathArr[k2 + 5]); + } + } + this.globalData.canvasContext.closePath(); + this.globalData.canvasContext.stroke(); + } + if (renderedLetter) { + this.globalData.renderer.restore(); + } + } + } + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement); + CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; + CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; + CVImageElement.prototype.createContent = function() { + if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { + var canvas = createTag("canvas"); + canvas.width = this.assetData.w; + canvas.height = this.assetData.h; + var ctx = canvas.getContext("2d"); + var imgW = this.img.width; + var imgH = this.img.height; + var imgRel = imgW / imgH; + var canvasRel = this.assetData.w / this.assetData.h; + var widthCrop; + var heightCrop; + var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; + if (imgRel > canvasRel && par === "xMidYMid slice" || imgRel < canvasRel && par !== "xMidYMid slice") { + heightCrop = imgH; + widthCrop = heightCrop * canvasRel; + } else { + widthCrop = imgW; + heightCrop = widthCrop / canvasRel; + } + ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); + this.img = canvas; + } + }; + CVImageElement.prototype.renderInnerContent = function() { + this.canvasContext.drawImage(this.img, 0, 0); + }; + CVImageElement.prototype.destroy = function() { + this.img = null; + }; + extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement); + CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; + CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; + CVSolidElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.fillStyle = this.data.sc; + ctx.fillRect(0, 0, this.data.sw, this.data.sh); + }; + extendPrototype([BaseRenderer], CanvasRendererBase); + CanvasRendererBase.prototype.createShape = function(data2) { + return new CVShapeElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createText = function(data2) { + return new CVTextElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createImage = function(data2) { + return new CVImageElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createSolid = function(data2) { + return new CVSolidElement(data2, this.globalData, this); + }; + CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; + CanvasRendererBase.prototype.ctxTransform = function(props) { + if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) { + return; + } + if (!this.renderConfig.clearCanvas) { + this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); + return; + } + this.transformMat.cloneFromProps(props); + var cProps = this.contextData.cTr.props; + 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]); + this.contextData.cTr.cloneFromProps(this.transformMat.props); + var trProps = this.contextData.cTr.props; + this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); + }; + CanvasRendererBase.prototype.ctxOpacity = function(op) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.globalAlpha *= op < 0 ? 0 : op; + this.globalData.currentGlobalAlpha = this.contextData.cO; + return; + } + this.contextData.cO *= op < 0 ? 0 : op; + if (this.globalData.currentGlobalAlpha !== this.contextData.cO) { + this.canvasContext.globalAlpha = this.contextData.cO; + this.globalData.currentGlobalAlpha = this.contextData.cO; + } + }; + CanvasRendererBase.prototype.reset = function() { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.restore(); + return; + } + this.contextData.reset(); + }; + CanvasRendererBase.prototype.save = function(actionFlag) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.save(); + return; + } + if (actionFlag) { + this.canvasContext.save(); + } + var props = this.contextData.cTr.props; + if (this.contextData._length <= this.contextData.cArrPos) { + this.contextData.duplicate(); + } + var i; + var arr = this.contextData.saved[this.contextData.cArrPos]; + for (i = 0; i < 16; i += 1) { + arr[i] = props[i]; + } + this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO; + this.contextData.cArrPos += 1; + }; + CanvasRendererBase.prototype.restore = function(actionFlag) { + if (!this.renderConfig.clearCanvas) { + this.canvasContext.restore(); + return; + } + if (actionFlag) { + this.canvasContext.restore(); + this.globalData.blendMode = "source-over"; + } + this.contextData.cArrPos -= 1; + var popped = this.contextData.saved[this.contextData.cArrPos]; + var i; + var arr = this.contextData.cTr.props; + for (i = 0; i < 16; i += 1) { + arr[i] = popped[i]; + } + this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]); + popped = this.contextData.savedOp[this.contextData.cArrPos]; + this.contextData.cO = popped; + if (this.globalData.currentGlobalAlpha !== popped) { + this.canvasContext.globalAlpha = popped; + this.globalData.currentGlobalAlpha = popped; + } + }; + CanvasRendererBase.prototype.configAnimation = function(animData) { + if (this.animationItem.wrapper) { + this.animationItem.container = createTag("canvas"); + var containerStyle = this.animationItem.container.style; + containerStyle.width = "100%"; + containerStyle.height = "100%"; + var origin = "0px 0px 0px"; + containerStyle.transformOrigin = origin; + containerStyle.mozTransformOrigin = origin; + containerStyle.webkitTransformOrigin = origin; + containerStyle["-webkit-transform"] = origin; + containerStyle.contentVisibility = this.renderConfig.contentVisibility; + this.animationItem.wrapper.appendChild(this.animationItem.container); + this.canvasContext = this.animationItem.container.getContext("2d"); + if (this.renderConfig.className) { + this.animationItem.container.setAttribute("class", this.renderConfig.className); + } + if (this.renderConfig.id) { + this.animationItem.container.setAttribute("id", this.renderConfig.id); + } + } else { + this.canvasContext = this.renderConfig.context; + } + this.data = animData; + this.layers = animData.layers; + this.transformCanvas = { + w: animData.w, + h: animData.h, + sx: 0, + sy: 0, + tx: 0, + ty: 0 + }; + this.setupGlobalData(animData, document.body); + this.globalData.canvasContext = this.canvasContext; + this.globalData.renderer = this; + this.globalData.isDashed = false; + this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; + this.globalData.transformCanvas = this.transformCanvas; + this.elements = createSizedArray(animData.layers.length); + this.updateContainerSize(); + }; + CanvasRendererBase.prototype.updateContainerSize = function() { + this.reset(); + var elementWidth; + var elementHeight; + if (this.animationItem.wrapper && this.animationItem.container) { + elementWidth = this.animationItem.wrapper.offsetWidth; + elementHeight = this.animationItem.wrapper.offsetHeight; + this.animationItem.container.setAttribute("width", elementWidth * this.renderConfig.dpr); + this.animationItem.container.setAttribute("height", elementHeight * this.renderConfig.dpr); + } else { + elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr; + elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr; + } + var elementRel; + var animationRel; + if (this.renderConfig.preserveAspectRatio.indexOf("meet") !== -1 || this.renderConfig.preserveAspectRatio.indexOf("slice") !== -1) { + var par = this.renderConfig.preserveAspectRatio.split(" "); + var fillType = par[1] || "meet"; + var pos = par[0] || "xMidYMid"; + var xPos = pos.substr(0, 4); + var yPos = pos.substr(4); + elementRel = elementWidth / elementHeight; + animationRel = this.transformCanvas.w / this.transformCanvas.h; + if (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice") { + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + } else { + this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + } + if (xPos === "xMid" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) { + this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; + } else if (xPos === "xMax" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) { + this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; + } else { + this.transformCanvas.tx = 0; + } + if (yPos === "YMid" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) { + this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; + } else if (yPos === "YMax" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) { + this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; + } else { + this.transformCanvas.ty = 0; + } + } else if (this.renderConfig.preserveAspectRatio === "none") { + this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); + this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); + this.transformCanvas.tx = 0; + this.transformCanvas.ty = 0; + } else { + this.transformCanvas.sx = this.renderConfig.dpr; + this.transformCanvas.sy = this.renderConfig.dpr; + this.transformCanvas.tx = 0; + this.transformCanvas.ty = 0; + } + 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]; + this.ctxTransform(this.transformCanvas.props); + this.canvasContext.beginPath(); + this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); + this.canvasContext.closePath(); + this.canvasContext.clip(); + this.renderFrame(this.renderedFrame, true); + }; + CanvasRendererBase.prototype.destroy = function() { + if (this.renderConfig.clearCanvas && this.animationItem.wrapper) { + this.animationItem.wrapper.innerText = ""; + } + var i; + var len = this.layers ? this.layers.length : 0; + for (i = len - 1; i >= 0; i -= 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.elements.length = 0; + this.globalData.canvasContext = null; + this.animationItem.container = null; + this.destroyed = true; + }; + CanvasRendererBase.prototype.renderFrame = function(num, forceRender) { + if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) { + return; + } + this.renderedFrame = num; + this.globalData.frameNum = num - this.animationItem._isFirstFrame; + this.globalData.frameId += 1; + this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; + this.globalData.projectInterface.currentFrame = num; + var i; + var len = this.layers.length; + if (!this.completeLayers) { + this.checkLayers(num); + } + for (i = 0; i < len; i += 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].prepareFrame(num - this.layers[i].st); + } + } + if (this.globalData._mdf) { + if (this.renderConfig.clearCanvas === true) { + this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); + } else { + this.save(); + } + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + if (this.renderConfig.clearCanvas !== true) { + this.restore(); + } + } + }; + CanvasRendererBase.prototype.buildItem = function(pos) { + var elements = this.elements; + if (elements[pos] || this.layers[pos].ty === 99) { + return; + } + var element = this.createItem(this.layers[pos], this, this.globalData); + elements[pos] = element; + element.initExpressions(); + }; + CanvasRendererBase.prototype.checkPendingElements = function() { + while (this.pendingElements.length) { + var element = this.pendingElements.pop(); + element.checkParenting(); + } + }; + CanvasRendererBase.prototype.hide = function() { + this.animationItem.container.style.display = "none"; + }; + CanvasRendererBase.prototype.show = function() { + this.animationItem.container.style.display = "block"; + }; + extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement); + CVCompElement.prototype.renderInnerContent = function() { + var ctx = this.canvasContext; + ctx.beginPath(); + ctx.moveTo(0, 0); + ctx.lineTo(this.data.w, 0); + ctx.lineTo(this.data.w, this.data.h); + ctx.lineTo(0, this.data.h); + ctx.lineTo(0, 0); + ctx.clip(); + var i; + var len = this.layers.length; + for (i = len - 1; i >= 0; i -= 1) { + if (this.completeLayers || this.elements[i]) { + this.elements[i].renderFrame(); + } + } + }; + CVCompElement.prototype.destroy = function() { + var i; + var len = this.layers.length; + for (i = len - 1; i >= 0; i -= 1) { + if (this.elements[i]) { + this.elements[i].destroy(); + } + } + this.layers = null; + this.elements = null; + }; + CVCompElement.prototype.createComp = function(data2) { + return new CVCompElement(data2, this.globalData, this); + }; + extendPrototype([CanvasRendererBase], CanvasRenderer); + CanvasRenderer.prototype.createComp = function(data2) { + return new CVCompElement(data2, this.globalData, this); + }; + registerRenderer("canvas", CanvasRenderer); + ShapeModifiers.registerModifier("tm", TrimModifier); + ShapeModifiers.registerModifier("pb", PuckerAndBloatModifier); + ShapeModifiers.registerModifier("rp", RepeaterModifier); + ShapeModifiers.registerModifier("rd", RoundCornersModifier); + const Expressions = function() { + var ob2 = {}; + ob2.initExpressions = initExpressions; + function initExpressions(animation) { + var stackCount = 0; + var registers = []; + function pushExpression() { + stackCount += 1; + } + function popExpression() { + stackCount -= 1; + if (stackCount === 0) { + releaseInstances(); + } + } + function registerExpressionProperty(expression) { + if (registers.indexOf(expression) === -1) { + registers.push(expression); + } + } + function releaseInstances() { + var i; + var len = registers.length; + for (i = 0; i < len; i += 1) { + registers[i].release(); + } + registers.length = 0; + } + animation.renderer.compInterface = CompExpressionInterface(animation.renderer); + animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); + animation.renderer.globalData.pushExpression = pushExpression; + animation.renderer.globalData.popExpression = popExpression; + animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; + } + return ob2; + }(); + ; + propTypes = { + SHAPE: "shape" + }; + const ExpressionManager = function() { + "use strict"; + var ob = {}; + var Math = BMMath; + var window = null; + var document = null; + var XMLHttpRequest = null; + var fetch = null; + var frames = null; + initialize$2(BMMath); + function $bm_isInstanceOfArray(arr) { + return arr.constructor === Array || arr.constructor === Float32Array; + } + function isNumerable(tOfV, v) { + return tOfV === "number" || tOfV === "boolean" || tOfV === "string" || v instanceof Number; + } + function $bm_neg(a2) { + var tOfA = typeof a2; + if (tOfA === "number" || tOfA === "boolean" || a2 instanceof Number) { + return -a2; + } + if ($bm_isInstanceOfArray(a2)) { + var i; + var lenA = a2.length; + var retArr = []; + for (i = 0; i < lenA; i += 1) { + retArr[i] = -a2[i]; + } + return retArr; + } + if (a2.propType) { + return a2.v; + } + return -a2; + } + var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, "easeIn").get; + var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, "easeOut").get; + var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, "easeInOut").get; + function sum(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + if (tOfA === "string" || tOfB === "string") { + return a2 + b3; + } + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 + b3; + } + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + a2 = a2.slice(0); + a2[0] += b3; + return a2; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + b3 = b3.slice(0); + b3[0] = a2 + b3[0]; + return b3; + } + if ($bm_isInstanceOfArray(a2) && $bm_isInstanceOfArray(b3)) { + var i = 0; + var lenA = a2.length; + var lenB = b3.length; + var retArr = []; + while (i < lenA || i < lenB) { + if ((typeof a2[i] === "number" || a2[i] instanceof Number) && (typeof b3[i] === "number" || b3[i] instanceof Number)) { + retArr[i] = a2[i] + b3[i]; + } else { + retArr[i] = b3[i] === void 0 ? a2[i] : a2[i] || b3[i]; + } + i += 1; + } + return retArr; + } + return 0; + } + var add = sum; + function sub(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + if (tOfA === "string") { + a2 = parseInt(a2, 10); + } + if (tOfB === "string") { + b3 = parseInt(b3, 10); + } + return a2 - b3; + } + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + a2 = a2.slice(0); + a2[0] -= b3; + return a2; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + b3 = b3.slice(0); + b3[0] = a2 - b3[0]; + return b3; + } + if ($bm_isInstanceOfArray(a2) && $bm_isInstanceOfArray(b3)) { + var i = 0; + var lenA = a2.length; + var lenB = b3.length; + var retArr = []; + while (i < lenA || i < lenB) { + if ((typeof a2[i] === "number" || a2[i] instanceof Number) && (typeof b3[i] === "number" || b3[i] instanceof Number)) { + retArr[i] = a2[i] - b3[i]; + } else { + retArr[i] = b3[i] === void 0 ? a2[i] : a2[i] || b3[i]; + } + i += 1; + } + return retArr; + } + return 0; + } + function mul(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + var arr; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 * b3; + } + var i; + var len; + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + len = a2.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2[i] * b3; + } + return arr; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + len = b3.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2 * b3[i]; + } + return arr; + } + return 0; + } + function div(a2, b3) { + var tOfA = typeof a2; + var tOfB = typeof b3; + var arr; + if (isNumerable(tOfA, a2) && isNumerable(tOfB, b3)) { + return a2 / b3; + } + var i; + var len; + if ($bm_isInstanceOfArray(a2) && isNumerable(tOfB, b3)) { + len = a2.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2[i] / b3; + } + return arr; + } + if (isNumerable(tOfA, a2) && $bm_isInstanceOfArray(b3)) { + len = b3.length; + arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = a2 / b3[i]; + } + return arr; + } + return 0; + } + function mod(a2, b3) { + if (typeof a2 === "string") { + a2 = parseInt(a2, 10); + } + if (typeof b3 === "string") { + b3 = parseInt(b3, 10); + } + return a2 % b3; + } + var $bm_sum = sum; + var $bm_sub = sub; + var $bm_mul = mul; + var $bm_div = div; + var $bm_mod = mod; + function clamp(num, min, max2) { + if (min > max2) { + var mm = max2; + max2 = min; + min = mm; + } + return Math.min(Math.max(num, min), max2); + } + function radiansToDegrees(val2) { + return val2 / degToRads; + } + var radians_to_degrees = radiansToDegrees; + function degreesToRadians(val2) { + return val2 * degToRads; + } + var degrees_to_radians = radiansToDegrees; + var helperLengthArray = [0, 0, 0, 0, 0, 0]; + function length(arr1, arr2) { + if (typeof arr1 === "number" || arr1 instanceof Number) { + arr2 = arr2 || 0; + return Math.abs(arr1 - arr2); + } + if (!arr2) { + arr2 = helperLengthArray; + } + var i; + var len = Math.min(arr1.length, arr2.length); + var addedLength = 0; + for (i = 0; i < len; i += 1) { + addedLength += Math.pow(arr2[i] - arr1[i], 2); + } + return Math.sqrt(addedLength); + } + function normalize(vec) { + return div(vec, length(vec)); + } + function rgbToHsl(val2) { + var r = val2[0]; + var g2 = val2[1]; + var b3 = val2[2]; + var max2 = Math.max(r, g2, b3); + var min = Math.min(r, g2, b3); + var h; + var s; + var l2 = (max2 + min) / 2; + if (max2 === min) { + h = 0; + s = 0; + } else { + var d = max2 - min; + s = l2 > 0.5 ? d / (2 - max2 - min) : d / (max2 + min); + switch (max2) { + case r: + h = (g2 - b3) / d + (g2 < b3 ? 6 : 0); + break; + case g2: + h = (b3 - r) / d + 2; + break; + case b3: + h = (r - g2) / d + 4; + break; + default: + break; + } + h /= 6; + } + return [h, s, l2, val2[3]]; + } + function hue2rgb(p2, q2, t3) { + if (t3 < 0) t3 += 1; + if (t3 > 1) t3 -= 1; + if (t3 < 1 / 6) return p2 + (q2 - p2) * 6 * t3; + if (t3 < 1 / 2) return q2; + if (t3 < 2 / 3) return p2 + (q2 - p2) * (2 / 3 - t3) * 6; + return p2; + } + function hslToRgb(val2) { + var h = val2[0]; + var s = val2[1]; + var l2 = val2[2]; + var r; + var g2; + var b3; + if (s === 0) { + r = l2; + b3 = l2; + g2 = l2; + } else { + var q2 = l2 < 0.5 ? l2 * (1 + s) : l2 + s - l2 * s; + var p2 = 2 * l2 - q2; + r = hue2rgb(p2, q2, h + 1 / 3); + g2 = hue2rgb(p2, q2, h); + b3 = hue2rgb(p2, q2, h - 1 / 3); + } + return [r, g2, b3, val2[3]]; + } + function linear(t3, tMin, tMax, value1, value2) { + if (value1 === void 0 || value2 === void 0) { + value1 = tMin; + value2 = tMax; + tMin = 0; + tMax = 1; + } + if (tMax < tMin) { + var _tMin = tMax; + tMax = tMin; + tMin = _tMin; + } + if (t3 <= tMin) { + return value1; + } + if (t3 >= tMax) { + return value2; + } + var perc = tMax === tMin ? 0 : (t3 - tMin) / (tMax - tMin); + if (!value1.length) { + return value1 + (value2 - value1) * perc; + } + var i; + var len = value1.length; + var arr = createTypedArray("float32", len); + for (i = 0; i < len; i += 1) { + arr[i] = value1[i] + (value2[i] - value1[i]) * perc; + } + return arr; + } + function random(min, max2) { + if (max2 === void 0) { + if (min === void 0) { + min = 0; + max2 = 1; + } else { + max2 = min; + min = void 0; + } + } + if (max2.length) { + var i; + var len = max2.length; + if (!min) { + min = createTypedArray("float32", len); + } + var arr = createTypedArray("float32", len); + var rnd = BMMath.random(); + for (i = 0; i < len; i += 1) { + arr[i] = min[i] + rnd * (max2[i] - min[i]); + } + return arr; + } + if (min === void 0) { + min = 0; + } + var rndm = BMMath.random(); + return min + rndm * (max2 - min); + } + function createPath(points, inTangents, outTangents, closed) { + var i; + var len = points.length; + var path = shapePool.newElement(); + path.setPathData(!!closed, len); + var arrPlaceholder = [0, 0]; + var inVertexPoint; + var outVertexPoint; + for (i = 0; i < len; i += 1) { + inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; + outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; + 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); + } + return path; + } + function initiateExpression(elem, data, property) { + var val = data.x; + var needsVelocity = /velocity(?![\w\d])/.test(val); + var _needsRandom = val.indexOf("random") !== -1; + var elemType = elem.data.ty; + var transform; + var $bm_transform; + var content; + var effect; + var thisProperty = property; + thisProperty.valueAtTime = thisProperty.getValueAtTime; + Object.defineProperty(thisProperty, "value", { + get: function() { + return thisProperty.v; + } + }); + elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate; + elem.comp.displayStartTime = 0; + var inPoint = elem.data.ip / elem.comp.globalData.frameRate; + var outPoint = elem.data.op / elem.comp.globalData.frameRate; + var width = elem.data.sw ? elem.data.sw : 0; + var height = elem.data.sh ? elem.data.sh : 0; + var name = elem.data.nm; + var loopIn; + var loop_in; + var loopOut; + var loop_out; + var smooth; + var toWorld; + var fromWorld; + var fromComp; + var toComp; + var fromCompToSurface; + var position; + var rotation; + var anchorPoint; + var scale; + var thisLayer; + var thisComp; + var mask; + var valueAtTime; + var velocityAtTime; + var scoped_bm_rt; + var expression_function = eval("[function _expression_function(){" + val + ";scoped_bm_rt=$bm_rt}]")[0]; + var numKeys = property.kf ? data.k.length : 0; + var active = !this.data || this.data.hd !== true; + var wiggle = (function wiggle2(freq, amp) { + var iWiggle; + var j; + var lenWiggle = this.pv.length ? this.pv.length : 1; + var addedAmps = createTypedArray("float32", lenWiggle); + freq = 5; + var iterations = Math.floor(time * freq); + iWiggle = 0; + j = 0; + while (iWiggle < iterations) { + for (j = 0; j < lenWiggle; j += 1) { + addedAmps[j] += -amp + amp * 2 * BMMath.random(); + } + iWiggle += 1; + } + var periods = time * freq; + var perc = periods - Math.floor(periods); + var arr = createTypedArray("float32", lenWiggle); + if (lenWiggle > 1) { + for (j = 0; j < lenWiggle; j += 1) { + arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; + } + return arr; + } + return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc; + }).bind(this); + if (thisProperty.loopIn) { + loopIn = thisProperty.loopIn.bind(thisProperty); + loop_in = loopIn; + } + if (thisProperty.loopOut) { + loopOut = thisProperty.loopOut.bind(thisProperty); + loop_out = loopOut; + } + if (thisProperty.smooth) { + smooth = thisProperty.smooth.bind(thisProperty); + } + function loopInDuration(type, duration) { + return loopIn(type, duration, true); + } + function loopOutDuration(type, duration) { + return loopOut(type, duration, true); + } + if (this.getValueAtTime) { + valueAtTime = this.getValueAtTime.bind(this); + } + if (this.getVelocityAtTime) { + velocityAtTime = this.getVelocityAtTime.bind(this); + } + var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface); + function lookAt(elem1, elem2) { + var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]]; + var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads; + var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads; + return [yaw, pitch, 0]; + } + function easeOut(t3, tMin, tMax, val1, val2) { + return applyEase(easeOutBez, t3, tMin, tMax, val1, val2); + } + function easeIn(t3, tMin, tMax, val1, val2) { + return applyEase(easeInBez, t3, tMin, tMax, val1, val2); + } + function ease(t3, tMin, tMax, val1, val2) { + return applyEase(easeInOutBez, t3, tMin, tMax, val1, val2); + } + function applyEase(fn, t3, tMin, tMax, val1, val2) { + if (val1 === void 0) { + val1 = tMin; + val2 = tMax; + } else { + t3 = (t3 - tMin) / (tMax - tMin); + } + if (t3 > 1) { + t3 = 1; + } else if (t3 < 0) { + t3 = 0; + } + var mult = fn(t3); + if ($bm_isInstanceOfArray(val1)) { + var iKey; + var lenKey = val1.length; + var arr = createTypedArray("float32", lenKey); + for (iKey = 0; iKey < lenKey; iKey += 1) { + arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey]; + } + return arr; + } + return (val2 - val1) * mult + val1; + } + function nearestKey(time2) { + var iKey; + var lenKey = data.k.length; + var index2; + var keyTime; + if (!data.k.length || typeof data.k[0] === "number") { + index2 = 0; + keyTime = 0; + } else { + index2 = -1; + time2 *= elem.comp.globalData.frameRate; + if (time2 < data.k[0].t) { + index2 = 1; + keyTime = data.k[0].t; + } else { + for (iKey = 0; iKey < lenKey - 1; iKey += 1) { + if (time2 === data.k[iKey].t) { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + break; + } else if (time2 > data.k[iKey].t && time2 < data.k[iKey + 1].t) { + if (time2 - data.k[iKey].t > data.k[iKey + 1].t - time2) { + index2 = iKey + 2; + keyTime = data.k[iKey + 1].t; + } else { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + } + break; + } + } + if (index2 === -1) { + index2 = iKey + 1; + keyTime = data.k[iKey].t; + } + } + } + var obKey = {}; + obKey.index = index2; + obKey.time = keyTime / elem.comp.globalData.frameRate; + return obKey; + } + function key(ind) { + var obKey; + var iKey; + var lenKey; + if (!data.k.length || typeof data.k[0] === "number") { + throw new Error("The property has no keyframe at index " + ind); + } + ind -= 1; + obKey = { + time: data.k[ind].t / elem.comp.globalData.frameRate, + value: [] + }; + var arr = Object.prototype.hasOwnProperty.call(data.k[ind], "s") ? data.k[ind].s : data.k[ind - 1].e; + lenKey = arr.length; + for (iKey = 0; iKey < lenKey; iKey += 1) { + obKey[iKey] = arr[iKey]; + obKey.value[iKey] = arr[iKey]; + } + return obKey; + } + function framesToTime(fr, fps) { + if (!fps) { + fps = elem.comp.globalData.frameRate; + } + return fr / fps; + } + function timeToFrames(t3, fps) { + if (!t3 && t3 !== 0) { + t3 = time; + } + if (!fps) { + fps = elem.comp.globalData.frameRate; + } + return t3 * fps; + } + function seedRandom(seed) { + BMMath.seedrandom(randSeed + seed); + } + function sourceRectAtTime() { + return elem.sourceRectAtTime(); + } + function substring(init, end) { + if (typeof value === "string") { + if (end === void 0) { + return value.substring(init); + } + return value.substring(init, end); + } + return ""; + } + function substr(init, end) { + if (typeof value === "string") { + if (end === void 0) { + return value.substr(init); + } + return value.substr(init, end); + } + return ""; + } + function posterizeTime(framesPerSecond) { + time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond; + value = valueAtTime(time); + } + var time; + var velocity; + var value; + var text; + var textIndex; + var textTotal; + var selectorValue; + var index = elem.data.ind; + var hasParent = !!(elem.hierarchy && elem.hierarchy.length); + var parent; + var randSeed = Math.floor(Math.random() * 1e6); + var globalData = elem.globalData; + function executeExpression(_value) { + value = _value; + if (this.frameExpressionId === elem.globalData.frameId && this.propType !== "textSelector") { + return value; + } + if (this.propType === "textSelector") { + textIndex = this.textIndex; + textTotal = this.textTotal; + selectorValue = this.selectorValue; + } + if (!thisLayer) { + text = elem.layerInterface.text; + thisLayer = elem.layerInterface; + thisComp = elem.comp.compInterface; + toWorld = thisLayer.toWorld.bind(thisLayer); + fromWorld = thisLayer.fromWorld.bind(thisLayer); + fromComp = thisLayer.fromComp.bind(thisLayer); + toComp = thisLayer.toComp.bind(thisLayer); + mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null; + fromCompToSurface = fromComp; + } + if (!transform) { + transform = elem.layerInterface("ADBE Transform Group"); + $bm_transform = transform; + if (transform) { + anchorPoint = transform.anchorPoint; + } + } + if (elemType === 4 && !content) { + content = thisLayer("ADBE Root Vectors Group"); + } + if (!effect) { + effect = thisLayer(4); + } + hasParent = !!(elem.hierarchy && elem.hierarchy.length); + if (hasParent && !parent) { + parent = elem.hierarchy[0].layerInterface; + } + time = this.comp.renderedFrame / this.comp.globalData.frameRate; + if (_needsRandom) { + seedRandom(randSeed + time); + } + if (needsVelocity) { + velocity = velocityAtTime(time); + } + expression_function(); + this.frameExpressionId = elem.globalData.frameId; + scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt; + return scoped_bm_rt; + } + 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]; + return executeExpression; + } + ob.initiateExpression = initiateExpression; + 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]; + return ob; + }(); + const expressionHelpers = /* @__PURE__ */ function() { + function searchExpressions(elem2, data2, prop) { + if (data2.x) { + prop.k = true; + prop.x = true; + prop.initiateExpression = ExpressionManager.initiateExpression; + prop.effectsSequence.push(prop.initiateExpression(elem2, data2, prop).bind(prop)); + } + } + function getValueAtTime(frameNum) { + frameNum *= this.elem.globalData.frameRate; + frameNum -= this.offsetTime; + if (frameNum !== this._cachingAtTime.lastFrame) { + this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; + this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); + this._cachingAtTime.lastFrame = frameNum; + } + return this._cachingAtTime.value; + } + function getSpeedAtTime(frameNum) { + var delta = -0.01; + var v12 = this.getValueAtTime(frameNum); + var v2 = this.getValueAtTime(frameNum + delta); + var speed = 0; + if (v12.length) { + var i; + for (i = 0; i < v12.length; i += 1) { + speed += Math.pow(v2[i] - v12[i], 2); + } + speed = Math.sqrt(speed) * 100; + } else { + speed = 0; + } + return speed; + } + function getVelocityAtTime(frameNum) { + if (this.vel !== void 0) { + return this.vel; + } + var delta = -1e-3; + var v12 = this.getValueAtTime(frameNum); + var v2 = this.getValueAtTime(frameNum + delta); + var velocity2; + if (v12.length) { + velocity2 = createTypedArray("float32", v12.length); + var i; + for (i = 0; i < v12.length; i += 1) { + velocity2[i] = (v2[i] - v12[i]) / delta; + } + } else { + velocity2 = (v2 - v12) / delta; + } + return velocity2; + } + function getStaticValueAtTime() { + return this.pv; + } + function setGroupProperty(propertyGroup) { + this.propertyGroup = propertyGroup; + } + return { + searchExpressions, + getSpeedAtTime, + getVelocityAtTime, + getValueAtTime, + getStaticValueAtTime, + setGroupProperty + }; + }(); + setExpressionsPlugin(Expressions); + initialize$1(); + initialize(); +} +var standalone; +var animationData; +var renderer; +var queryString; +var scripts; +var index2; +var myScript; +var readyStateCheckInterval; +var registeredEffects; +var idPrefix; +var emptyShapeData; +var propTypes; + +// node_modules/three/examples/jsm/loaders/LottieLoader.js +var LottieLoader = class extends Loader { + setQuality(value2) { + this._quality = value2; + } + load(url, onLoad, onProgress, onError) { + const quality = this._quality || 1; + const texture = new CanvasTexture(); + texture.minFilter = NearestFilter; + texture.colorSpace = SRGBColorSpace; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + const data2 = JSON.parse(text2); + const container = document.createElement("div"); + container.style.width = data2.w + "px"; + container.style.height = data2.h + "px"; + document.body.appendChild(container); + const animation = lottie.loadAnimation({ + container, + animType: "canvas", + loop: true, + autoplay: true, + animationData: data2, + rendererSettings: { dpr: quality } + }); + texture.animation = animation; + texture.image = animation.container; + animation.addEventListener("enterFrame", function() { + texture.needsUpdate = true; + }); + container.style.display = "none"; + if (onLoad !== void 0) { + onLoad(texture); + } + }, onProgress, onError); + return texture; + } +}; + +// node_modules/three/examples/jsm/loaders/MD2Loader.js +var _normalData = [ + [-0.525731, 0, 0.850651], + [-0.442863, 0.238856, 0.864188], + [-0.295242, 0, 0.955423], + [-0.309017, 0.5, 0.809017], + [-0.16246, 0.262866, 0.951056], + [0, 0, 1], + [0, 0.850651, 0.525731], + [-0.147621, 0.716567, 0.681718], + [0.147621, 0.716567, 0.681718], + [0, 0.525731, 0.850651], + [0.309017, 0.5, 0.809017], + [0.525731, 0, 0.850651], + [0.295242, 0, 0.955423], + [0.442863, 0.238856, 0.864188], + [0.16246, 0.262866, 0.951056], + [-0.681718, 0.147621, 0.716567], + [-0.809017, 0.309017, 0.5], + [-0.587785, 0.425325, 0.688191], + [-0.850651, 0.525731, 0], + [-0.864188, 0.442863, 0.238856], + [-0.716567, 0.681718, 0.147621], + [-0.688191, 0.587785, 0.425325], + [-0.5, 0.809017, 0.309017], + [-0.238856, 0.864188, 0.442863], + [-0.425325, 0.688191, 0.587785], + [-0.716567, 0.681718, -0.147621], + [-0.5, 0.809017, -0.309017], + [-0.525731, 0.850651, 0], + [0, 0.850651, -0.525731], + [-0.238856, 0.864188, -0.442863], + [0, 0.955423, -0.295242], + [-0.262866, 0.951056, -0.16246], + [0, 1, 0], + [0, 0.955423, 0.295242], + [-0.262866, 0.951056, 0.16246], + [0.238856, 0.864188, 0.442863], + [0.262866, 0.951056, 0.16246], + [0.5, 0.809017, 0.309017], + [0.238856, 0.864188, -0.442863], + [0.262866, 0.951056, -0.16246], + [0.5, 0.809017, -0.309017], + [0.850651, 0.525731, 0], + [0.716567, 0.681718, 0.147621], + [0.716567, 0.681718, -0.147621], + [0.525731, 0.850651, 0], + [0.425325, 0.688191, 0.587785], + [0.864188, 0.442863, 0.238856], + [0.688191, 0.587785, 0.425325], + [0.809017, 0.309017, 0.5], + [0.681718, 0.147621, 0.716567], + [0.587785, 0.425325, 0.688191], + [0.955423, 0.295242, 0], + [1, 0, 0], + [0.951056, 0.16246, 0.262866], + [0.850651, -0.525731, 0], + [0.955423, -0.295242, 0], + [0.864188, -0.442863, 0.238856], + [0.951056, -0.16246, 0.262866], + [0.809017, -0.309017, 0.5], + [0.681718, -0.147621, 0.716567], + [0.850651, 0, 0.525731], + [0.864188, 0.442863, -0.238856], + [0.809017, 0.309017, -0.5], + [0.951056, 0.16246, -0.262866], + [0.525731, 0, -0.850651], + [0.681718, 0.147621, -0.716567], + [0.681718, -0.147621, -0.716567], + [0.850651, 0, -0.525731], + [0.809017, -0.309017, -0.5], + [0.864188, -0.442863, -0.238856], + [0.951056, -0.16246, -0.262866], + [0.147621, 0.716567, -0.681718], + [0.309017, 0.5, -0.809017], + [0.425325, 0.688191, -0.587785], + [0.442863, 0.238856, -0.864188], + [0.587785, 0.425325, -0.688191], + [0.688191, 0.587785, -0.425325], + [-0.147621, 0.716567, -0.681718], + [-0.309017, 0.5, -0.809017], + [0, 0.525731, -0.850651], + [-0.525731, 0, -0.850651], + [-0.442863, 0.238856, -0.864188], + [-0.295242, 0, -0.955423], + [-0.16246, 0.262866, -0.951056], + [0, 0, -1], + [0.295242, 0, -0.955423], + [0.16246, 0.262866, -0.951056], + [-0.442863, -0.238856, -0.864188], + [-0.309017, -0.5, -0.809017], + [-0.16246, -0.262866, -0.951056], + [0, -0.850651, -0.525731], + [-0.147621, -0.716567, -0.681718], + [0.147621, -0.716567, -0.681718], + [0, -0.525731, -0.850651], + [0.309017, -0.5, -0.809017], + [0.442863, -0.238856, -0.864188], + [0.16246, -0.262866, -0.951056], + [0.238856, -0.864188, -0.442863], + [0.5, -0.809017, -0.309017], + [0.425325, -0.688191, -0.587785], + [0.716567, -0.681718, -0.147621], + [0.688191, -0.587785, -0.425325], + [0.587785, -0.425325, -0.688191], + [0, -0.955423, -0.295242], + [0, -1, 0], + [0.262866, -0.951056, -0.16246], + [0, -0.850651, 0.525731], + [0, -0.955423, 0.295242], + [0.238856, -0.864188, 0.442863], + [0.262866, -0.951056, 0.16246], + [0.5, -0.809017, 0.309017], + [0.716567, -0.681718, 0.147621], + [0.525731, -0.850651, 0], + [-0.238856, -0.864188, -0.442863], + [-0.5, -0.809017, -0.309017], + [-0.262866, -0.951056, -0.16246], + [-0.850651, -0.525731, 0], + [-0.716567, -0.681718, -0.147621], + [-0.716567, -0.681718, 0.147621], + [-0.525731, -0.850651, 0], + [-0.5, -0.809017, 0.309017], + [-0.238856, -0.864188, 0.442863], + [-0.262866, -0.951056, 0.16246], + [-0.864188, -0.442863, 0.238856], + [-0.809017, -0.309017, 0.5], + [-0.688191, -0.587785, 0.425325], + [-0.681718, -0.147621, 0.716567], + [-0.442863, -0.238856, 0.864188], + [-0.587785, -0.425325, 0.688191], + [-0.309017, -0.5, 0.809017], + [-0.147621, -0.716567, 0.681718], + [-0.425325, -0.688191, 0.587785], + [-0.16246, -0.262866, 0.951056], + [0.442863, -0.238856, 0.864188], + [0.16246, -0.262866, 0.951056], + [0.309017, -0.5, 0.809017], + [0.147621, -0.716567, 0.681718], + [0, -0.525731, 0.850651], + [0.425325, -0.688191, 0.587785], + [0.587785, -0.425325, 0.688191], + [0.688191, -0.587785, 0.425325], + [-0.955423, 0.295242, 0], + [-0.951056, 0.16246, 0.262866], + [-1, 0, 0], + [-0.850651, 0, 0.525731], + [-0.955423, -0.295242, 0], + [-0.951056, -0.16246, 0.262866], + [-0.864188, 0.442863, -0.238856], + [-0.951056, 0.16246, -0.262866], + [-0.809017, 0.309017, -0.5], + [-0.864188, -0.442863, -0.238856], + [-0.951056, -0.16246, -0.262866], + [-0.809017, -0.309017, -0.5], + [-0.681718, 0.147621, -0.716567], + [-0.681718, -0.147621, -0.716567], + [-0.850651, 0, -0.525731], + [-0.688191, 0.587785, -0.425325], + [-0.587785, 0.425325, -0.688191], + [-0.425325, 0.688191, -0.587785], + [-0.425325, -0.688191, -0.587785], + [-0.587785, -0.425325, -0.688191], + [-0.688191, -0.587785, -0.425325] +]; +var MD2Loader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const data2 = new DataView(buffer); + const header = {}; + const headerNames = [ + "ident", + "version", + "skinwidth", + "skinheight", + "framesize", + "num_skins", + "num_vertices", + "num_st", + "num_tris", + "num_glcmds", + "num_frames", + "offset_skins", + "offset_st", + "offset_tris", + "offset_frames", + "offset_glcmds", + "offset_end" + ]; + for (let i = 0; i < headerNames.length; i++) { + header[headerNames[i]] = data2.getInt32(i * 4, true); + } + if (header.ident !== 844121161 || header.version !== 8) { + console.error("Not a valid MD2 file"); + return; + } + if (header.offset_end !== data2.byteLength) { + console.error("Corrupted MD2 file"); + return; + } + const geometry = new BufferGeometry(); + const uvsTemp = []; + let offset = header.offset_st; + for (let i = 0, l2 = header.num_st; i < l2; i++) { + const u = data2.getInt16(offset + 0, true); + const v = data2.getInt16(offset + 2, true); + uvsTemp.push(u / header.skinwidth, 1 - v / header.skinheight); + offset += 4; + } + offset = header.offset_tris; + const vertexIndices = []; + const uvIndices = []; + for (let i = 0, l2 = header.num_tris; i < l2; i++) { + vertexIndices.push( + data2.getUint16(offset + 0, true), + data2.getUint16(offset + 2, true), + data2.getUint16(offset + 4, true) + ); + uvIndices.push( + data2.getUint16(offset + 6, true), + data2.getUint16(offset + 8, true), + data2.getUint16(offset + 10, true) + ); + offset += 12; + } + const translation = new Vector3(); + const scale2 = new Vector3(); + const frames2 = []; + offset = header.offset_frames; + for (let i = 0, l2 = header.num_frames; i < l2; i++) { + scale2.set( + data2.getFloat32(offset + 0, true), + data2.getFloat32(offset + 4, true), + data2.getFloat32(offset + 8, true) + ); + translation.set( + data2.getFloat32(offset + 12, true), + data2.getFloat32(offset + 16, true), + data2.getFloat32(offset + 20, true) + ); + offset += 24; + const string = []; + for (let j = 0; j < 16; j++) { + const character = data2.getUint8(offset + j); + if (character === 0) break; + string[j] = character; + } + const frame = { + name: String.fromCharCode.apply(null, string), + vertices: [], + normals: [] + }; + offset += 16; + for (let j = 0; j < header.num_vertices; j++) { + let x2 = data2.getUint8(offset++); + let y2 = data2.getUint8(offset++); + let z = data2.getUint8(offset++); + const n2 = _normalData[data2.getUint8(offset++)]; + x2 = x2 * scale2.x + translation.x; + y2 = y2 * scale2.y + translation.y; + z = z * scale2.z + translation.z; + frame.vertices.push(x2, z, y2); + frame.normals.push(n2[0], n2[2], n2[1]); + } + frames2.push(frame); + } + const positions = []; + const normals = []; + const uvs = []; + const verticesTemp = frames2[0].vertices; + const normalsTemp = frames2[0].normals; + for (let i = 0, l2 = vertexIndices.length; i < l2; i++) { + const vertexIndex = vertexIndices[i]; + let stride = vertexIndex * 3; + const x2 = verticesTemp[stride]; + const y2 = verticesTemp[stride + 1]; + const z = verticesTemp[stride + 2]; + positions.push(x2, y2, z); + const nx = normalsTemp[stride]; + const ny = normalsTemp[stride + 1]; + const nz = normalsTemp[stride + 2]; + normals.push(nx, ny, nz); + const uvIndex = uvIndices[i]; + stride = uvIndex * 2; + const u = uvsTemp[stride]; + const v = uvsTemp[stride + 1]; + uvs.push(u, v); + } + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + const morphPositions = []; + const morphNormals = []; + for (let i = 0, l2 = frames2.length; i < l2; i++) { + const frame = frames2[i]; + const attributeName = frame.name; + if (frame.vertices.length > 0) { + const positions2 = []; + for (let j = 0, jl = vertexIndices.length; j < jl; j++) { + const vertexIndex = vertexIndices[j]; + const stride = vertexIndex * 3; + const x2 = frame.vertices[stride]; + const y2 = frame.vertices[stride + 1]; + const z = frame.vertices[stride + 2]; + positions2.push(x2, y2, z); + } + const positionAttribute = new Float32BufferAttribute(positions2, 3); + positionAttribute.name = attributeName; + morphPositions.push(positionAttribute); + } + if (frame.normals.length > 0) { + const normals2 = []; + for (let j = 0, jl = vertexIndices.length; j < jl; j++) { + const vertexIndex = vertexIndices[j]; + const stride = vertexIndex * 3; + const nx = frame.normals[stride]; + const ny = frame.normals[stride + 1]; + const nz = frame.normals[stride + 2]; + normals2.push(nx, ny, nz); + } + const normalAttribute = new Float32BufferAttribute(normals2, 3); + normalAttribute.name = attributeName; + morphNormals.push(normalAttribute); + } + } + geometry.morphAttributes.position = morphPositions; + geometry.morphAttributes.normal = morphNormals; + geometry.morphTargetsRelative = false; + geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences(frames2, 10); + return geometry; + } +}; + +// node_modules/three/examples/jsm/loaders/MDDLoader.js +var MDDLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.load(url, function(data2) { + onLoad(scope.parse(data2)); + }, onProgress, onError); + } + parse(data2) { + const view = new DataView(data2); + const totalFrames = view.getUint32(0); + const totalPoints = view.getUint32(4); + let offset = 8; + const times = new Float32Array(totalFrames); + const values2 = new Float32Array(totalFrames * totalFrames).fill(0); + for (let i = 0; i < totalFrames; i++) { + times[i] = view.getFloat32(offset); + offset += 4; + values2[totalFrames * i + i] = 1; + } + const track = new NumberKeyframeTrack(".morphTargetInfluences", times, values2); + const clip = new AnimationClip("default", times[times.length - 1], [track]); + const morphTargets = []; + for (let i = 0; i < totalFrames; i++) { + const morphTarget = new Float32Array(totalPoints * 3); + for (let j = 0; j < totalPoints; j++) { + const stride = j * 3; + morphTarget[stride + 0] = view.getFloat32(offset); + offset += 4; + morphTarget[stride + 1] = view.getFloat32(offset); + offset += 4; + morphTarget[stride + 2] = view.getFloat32(offset); + offset += 4; + } + const attribute = new BufferAttribute(morphTarget, 3); + attribute.name = "morph_" + i; + morphTargets.push(attribute); + } + return { + morphTargets, + clip + }; + } +}; + +// node_modules/three/examples/jsm/shaders/MMDToonShader.js +var lights_mmd_toon_pars_fragment = ( + /* glsl */ + ` +varying vec3 vViewPosition; + +struct BlinnPhongMaterial { + + vec3 diffuseColor; + vec3 specularColor; + float specularShininess; + float specularStrength; + +}; + +void 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 ) { + + vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; + + reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + + reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; + +} + +void 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 ) { + + reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); + +} + +#define RE_Direct RE_Direct_BlinnPhong +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong +` +); +var mmd_toon_matcap_fragment = ( + /* glsl */ + ` +#ifdef USE_MATCAP + + vec3 viewDir = normalize( vViewPosition ); + vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); + vec3 y = cross( viewDir, x ); + vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks + vec4 matcapColor = texture2D( matcap, uv ); + + #ifdef MATCAP_BLENDING_MULTIPLY + + outgoingLight *= matcapColor.rgb; + + #elif defined( MATCAP_BLENDING_ADD ) + + outgoingLight += matcapColor.rgb; + + #endif + +#endif +` +); +var MMDToonShader = { + name: "MMDToonShader", + defines: { + TOON: true, + MATCAP: true, + MATCAP_BLENDING_ADD: true + }, + uniforms: UniformsUtils.merge([ + ShaderLib.toon.uniforms, + ShaderLib.phong.uniforms, + ShaderLib.matcap.uniforms + ]), + vertexShader: ShaderLib.phong.vertexShader.replace( + "#include ", + "" + ).replace( + "#include ", + "" + ), + fragmentShader: ShaderLib.phong.fragmentShader.replace( + "#include ", + ` + #ifdef USE_MATCAP + uniform sampler2D matcap; + #endif + + #include + ` + ).replace( + "#include ", + ` + #include + ` + ).replace( + "#include ", + "" + ).replace( + "#include ", + lights_mmd_toon_pars_fragment + ).replace( + "#include ", + ` + ${mmd_toon_matcap_fragment} + ` + ) +}; + +// node_modules/three/examples/jsm/loaders/MMDLoader.js +var MMDLoader = class extends Loader { + constructor(manager) { + super(manager); + this.loader = new FileLoader(this.manager); + this.parser = null; + this.meshBuilder = new MeshBuilder(this.manager); + this.animationBuilder = new AnimationBuilder(); + } + /** + * @param {string} animationPath + * @return {MMDLoader} + */ + setAnimationPath(animationPath) { + this.animationPath = animationPath; + return this; + } + // Load MMD assets as Three.js Object + /** + * Loads Model file (.pmd or .pmx) as a SkinnedMesh. + * + * @param {string} url - url to Model(.pmd or .pmx) file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + load(url, onLoad, onProgress, onError) { + const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin); + let resourcePath; + if (this.resourcePath !== "") { + resourcePath = this.resourcePath; + } else if (this.path !== "") { + resourcePath = this.path; + } else { + resourcePath = LoaderUtils.extractUrlBase(url); + } + const parser = this._getParser(); + const extractModelExtension = this._extractModelExtension; + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + const modelExtension = extractModelExtension(buffer); + if (modelExtension !== "pmd" && modelExtension !== "pmx") { + if (onError) onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + ".")); + return; + } + const data2 = modelExtension === "pmd" ? parser.parsePmd(buffer, true) : parser.parsePmx(buffer, true); + onLoad(builder.build(data2, resourcePath, onProgress, onError)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads Motion file(s) (.vmd) as a AnimationClip. + * If two or more files are specified, they'll be merged. + * + * @param {string|Array} url - url(s) to animation(.vmd) file(s) + * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadAnimation(url, object, onLoad, onProgress, onError) { + const builder = this.animationBuilder; + this.loadVMD(url, function(vmd) { + onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object)); + }, onProgress, onError); + } + /** + * Loads mode file and motion file(s) as an object containing + * a SkinnedMesh and a AnimationClip. + * Tracks of AnimationClip are fitting to the model. + * + * @param {string} modelUrl - url to Model(.pmd or .pmx) file + * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) { + const scope = this; + this.load(modelUrl, function(mesh) { + scope.loadAnimation(vmdUrl, mesh, function(animation) { + onLoad({ + mesh, + animation + }); + }, onProgress, onError); + }, onProgress, onError); + } + // Load MMD assets as Object data parsed by MMDParser + /** + * Loads .pmd file as an Object. + * + * @param {string} url - url to .pmd file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadPMD(url, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + onLoad(parser.parsePmd(buffer, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads .pmx file as an Object. + * + * @param {string} url - url to .pmx file + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadPMX(url, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { + try { + onLoad(parser.parsePmx(buffer, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + /** + * Loads .vmd file as an Object. If two or more files are specified + * they'll be merged. + * + * @param {string|Array} url - url(s) to .vmd file(s) + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadVMD(url, onLoad, onProgress, onError) { + const urls = Array.isArray(url) ? url : [url]; + const vmds = []; + const vmdNum = urls.length; + const parser = this._getParser(); + this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials); + for (let i = 0, il = urls.length; i < il; i++) { + this.loader.load(urls[i], function(buffer) { + try { + vmds.push(parser.parseVmd(buffer, true)); + if (vmds.length === vmdNum) onLoad(parser.mergeVmds(vmds)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + } + /** + * Loads .vpd file as an Object. + * + * @param {string} url - url to .vpd file + * @param {boolean} isUnicode + * @param {function} onLoad + * @param {function} onProgress + * @param {function} onError + */ + loadVPD(url, isUnicode, onLoad, onProgress, onError) { + const parser = this._getParser(); + this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(text2) { + try { + onLoad(parser.parseVpd(text2, true)); + } catch (e) { + if (onError) onError(e); + } + }, onProgress, onError); + } + // private methods + _extractModelExtension(buffer) { + const decoder = new TextDecoder("utf-8"); + const bytes = new Uint8Array(buffer, 0, 3); + return decoder.decode(bytes).toLowerCase(); + } + _getParser() { + if (this.parser === null) { + this.parser = new MMDParser.Parser(); + } + return this.parser; + } +}; +var DEFAULT_TOON_TEXTURES = [ + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=", + "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=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=" +]; +var NON_ALPHA_CHANNEL_FORMATS = [ + RGB_S3TC_DXT1_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_PVRTC_2BPPV1_Format, + RGB_ETC1_Format, + RGB_ETC2_Format +]; +var MeshBuilder = class { + constructor(manager) { + this.crossOrigin = "anonymous"; + this.geometryBuilder = new GeometryBuilder(); + this.materialBuilder = new MaterialBuilder(manager); + } + /** + * @param {string} crossOrigin + * @return {MeshBuilder} + */ + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + /** + * @param {Object} data - parsed PMD/PMX data + * @param {string} resourcePath + * @param {function} onProgress + * @param {function} onError + * @return {SkinnedMesh} + */ + build(data2, resourcePath, onProgress, onError) { + const geometry = this.geometryBuilder.build(data2); + const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data2, geometry, onProgress, onError); + const mesh = new SkinnedMesh(geometry, material); + const skeleton = new Skeleton(initBones(mesh)); + mesh.bind(skeleton); + return mesh; + } +}; +function initBones(mesh) { + const geometry = mesh.geometry; + const bones = []; + if (geometry && geometry.bones !== void 0) { + for (let i = 0, il = geometry.bones.length; i < il; i++) { + const gbone = geometry.bones[i]; + const bone = new Bone(); + bones.push(bone); + bone.name = gbone.name; + bone.position.fromArray(gbone.pos); + bone.quaternion.fromArray(gbone.rotq); + if (gbone.scl !== void 0) bone.scale.fromArray(gbone.scl); + } + for (let i = 0, il = geometry.bones.length; i < il; i++) { + const gbone = geometry.bones[i]; + if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) { + bones[gbone.parent].add(bones[i]); + } else { + mesh.add(bones[i]); + } + } + } + mesh.updateMatrixWorld(true); + return bones; +} +var GeometryBuilder = class { + /** + * @param {Object} data - parsed PMD/PMX data + * @return {BufferGeometry} + */ + build(data2) { + const positions = []; + const uvs = []; + const normals = []; + const indices = []; + const groups = []; + const bones = []; + const skinIndices = []; + const skinWeights = []; + const morphTargets = []; + const morphPositions = []; + const iks = []; + const grants = []; + const rigidBodies = []; + const constraints = []; + let offset = 0; + const boneTypeTable = {}; + for (let i = 0; i < data2.metadata.vertexCount; i++) { + const v = data2.vertices[i]; + for (let j = 0, jl = v.position.length; j < jl; j++) { + positions.push(v.position[j]); + } + for (let j = 0, jl = v.normal.length; j < jl; j++) { + normals.push(v.normal[j]); + } + for (let j = 0, jl = v.uv.length; j < jl; j++) { + uvs.push(v.uv[j]); + } + for (let j = 0; j < 4; j++) { + skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0); + } + for (let j = 0; j < 4; j++) { + skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0); + } + } + for (let i = 0; i < data2.metadata.faceCount; i++) { + const face = data2.faces[i]; + for (let j = 0, jl = face.indices.length; j < jl; j++) { + indices.push(face.indices[j]); + } + } + for (let i = 0; i < data2.metadata.materialCount; i++) { + const material = data2.materials[i]; + groups.push({ + offset: offset * 3, + count: material.faceCount * 3 + }); + offset += material.faceCount; + } + for (let i = 0; i < data2.metadata.rigidBodyCount; i++) { + const body = data2.rigidBodies[i]; + let value2 = boneTypeTable[body.boneIndex]; + value2 = value2 === void 0 ? body.type : Math.max(body.type, value2); + boneTypeTable[body.boneIndex] = value2; + } + for (let i = 0; i < data2.metadata.boneCount; i++) { + const boneData = data2.bones[i]; + const bone = { + index: i, + transformationClass: boneData.transformationClass, + parent: boneData.parentIndex, + name: boneData.name, + pos: boneData.position.slice(0, 3), + rotq: [0, 0, 0, 1], + scl: [1, 1, 1], + rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1 + }; + if (bone.parent !== -1) { + bone.pos[0] -= data2.bones[bone.parent].position[0]; + bone.pos[1] -= data2.bones[bone.parent].position[1]; + bone.pos[2] -= data2.bones[bone.parent].position[2]; + } + bones.push(bone); + } + if (data2.metadata.format === "pmd") { + for (let i = 0; i < data2.metadata.ikCount; i++) { + const ik = data2.iks[i]; + const param = { + target: ik.target, + effector: ik.effector, + iteration: ik.iteration, + maxAngle: ik.maxAngle * 4, + links: [] + }; + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = {}; + link.index = ik.links[j].index; + link.enabled = true; + if (data2.bones[link.index].name.indexOf("ひざ") >= 0) { + link.limitation = new Vector3(1, 0, 0); + } + param.links.push(link); + } + iks.push(param); + } + } else { + for (let i = 0; i < data2.metadata.boneCount; i++) { + const ik = data2.bones[i].ik; + if (ik === void 0) continue; + const param = { + target: i, + effector: ik.effector, + iteration: ik.iteration, + maxAngle: ik.maxAngle, + links: [] + }; + for (let j = 0, jl = ik.links.length; j < jl; j++) { + const link = {}; + link.index = ik.links[j].index; + link.enabled = true; + if (ik.links[j].angleLimitation === 1) { + const rotationMin = ik.links[j].lowerLimitationAngle; + const rotationMax = ik.links[j].upperLimitationAngle; + const tmp1 = -rotationMax[0]; + const tmp2 = -rotationMax[1]; + rotationMax[0] = -rotationMin[0]; + rotationMax[1] = -rotationMin[1]; + rotationMin[0] = tmp1; + rotationMin[1] = tmp2; + link.rotationMin = new Vector3().fromArray(rotationMin); + link.rotationMax = new Vector3().fromArray(rotationMax); + } + param.links.push(link); + } + iks.push(param); + bones[i].ik = param; + } + } + if (data2.metadata.format === "pmx") { + let traverse = function(entry) { + if (entry.param) { + grants.push(entry.param); + bones[entry.param.index].grant = entry.param; + } + entry.visited = true; + for (let i = 0, il = entry.children.length; i < il; i++) { + const child = entry.children[i]; + if (!child.visited) traverse(child); + } + }; + const grantEntryMap = {}; + for (let i = 0; i < data2.metadata.boneCount; i++) { + const boneData = data2.bones[i]; + const grant = boneData.grant; + if (grant === void 0) continue; + const param = { + index: i, + parentIndex: grant.parentIndex, + ratio: grant.ratio, + isLocal: grant.isLocal, + affectRotation: grant.affectRotation, + affectPosition: grant.affectPosition, + transformationClass: boneData.transformationClass + }; + grantEntryMap[i] = { parent: null, children: [], param, visited: false }; + } + const rootEntry = { parent: null, children: [], param: null, visited: false }; + for (const boneIndex in grantEntryMap) { + const grantEntry = grantEntryMap[boneIndex]; + const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry; + grantEntry.parent = parentGrantEntry; + parentGrantEntry.children.push(grantEntry); + } + traverse(rootEntry); + } + function updateAttributes(attribute, morph, ratio) { + for (let i = 0; i < morph.elementCount; i++) { + const element = morph.elements[i]; + let index2; + if (data2.metadata.format === "pmd") { + index2 = data2.morphs[0].elements[element.index].index; + } else { + index2 = element.index; + } + attribute.array[index2 * 3 + 0] += element.position[0] * ratio; + attribute.array[index2 * 3 + 1] += element.position[1] * ratio; + attribute.array[index2 * 3 + 2] += element.position[2] * ratio; + } + } + for (let i = 0; i < data2.metadata.morphCount; i++) { + const morph = data2.morphs[i]; + const params = { name: morph.name }; + const attribute = new Float32BufferAttribute(data2.metadata.vertexCount * 3, 3); + attribute.name = morph.name; + for (let j = 0; j < data2.metadata.vertexCount * 3; j++) { + attribute.array[j] = positions[j]; + } + if (data2.metadata.format === "pmd") { + if (i !== 0) { + updateAttributes(attribute, morph, 1); + } + } else { + if (morph.type === 0) { + for (let j = 0; j < morph.elementCount; j++) { + const morph2 = data2.morphs[morph.elements[j].index]; + const ratio = morph.elements[j].ratio; + if (morph2.type === 1) { + updateAttributes(attribute, morph2, ratio); + } else { + } + } + } else if (morph.type === 1) { + updateAttributes(attribute, morph, 1); + } else if (morph.type === 2) { + } else if (morph.type === 3) { + } else if (morph.type === 4) { + } else if (morph.type === 5) { + } else if (morph.type === 6) { + } else if (morph.type === 7) { + } else if (morph.type === 8) { + } + } + morphTargets.push(params); + morphPositions.push(attribute); + } + for (let i = 0; i < data2.metadata.rigidBodyCount; i++) { + const rigidBody = data2.rigidBodies[i]; + const params = {}; + for (const key2 in rigidBody) { + params[key2] = rigidBody[key2]; + } + if (data2.metadata.format === "pmx") { + if (params.boneIndex !== -1) { + const bone = data2.bones[params.boneIndex]; + params.position[0] -= bone.position[0]; + params.position[1] -= bone.position[1]; + params.position[2] -= bone.position[2]; + } + } + rigidBodies.push(params); + } + for (let i = 0; i < data2.metadata.constraintCount; i++) { + const constraint = data2.constraints[i]; + const params = {}; + for (const key2 in constraint) { + params[key2] = constraint[key2]; + } + const bodyA = rigidBodies[params.rigidBodyIndex1]; + const bodyB = rigidBodies[params.rigidBodyIndex2]; + if (bodyA.type !== 0 && bodyB.type === 2) { + if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data2.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) { + bodyB.type = 1; + } + } + constraints.push(params); + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + geometry.setAttribute("skinIndex", new Uint16BufferAttribute(skinIndices, 4)); + geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeights, 4)); + geometry.setIndex(indices); + for (let i = 0, il = groups.length; i < il; i++) { + geometry.addGroup(groups[i].offset, groups[i].count, i); + } + geometry.bones = bones; + geometry.morphTargets = morphTargets; + geometry.morphAttributes.position = morphPositions; + geometry.morphTargetsRelative = false; + geometry.userData.MMD = { + bones, + iks, + grants, + rigidBodies, + constraints, + format: data2.metadata.format + }; + geometry.computeBoundingSphere(); + return geometry; + } +}; +var MaterialBuilder = class { + constructor(manager) { + this.manager = manager; + this.textureLoader = new TextureLoader(this.manager); + this.tgaLoader = null; + this.crossOrigin = "anonymous"; + this.resourcePath = void 0; + } + /** + * @param {string} crossOrigin + * @return {MaterialBuilder} + */ + setCrossOrigin(crossOrigin) { + this.crossOrigin = crossOrigin; + return this; + } + /** + * @param {string} resourcePath + * @return {MaterialBuilder} + */ + setResourcePath(resourcePath) { + this.resourcePath = resourcePath; + return this; + } + /** + * @param {Object} data - parsed PMD/PMX data + * @param {BufferGeometry} geometry - some properties are dependend on geometry + * @param {function} onProgress + * @param {function} onError + * @return {Array} + */ + build(data2, geometry) { + const materials = []; + const textures = {}; + this.textureLoader.setCrossOrigin(this.crossOrigin); + for (let i = 0; i < data2.metadata.materialCount; i++) { + const material = data2.materials[i]; + const params = { userData: { MMD: {} } }; + if (material.name !== void 0) params.name = material.name; + params.diffuse = new Color().setRGB( + material.diffuse[0], + material.diffuse[1], + material.diffuse[2], + SRGBColorSpace + ); + params.opacity = material.diffuse[3]; + params.specular = new Color().setRGB(...material.specular, SRGBColorSpace); + params.shininess = material.shininess; + params.emissive = new Color().setRGB(...material.ambient, SRGBColorSpace); + params.transparent = params.opacity !== 1; + params.fog = true; + params.blending = CustomBlending; + params.blendSrc = SrcAlphaFactor; + params.blendDst = OneMinusSrcAlphaFactor; + params.blendSrcAlpha = SrcAlphaFactor; + params.blendDstAlpha = DstAlphaFactor; + if (data2.metadata.format === "pmx" && (material.flag & 1) === 1) { + params.side = DoubleSide; + } else { + params.side = params.opacity === 1 ? FrontSide : DoubleSide; + } + if (data2.metadata.format === "pmd") { + if (material.fileName) { + const fileName = material.fileName; + const fileNames = fileName.split("*"); + params.map = this._loadTexture(fileNames[0], textures); + if (fileNames.length > 1) { + const extension = fileNames[1].slice(-4).toLowerCase(); + params.matcap = this._loadTexture( + fileNames[1], + textures + ); + params.matcapCombine = extension === ".sph" ? MultiplyOperation : AddOperation; + } + } + const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data2.toonTextures[material.toonIndex].fileName; + params.gradientMap = this._loadTexture( + toonFileName, + textures, + { + isToonTexture: true, + isDefaultToonTexture: this._isDefaultToonTexture(toonFileName) + } + ); + params.userData.outlineParameters = { + thickness: material.edgeFlag === 1 ? 3e-3 : 0, + color: [0, 0, 0], + alpha: 1, + visible: material.edgeFlag === 1 + }; + } else { + if (material.textureIndex !== -1) { + params.map = this._loadTexture(data2.textures[material.textureIndex], textures); + params.userData.MMD.mapFileName = data2.textures[material.textureIndex]; + } + if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) { + params.matcap = this._loadTexture( + data2.textures[material.envTextureIndex], + textures + ); + params.userData.MMD.matcapFileName = data2.textures[material.envTextureIndex]; + params.matcapCombine = material.envFlag === 1 ? MultiplyOperation : AddOperation; + } + let toonFileName, isDefaultToon; + if (material.toonIndex === -1 || material.toonFlag !== 0) { + toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp"; + isDefaultToon = true; + } else { + toonFileName = data2.textures[material.toonIndex]; + isDefaultToon = false; + } + params.gradientMap = this._loadTexture( + toonFileName, + textures, + { + isToonTexture: true, + isDefaultToonTexture: isDefaultToon + } + ); + params.userData.outlineParameters = { + thickness: material.edgeSize / 300, + // TODO: better calculation? + color: material.edgeColor.slice(0, 3), + alpha: material.edgeColor[3], + visible: (material.flag & 16) !== 0 && material.edgeSize > 0 + }; + } + if (params.map !== void 0) { + if (!params.transparent) { + this._checkImageTransparency(params.map, geometry, i); + } + params.emissive.multiplyScalar(0.2); + } + materials.push(new MMDToonMaterial(params)); + } + if (data2.metadata.format === "pmx") { + let checkAlphaMorph = function(elements, materials2) { + for (let i = 0, il = elements.length; i < il; i++) { + const element = elements[i]; + if (element.index === -1) continue; + const material = materials2[element.index]; + if (material.opacity !== element.diffuse[3]) { + material.transparent = true; + } + } + }; + for (let i = 0, il = data2.morphs.length; i < il; i++) { + const morph = data2.morphs[i]; + const elements = morph.elements; + if (morph.type === 0) { + for (let j = 0, jl = elements.length; j < jl; j++) { + const morph2 = data2.morphs[elements[j].index]; + if (morph2.type !== 8) continue; + checkAlphaMorph(morph2.elements, materials); + } + } else if (morph.type === 8) { + checkAlphaMorph(elements, materials); + } + } + } + return materials; + } + // private methods + _getTGALoader() { + if (this.tgaLoader === null) { + if (TGALoader === void 0) { + throw new Error("THREE.MMDLoader: Import TGALoader"); + } + this.tgaLoader = new TGALoader(this.manager); + } + return this.tgaLoader; + } + _isDefaultToonTexture(name2) { + if (name2.length !== 10) return false; + return /toon(10|0[0-9])\.bmp/.test(name2); + } + _loadTexture(filePath, textures, params, onProgress, onError) { + params = params || {}; + const scope = this; + let fullPath; + if (params.isDefaultToonTexture === true) { + let index2; + try { + index2 = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]); + } catch (e) { + console.warn("THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."); + index2 = 0; + } + fullPath = DEFAULT_TOON_TEXTURES[index2]; + } else { + fullPath = this.resourcePath + filePath; + } + if (textures[fullPath] !== void 0) return textures[fullPath]; + let loader = this.manager.getHandler(fullPath); + if (loader === null) { + loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader; + } + const texture = loader.load(fullPath, function(t3) { + if (params.isToonTexture === true) { + t3.image = scope._getRotatedImage(t3.image); + t3.magFilter = NearestFilter; + t3.minFilter = NearestFilter; + } + t3.flipY = false; + t3.wrapS = RepeatWrapping; + t3.wrapT = RepeatWrapping; + t3.colorSpace = SRGBColorSpace; + for (let i = 0; i < texture.readyCallbacks.length; i++) { + texture.readyCallbacks[i](texture); + } + delete texture.readyCallbacks; + }, onProgress, onError); + texture.readyCallbacks = []; + textures[fullPath] = texture; + return texture; + } + _getRotatedImage(image) { + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + const width2 = image.width; + const height2 = image.height; + canvas.width = width2; + canvas.height = height2; + context.clearRect(0, 0, width2, height2); + context.translate(width2 / 2, height2 / 2); + context.rotate(0.5 * Math.PI); + context.translate(-width2 / 2, -height2 / 2); + context.drawImage(image, 0, 0); + return context.getImageData(0, 0, width2, height2); + } + // Check if the partial image area used by the texture is transparent. + _checkImageTransparency(map2, geometry, groupIndex) { + map2.readyCallbacks.push(function(texture) { + function createImageData(image) { + const canvas = document.createElement("canvas"); + canvas.width = image.width; + canvas.height = image.height; + const context = canvas.getContext("2d"); + context.drawImage(image, 0, 0); + return context.getImageData(0, 0, canvas.width, canvas.height); + } + function detectImageTransparency(image, uvs, indices) { + const width2 = image.width; + const height2 = image.height; + const data2 = image.data; + const threshold = 253; + if (data2.length / (width2 * height2) !== 4) return false; + for (let i = 0; i < indices.length; i += 3) { + const centerUV = { x: 0, y: 0 }; + for (let j = 0; j < 3; j++) { + const index2 = indices[i * 3 + j]; + const uv = { x: uvs[index2 * 2 + 0], y: uvs[index2 * 2 + 1] }; + if (getAlphaByUv(image, uv) < threshold) return true; + centerUV.x += uv.x; + centerUV.y += uv.y; + } + centerUV.x /= 3; + centerUV.y /= 3; + if (getAlphaByUv(image, centerUV) < threshold) return true; + } + return false; + } + function getAlphaByUv(image, uv) { + const width2 = image.width; + const height2 = image.height; + let x2 = Math.round(uv.x * width2) % width2; + let y2 = Math.round(uv.y * height2) % height2; + if (x2 < 0) x2 += width2; + if (y2 < 0) y2 += height2; + const index2 = y2 * width2 + x2; + return image.data[index2 * 4 + 3]; + } + if (texture.isCompressedTexture === true) { + if (NON_ALPHA_CHANNEL_FORMATS.includes(texture.format)) { + map2.transparent = false; + } else { + map2.transparent = true; + } + return; + } + const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image); + const group = geometry.groups[groupIndex]; + if (detectImageTransparency( + imageData, + geometry.attributes.uv.array, + geometry.index.array.slice(group.start, group.start + group.count) + )) { + map2.transparent = true; + } + }); + } +}; +var AnimationBuilder = class { + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + build(vmd, mesh) { + const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks; + const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks; + for (let i = 0, il = tracks2.length; i < il; i++) { + tracks.push(tracks2[i]); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + buildSkeletalAnimation(vmd, mesh) { + function pushInterpolation(array, interpolation, index2) { + array.push(interpolation[index2 + 0] / 127); + array.push(interpolation[index2 + 8] / 127); + array.push(interpolation[index2 + 4] / 127); + array.push(interpolation[index2 + 12] / 127); + } + const tracks = []; + const motions = {}; + const bones = mesh.skeleton.bones; + const boneNameDictionary = {}; + for (let i = 0, il = bones.length; i < il; i++) { + boneNameDictionary[bones[i].name] = true; + } + for (let i = 0; i < vmd.metadata.motionCount; i++) { + const motion = vmd.motions[i]; + const boneName = motion.boneName; + if (boneNameDictionary[boneName] === void 0) continue; + motions[boneName] = motions[boneName] || []; + motions[boneName].push(motion); + } + for (const key2 in motions) { + const array = motions[key2]; + array.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const positions = []; + const rotations = []; + const pInterpolations = []; + const rInterpolations = []; + const basePosition = mesh.skeleton.getBoneByName(key2).position.toArray(); + for (let i = 0, il = array.length; i < il; i++) { + const time2 = array[i].frameNum / 30; + const position2 = array[i].position; + const rotation2 = array[i].rotation; + const interpolation = array[i].interpolation; + times.push(time2); + for (let j = 0; j < 3; j++) positions.push(basePosition[j] + position2[j]); + for (let j = 0; j < 4; j++) rotations.push(rotation2[j]); + for (let j = 0; j < 3; j++) pushInterpolation(pInterpolations, interpolation, j); + pushInterpolation(rInterpolations, interpolation, 3); + } + const targetName = ".bones[" + key2 + "]"; + tracks.push(this._createTrack(targetName + ".position", VectorKeyframeTrack, times, positions, pInterpolations)); + tracks.push(this._createTrack(targetName + ".quaternion", QuaternionKeyframeTrack, times, rotations, rInterpolations)); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @param {SkinnedMesh} mesh - tracks will be fitting to mesh + * @return {AnimationClip} + */ + buildMorphAnimation(vmd, mesh) { + const tracks = []; + const morphs = {}; + const morphTargetDictionary = mesh.morphTargetDictionary; + for (let i = 0; i < vmd.metadata.morphCount; i++) { + const morph = vmd.morphs[i]; + const morphName = morph.morphName; + if (morphTargetDictionary[morphName] === void 0) continue; + morphs[morphName] = morphs[morphName] || []; + morphs[morphName].push(morph); + } + for (const key2 in morphs) { + const array = morphs[key2]; + array.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const values2 = []; + for (let i = 0, il = array.length; i < il; i++) { + times.push(array[i].frameNum / 30); + values2.push(array[i].weight); + } + tracks.push(new NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key2] + "]", times, values2)); + } + return new AnimationClip("", -1, tracks); + } + /** + * @param {Object} vmd - parsed VMD data + * @return {AnimationClip} + */ + buildCameraAnimation(vmd) { + function pushVector3(array, vec) { + array.push(vec.x); + array.push(vec.y); + array.push(vec.z); + } + function pushQuaternion(array, q2) { + array.push(q2.x); + array.push(q2.y); + array.push(q2.z); + array.push(q2.w); + } + function pushInterpolation(array, interpolation, index2) { + array.push(interpolation[index2 * 4 + 0] / 127); + array.push(interpolation[index2 * 4 + 1] / 127); + array.push(interpolation[index2 * 4 + 2] / 127); + array.push(interpolation[index2 * 4 + 3] / 127); + } + const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice(); + cameras.sort(function(a2, b3) { + return a2.frameNum - b3.frameNum; + }); + const times = []; + const centers = []; + const quaternions = []; + const positions = []; + const fovs = []; + const cInterpolations = []; + const qInterpolations = []; + const pInterpolations = []; + const fInterpolations = []; + const quaternion = new Quaternion(); + const euler = new Euler(); + const position2 = new Vector3(); + const center = new Vector3(); + for (let i = 0, il = cameras.length; i < il; i++) { + const motion = cameras[i]; + const time2 = motion.frameNum / 30; + const pos = motion.position; + const rot = motion.rotation; + const distance = motion.distance; + const fov = motion.fov; + const interpolation = motion.interpolation; + times.push(time2); + position2.set(0, 0, -distance); + center.set(pos[0], pos[1], pos[2]); + euler.set(-rot[0], -rot[1], -rot[2]); + quaternion.setFromEuler(euler); + position2.add(center); + position2.applyQuaternion(quaternion); + pushVector3(centers, center); + pushQuaternion(quaternions, quaternion); + pushVector3(positions, position2); + fovs.push(fov); + for (let j = 0; j < 3; j++) { + pushInterpolation(cInterpolations, interpolation, j); + } + pushInterpolation(qInterpolations, interpolation, 3); + for (let j = 0; j < 3; j++) { + pushInterpolation(pInterpolations, interpolation, 4); + } + pushInterpolation(fInterpolations, interpolation, 5); + } + const tracks = []; + tracks.push(this._createTrack("target.position", VectorKeyframeTrack, times, centers, cInterpolations)); + tracks.push(this._createTrack(".quaternion", QuaternionKeyframeTrack, times, quaternions, qInterpolations)); + tracks.push(this._createTrack(".position", VectorKeyframeTrack, times, positions, pInterpolations)); + tracks.push(this._createTrack(".fov", NumberKeyframeTrack, times, fovs, fInterpolations)); + return new AnimationClip("", -1, tracks); + } + // private method + _createTrack(node, typedKeyframeTrack, times, values2, interpolations) { + if (times.length > 2) { + times = times.slice(); + values2 = values2.slice(); + interpolations = interpolations.slice(); + const stride = values2.length / times.length; + const interpolateStride = interpolations.length / times.length; + let index2 = 1; + for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) { + for (let i = 0; i < stride; i++) { + if (values2[index2 * stride + i] !== values2[(index2 - 1) * stride + i] || values2[index2 * stride + i] !== values2[aheadIndex * stride + i]) { + index2++; + break; + } + } + if (aheadIndex > index2) { + times[index2] = times[aheadIndex]; + for (let i = 0; i < stride; i++) { + values2[index2 * stride + i] = values2[aheadIndex * stride + i]; + } + for (let i = 0; i < interpolateStride; i++) { + interpolations[index2 * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i]; + } + } + } + times.length = index2 + 1; + values2.length = (index2 + 1) * stride; + interpolations.length = (index2 + 1) * interpolateStride; + } + const track = new typedKeyframeTrack(node, times, values2); + track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) { + return new CubicBezierInterpolation(this.times, this.values, this.getValueSize(), result, new Float32Array(interpolations)); + }; + return track; + } +}; +var CubicBezierInterpolation = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + this.interpolationParams = params; + } + interpolate_(i1, t0, t3, t1) { + const result = this.resultBuffer; + const values2 = this.sampleValues; + const stride = this.valueSize; + const params = this.interpolationParams; + const offset1 = i1 * stride; + const offset0 = offset1 - stride; + const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t3 - t0) / (t1 - t0); + if (stride === 4) { + const x1 = params[i1 * 4 + 0]; + const x2 = params[i1 * 4 + 1]; + const y1 = params[i1 * 4 + 2]; + const y2 = params[i1 * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + Quaternion.slerpFlat(result, 0, values2, offset0, values2, offset1, ratio); + } else if (stride === 3) { + for (let i = 0; i !== stride; ++i) { + const x1 = params[i1 * 12 + i * 4 + 0]; + const x2 = params[i1 * 12 + i * 4 + 1]; + const y1 = params[i1 * 12 + i * 4 + 2]; + const y2 = params[i1 * 12 + i * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + result[i] = values2[offset0 + i] * (1 - ratio) + values2[offset1 + i] * ratio; + } + } else { + const x1 = params[i1 * 4 + 0]; + const x2 = params[i1 * 4 + 1]; + const y1 = params[i1 * 4 + 2]; + const y2 = params[i1 * 4 + 3]; + const ratio = this._calculate(x1, x2, y1, y2, weight1); + result[0] = values2[offset0] * (1 - ratio) + values2[offset1] * ratio; + } + return result; + } + _calculate(x1, x2, y1, y2, x3) { + let c2 = 0.5; + let t3 = c2; + let s = 1 - t3; + const loop = 15; + const eps = 1e-5; + const math = Math; + let sst3, stt3, ttt; + for (let i = 0; i < loop; i++) { + sst3 = 3 * s * s * t3; + stt3 = 3 * s * t3 * t3; + ttt = t3 * t3 * t3; + const ft2 = sst3 * x1 + stt3 * x2 + ttt - x3; + if (math.abs(ft2) < eps) break; + c2 /= 2; + t3 += ft2 < 0 ? c2 : -c2; + s = 1 - t3; + } + return sst3 * y1 + stt3 * y2 + ttt; + } +}; +var MMDToonMaterial = class extends ShaderMaterial { + constructor(parameters) { + super(); + this.isMMDToonMaterial = true; + this.type = "MMDToonMaterial"; + this._matcapCombine = AddOperation; + this.emissiveIntensity = 1; + this.normalMapType = TangentSpaceNormalMap; + this.combine = MultiplyOperation; + this.wireframeLinecap = "round"; + this.wireframeLinejoin = "round"; + this.flatShading = false; + this.lights = true; + this.vertexShader = MMDToonShader.vertexShader; + this.fragmentShader = MMDToonShader.fragmentShader; + this.defines = Object.assign({}, MMDToonShader.defines); + Object.defineProperty(this, "matcapCombine", { + get: function() { + return this._matcapCombine; + }, + set: function(value2) { + this._matcapCombine = value2; + switch (value2) { + case MultiplyOperation: + this.defines.MATCAP_BLENDING_MULTIPLY = true; + delete this.defines.MATCAP_BLENDING_ADD; + break; + default: + case AddOperation: + this.defines.MATCAP_BLENDING_ADD = true; + delete this.defines.MATCAP_BLENDING_MULTIPLY; + break; + } + } + }); + this.uniforms = UniformsUtils.clone(MMDToonShader.uniforms); + const exposePropertyNames = [ + "specular", + "opacity", + "diffuse", + "map", + "matcap", + "gradientMap", + "lightMap", + "lightMapIntensity", + "aoMap", + "aoMapIntensity", + "emissive", + "emissiveMap", + "bumpMap", + "bumpScale", + "normalMap", + "normalScale", + "displacemantBias", + "displacemantMap", + "displacemantScale", + "specularMap", + "alphaMap", + "reflectivity", + "refractionRatio" + ]; + for (const propertyName of exposePropertyNames) { + Object.defineProperty(this, propertyName, { + get: function() { + return this.uniforms[propertyName].value; + }, + set: function(value2) { + this.uniforms[propertyName].value = value2; + } + }); + } + this._shininess = 30; + Object.defineProperty(this, "shininess", { + get: function() { + return this._shininess; + }, + set: function(value2) { + this._shininess = value2; + this.uniforms.shininess.value = Math.max(this._shininess, 1e-4); + } + }); + Object.defineProperty( + this, + "color", + Object.getOwnPropertyDescriptor(this, "diffuse") + ); + this.setValues(parameters); + } + copy(source) { + super.copy(source); + this.matcapCombine = source.matcapCombine; + this.emissiveIntensity = source.emissiveIntensity; + this.normalMapType = source.normalMapType; + this.combine = source.combine; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + this.flatShading = source.flatShading; + return this; + } +}; + +// node_modules/three/examples/jsm/loaders/MTLLoader.js +var MTLLoader = class extends Loader { + constructor(manager) { + super(manager); + } + /** + * Loads and parses a MTL asset from a URL. + * + * @param {String} url - URL to the MTL file. + * @param {Function} [onLoad] - Callback invoked with the loaded object. + * @param {Function} [onProgress] - Callback for download progress. + * @param {Function} [onError] - Callback for download errors. + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to load. + */ + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterialOptions(value2) { + this.materialOptions = value2; + return this; + } + /** + * Parses a MTL file. + * + * @param {String} text - Content of MTL file + * @return {MaterialCreator} + * + * @see setPath setResourcePath + * + * @note In order for relative texture references to resolve correctly + * you must call setResourcePath() explicitly prior to parse. + */ + parse(text2, path) { + const lines = text2.split("\n"); + let info = {}; + const delimiter_pattern = /\s+/; + const materialsInfo = {}; + for (let i = 0; i < lines.length; i++) { + let line2 = lines[i]; + line2 = line2.trim(); + if (line2.length === 0 || line2.charAt(0) === "#") { + continue; + } + const pos = line2.indexOf(" "); + let key2 = pos >= 0 ? line2.substring(0, pos) : line2; + key2 = key2.toLowerCase(); + let value2 = pos >= 0 ? line2.substring(pos + 1) : ""; + value2 = value2.trim(); + if (key2 === "newmtl") { + info = { name: value2 }; + materialsInfo[value2] = info; + } else { + if (key2 === "ka" || key2 === "kd" || key2 === "ks" || key2 === "ke") { + const ss = value2.split(delimiter_pattern, 3); + info[key2] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])]; + } else { + info[key2] = value2; + } + } + } + const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions); + materialCreator.setCrossOrigin(this.crossOrigin); + materialCreator.setManager(this.manager); + materialCreator.setMaterials(materialsInfo); + return materialCreator; + } +}; +var MaterialCreator = class { + constructor(baseUrl = "", options = {}) { + this.baseUrl = baseUrl; + this.options = options; + this.materialsInfo = {}; + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + this.crossOrigin = "anonymous"; + this.side = this.options.side !== void 0 ? this.options.side : FrontSide; + this.wrap = this.options.wrap !== void 0 ? this.options.wrap : RepeatWrapping; + } + setCrossOrigin(value2) { + this.crossOrigin = value2; + return this; + } + setManager(value2) { + this.manager = value2; + } + setMaterials(materialsInfo) { + this.materialsInfo = this.convert(materialsInfo); + this.materials = {}; + this.materialsArray = []; + this.nameLookup = {}; + } + convert(materialsInfo) { + if (!this.options) return materialsInfo; + const converted = {}; + for (const mn in materialsInfo) { + const mat = materialsInfo[mn]; + const covmat = {}; + converted[mn] = covmat; + for (const prop in mat) { + let save = true; + let value2 = mat[prop]; + const lprop = prop.toLowerCase(); + switch (lprop) { + case "kd": + case "ka": + case "ks": + if (this.options && this.options.normalizeRGB) { + value2 = [value2[0] / 255, value2[1] / 255, value2[2] / 255]; + } + if (this.options && this.options.ignoreZeroRGBs) { + if (value2[0] === 0 && value2[1] === 0 && value2[2] === 0) { + save = false; + } + } + break; + default: + break; + } + if (save) { + covmat[lprop] = value2; + } + } + } + return converted; + } + preload() { + for (const mn in this.materialsInfo) { + this.create(mn); + } + } + getIndex(materialName) { + return this.nameLookup[materialName]; + } + getAsArray() { + let index2 = 0; + for (const mn in this.materialsInfo) { + this.materialsArray[index2] = this.create(mn); + this.nameLookup[mn] = index2; + index2++; + } + return this.materialsArray; + } + create(materialName) { + if (this.materials[materialName] === void 0) { + this.createMaterial_(materialName); + } + return this.materials[materialName]; + } + createMaterial_(materialName) { + const scope = this; + const mat = this.materialsInfo[materialName]; + const params = { + name: materialName, + side: this.side + }; + function resolveURL(baseUrl, url) { + if (typeof url !== "string" || url === "") + return ""; + if (/^https?:\/\//i.test(url)) return url; + return baseUrl + url; + } + function setMapForType(mapType, value2) { + if (params[mapType]) return; + const texParams = scope.getTextureParams(value2, params); + const map2 = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url)); + map2.repeat.copy(texParams.scale); + map2.offset.copy(texParams.offset); + map2.wrapS = scope.wrap; + map2.wrapT = scope.wrap; + if (mapType === "map" || mapType === "emissiveMap") { + map2.colorSpace = SRGBColorSpace; + } + params[mapType] = map2; + } + for (const prop in mat) { + const value2 = mat[prop]; + let n2; + if (value2 === "") continue; + switch (prop.toLowerCase()) { + case "kd": + params.color = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "ks": + params.specular = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "ke": + params.emissive = new Color().fromArray(value2).convertSRGBToLinear(); + break; + case "map_kd": + setMapForType("map", value2); + break; + case "map_ks": + setMapForType("specularMap", value2); + break; + case "map_ke": + setMapForType("emissiveMap", value2); + break; + case "norm": + setMapForType("normalMap", value2); + break; + case "map_bump": + case "bump": + setMapForType("bumpMap", value2); + break; + case "map_d": + setMapForType("alphaMap", value2); + params.transparent = true; + break; + case "ns": + params.shininess = parseFloat(value2); + break; + case "d": + n2 = parseFloat(value2); + if (n2 < 1) { + params.opacity = n2; + params.transparent = true; + } + break; + case "tr": + n2 = parseFloat(value2); + if (this.options && this.options.invertTrProperty) n2 = 1 - n2; + if (n2 > 0) { + params.opacity = 1 - n2; + params.transparent = true; + } + break; + default: + break; + } + } + this.materials[materialName] = new MeshPhongMaterial(params); + return this.materials[materialName]; + } + getTextureParams(value2, matParams) { + const texParams = { + scale: new Vector2(1, 1), + offset: new Vector2(0, 0) + }; + const items = value2.split(/\s+/); + let pos; + pos = items.indexOf("-bm"); + if (pos >= 0) { + matParams.bumpScale = parseFloat(items[pos + 1]); + items.splice(pos, 2); + } + pos = items.indexOf("-s"); + if (pos >= 0) { + texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + pos = items.indexOf("-o"); + if (pos >= 0) { + texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); + items.splice(pos, 4); + } + texParams.url = items.join(" ").trim(); + return texParams; + } + loadTexture(url, mapping, onLoad, onProgress, onError) { + const manager = this.manager !== void 0 ? this.manager : DefaultLoadingManager; + let loader = manager.getHandler(url); + if (loader === null) { + loader = new TextureLoader(manager); + } + if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin); + const texture = loader.load(url, onLoad, onProgress, onError); + if (mapping !== void 0) texture.mapping = mapping; + return texture; + } +}; + +// node_modules/three/examples/jsm/misc/VolumeSlice.js +var VolumeSlice = class { + constructor(volume, index2, axis) { + const slice2 = this; + this.volume = volume; + index2 = index2 || 0; + Object.defineProperty(this, "index", { + get: function() { + return index2; + }, + set: function(value2) { + index2 = value2; + slice2.geometryNeedsUpdate = true; + return index2; + } + }); + this.axis = axis || "z"; + this.canvas = document.createElement("canvas"); + this.canvasBuffer = document.createElement("canvas"); + this.updateGeometry(); + const canvasMap = new Texture(this.canvas); + canvasMap.minFilter = LinearFilter; + canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping; + canvasMap.colorSpace = SRGBColorSpace; + const material = new MeshBasicMaterial({ map: canvasMap, side: DoubleSide, transparent: true }); + this.mesh = new Mesh(this.geometry, material); + this.mesh.matrixAutoUpdate = false; + this.geometryNeedsUpdate = true; + this.repaint(); + } + /** + * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true + * @memberof VolumeSlice + */ + repaint() { + if (this.geometryNeedsUpdate) { + this.updateGeometry(); + } + const iLength = this.iLength, jLength = this.jLength, sliceAccess = this.sliceAccess, volume = this.volume, canvas = this.canvasBuffer, ctx = this.ctxBuffer; + const imgData = ctx.getImageData(0, 0, iLength, jLength); + const data2 = imgData.data; + const volumeData = volume.data; + const upperThreshold = volume.upperThreshold; + const lowerThreshold = volume.lowerThreshold; + const windowLow = volume.windowLow; + const windowHigh = volume.windowHigh; + let pixelCount = 0; + if (volume.dataType === "label") { + for (let j = 0; j < jLength; j++) { + for (let i = 0; i < iLength; i++) { + let label = volumeData[sliceAccess(i, j)]; + label = label >= this.colorMap.length ? label % this.colorMap.length + 1 : label; + const color = this.colorMap[label]; + data2[4 * pixelCount] = color >> 24 & 255; + data2[4 * pixelCount + 1] = color >> 16 & 255; + data2[4 * pixelCount + 2] = color >> 8 & 255; + data2[4 * pixelCount + 3] = color & 255; + pixelCount++; + } + } + } else { + for (let j = 0; j < jLength; j++) { + for (let i = 0; i < iLength; i++) { + let value2 = volumeData[sliceAccess(i, j)]; + let alpha = 255; + alpha = upperThreshold >= value2 ? lowerThreshold <= value2 ? alpha : 0 : 0; + value2 = Math.floor(255 * (value2 - windowLow) / (windowHigh - windowLow)); + value2 = value2 > 255 ? 255 : value2 < 0 ? 0 : value2 | 0; + data2[4 * pixelCount] = value2; + data2[4 * pixelCount + 1] = value2; + data2[4 * pixelCount + 2] = value2; + data2[4 * pixelCount + 3] = alpha; + pixelCount++; + } + } + } + ctx.putImageData(imgData, 0, 0); + this.ctx.drawImage(canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height); + this.mesh.material.map.needsUpdate = true; + } + /** + * @member {Function} Refresh the geometry according to axis and index + * @see Volume.extractPerpendicularPlane + * @memberof VolumeSlice + */ + updateGeometry() { + const extracted = this.volume.extractPerpendicularPlane(this.axis, this.index); + this.sliceAccess = extracted.sliceAccess; + this.jLength = extracted.jLength; + this.iLength = extracted.iLength; + this.matrix = extracted.matrix; + this.canvas.width = extracted.planeWidth; + this.canvas.height = extracted.planeHeight; + this.canvasBuffer.width = this.iLength; + this.canvasBuffer.height = this.jLength; + this.ctx = this.canvas.getContext("2d"); + this.ctxBuffer = this.canvasBuffer.getContext("2d"); + if (this.geometry) this.geometry.dispose(); + this.geometry = new PlaneGeometry(extracted.planeWidth, extracted.planeHeight); + if (this.mesh) { + this.mesh.geometry = this.geometry; + this.mesh.matrix.identity(); + this.mesh.applyMatrix4(this.matrix); + } + this.geometryNeedsUpdate = false; + } +}; + +// node_modules/three/examples/jsm/misc/Volume.js +var Volume = class { + constructor(xLength, yLength, zLength, type, arrayBuffer) { + if (xLength !== void 0) { + this.xLength = Number(xLength) || 1; + this.yLength = Number(yLength) || 1; + this.zLength = Number(zLength) || 1; + this.axisOrder = ["x", "y", "z"]; + switch (type) { + case "Uint8": + case "uint8": + case "uchar": + case "unsigned char": + case "uint8_t": + this.data = new Uint8Array(arrayBuffer); + break; + case "Int8": + case "int8": + case "signed char": + case "int8_t": + this.data = new Int8Array(arrayBuffer); + break; + case "Int16": + case "int16": + case "short": + case "short int": + case "signed short": + case "signed short int": + case "int16_t": + this.data = new Int16Array(arrayBuffer); + break; + case "Uint16": + case "uint16": + case "ushort": + case "unsigned short": + case "unsigned short int": + case "uint16_t": + this.data = new Uint16Array(arrayBuffer); + break; + case "Int32": + case "int32": + case "int": + case "signed int": + case "int32_t": + this.data = new Int32Array(arrayBuffer); + break; + case "Uint32": + case "uint32": + case "uint": + case "unsigned int": + case "uint32_t": + this.data = new Uint32Array(arrayBuffer); + break; + case "longlong": + case "long long": + case "long long int": + case "signed long long": + case "signed long long int": + case "int64": + case "int64_t": + case "ulonglong": + case "unsigned long long": + case "unsigned long long int": + case "uint64": + case "uint64_t": + throw new Error("Error in Volume constructor : this type is not supported in JavaScript"); + break; + case "Float32": + case "float32": + case "float": + this.data = new Float32Array(arrayBuffer); + break; + case "Float64": + case "float64": + case "double": + this.data = new Float64Array(arrayBuffer); + break; + default: + this.data = new Uint8Array(arrayBuffer); + } + if (this.data.length !== this.xLength * this.yLength * this.zLength) { + throw new Error("Error in Volume constructor, lengths are not matching arrayBuffer size"); + } + } + this.spacing = [1, 1, 1]; + this.offset = [0, 0, 0]; + this.matrix = new Matrix3(); + this.matrix.identity(); + let lowerThreshold = -Infinity; + Object.defineProperty(this, "lowerThreshold", { + get: function() { + return lowerThreshold; + }, + set: function(value2) { + lowerThreshold = value2; + this.sliceList.forEach(function(slice2) { + slice2.geometryNeedsUpdate = true; + }); + } + }); + let upperThreshold = Infinity; + Object.defineProperty(this, "upperThreshold", { + get: function() { + return upperThreshold; + }, + set: function(value2) { + upperThreshold = value2; + this.sliceList.forEach(function(slice2) { + slice2.geometryNeedsUpdate = true; + }); + } + }); + this.sliceList = []; + this.segmentation = false; + } + /** + * @member {Function} getData Shortcut for data[access(i,j,k)] + * @memberof Volume + * @param {number} i First coordinate + * @param {number} j Second coordinate + * @param {number} k Third coordinate + * @returns {number} value in the data array + */ + getData(i, j, k2) { + return this.data[k2 * this.xLength * this.yLength + j * this.xLength + i]; + } + /** + * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system + * @memberof Volume + * @param {number} i First coordinate + * @param {number} j Second coordinate + * @param {number} k Third coordinate + * @returns {number} index + */ + access(i, j, k2) { + return k2 * this.xLength * this.yLength + j * this.xLength + i; + } + /** + * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data + * @memberof Volume + * @param {number} index index of the voxel + * @returns {Array} [x,y,z] + */ + reverseAccess(index2) { + const z = Math.floor(index2 / (this.yLength * this.xLength)); + const y2 = Math.floor((index2 - z * this.yLength * this.xLength) / this.xLength); + const x2 = index2 - z * this.yLength * this.xLength - y2 * this.xLength; + return [x2, y2, z]; + } + /** + * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced + * @memberof Volume + * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters : + * value of the voxel + * index of the voxel + * the data (TypedArray) + * @param {Object} context You can specify a context in which call the function, default if this Volume + * @returns {Volume} this + */ + map(functionToMap, context) { + const length2 = this.data.length; + context = context || this; + for (let i = 0; i < length2; i++) { + this.data[i] = functionToMap.call(context, this.data[i], i, this.data); + } + return this; + } + /** + * @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. + * @memberof Volume + * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' + * @param {number} index the index of the slice + * @returns {Object} an object containing all the usefull information on the geometry of the slice + */ + extractPerpendicularPlane(axis, RASIndex) { + let firstSpacing, secondSpacing, positionOffset, IJKIndex; + const axisInIJK = new Vector3(), firstDirection = new Vector3(), secondDirection = new Vector3(), planeMatrix = new Matrix4().identity(), volume = this; + const dimensions = new Vector3(this.xLength, this.yLength, this.zLength); + switch (axis) { + case "x": + axisInIJK.set(1, 0, 0); + firstDirection.set(0, 0, -1); + secondDirection.set(0, -1, 0); + firstSpacing = this.spacing[this.axisOrder.indexOf("z")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; + IJKIndex = new Vector3(RASIndex, 0, 0); + planeMatrix.multiply(new Matrix4().makeRotationY(Math.PI / 2)); + positionOffset = (volume.RASDimensions[0] - 1) / 2; + planeMatrix.setPosition(new Vector3(RASIndex - positionOffset, 0, 0)); + break; + case "y": + axisInIJK.set(0, 1, 0); + firstDirection.set(1, 0, 0); + secondDirection.set(0, 0, 1); + firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("z")]; + IJKIndex = new Vector3(0, RASIndex, 0); + planeMatrix.multiply(new Matrix4().makeRotationX(-Math.PI / 2)); + positionOffset = (volume.RASDimensions[1] - 1) / 2; + planeMatrix.setPosition(new Vector3(0, RASIndex - positionOffset, 0)); + break; + case "z": + default: + axisInIJK.set(0, 0, 1); + firstDirection.set(1, 0, 0); + secondDirection.set(0, -1, 0); + firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; + secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; + IJKIndex = new Vector3(0, 0, RASIndex); + positionOffset = (volume.RASDimensions[2] - 1) / 2; + planeMatrix.setPosition(new Vector3(0, 0, RASIndex - positionOffset)); + break; + } + if (!this.segmentation) { + firstDirection.applyMatrix4(volume.inverseMatrix).normalize(); + secondDirection.applyMatrix4(volume.inverseMatrix).normalize(); + axisInIJK.applyMatrix4(volume.inverseMatrix).normalize(); + } + firstDirection.arglet = "i"; + secondDirection.arglet = "j"; + const iLength = Math.floor(Math.abs(firstDirection.dot(dimensions))); + const jLength = Math.floor(Math.abs(secondDirection.dot(dimensions))); + const planeWidth = Math.abs(iLength * firstSpacing); + const planeHeight = Math.abs(jLength * secondSpacing); + IJKIndex = Math.abs(Math.round(IJKIndex.applyMatrix4(volume.inverseMatrix).dot(axisInIJK))); + const base = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)]; + const iDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[0])) > 0.9; + }); + const jDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[1])) > 0.9; + }); + const kDirection = [firstDirection, secondDirection, axisInIJK].find(function(x2) { + return Math.abs(x2.dot(base[2])) > 0.9; + }); + function sliceAccess(i, j) { + const si = iDirection === axisInIJK ? IJKIndex : iDirection.arglet === "i" ? i : j; + const sj = jDirection === axisInIJK ? IJKIndex : jDirection.arglet === "i" ? i : j; + const sk = kDirection === axisInIJK ? IJKIndex : kDirection.arglet === "i" ? i : j; + const accessI = iDirection.dot(base[0]) > 0 ? si : volume.xLength - 1 - si; + const accessJ = jDirection.dot(base[1]) > 0 ? sj : volume.yLength - 1 - sj; + const accessK = kDirection.dot(base[2]) > 0 ? sk : volume.zLength - 1 - sk; + return volume.access(accessI, accessJ, accessK); + } + return { + iLength, + jLength, + sliceAccess, + matrix: planeMatrix, + planeWidth, + planeHeight + }; + } + /** + * @member {Function} extractSlice Returns a slice corresponding to the given axis and index + * The coordinate are given in the Right Anterior Superior coordinate format + * @memberof Volume + * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' + * @param {number} index the index of the slice + * @returns {VolumeSlice} the extracted slice + */ + extractSlice(axis, index2) { + const slice2 = new VolumeSlice(this, index2, axis); + this.sliceList.push(slice2); + return slice2; + } + /** + * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume + * @see VolumeSlice.repaint + * @memberof Volume + * @returns {Volume} this + */ + repaintAllSlices() { + this.sliceList.forEach(function(slice2) { + slice2.repaint(); + }); + return this; + } + /** + * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume + * @memberof Volume + * @returns {Array} [min,max] + */ + computeMinMax() { + let min = Infinity; + let max2 = -Infinity; + const datasize = this.data.length; + let i = 0; + for (i = 0; i < datasize; i++) { + if (!isNaN(this.data[i])) { + const value2 = this.data[i]; + min = Math.min(min, value2); + max2 = Math.max(max2, value2); + } + } + this.min = min; + this.max = max2; + return [min, max2]; + } +}; + +// node_modules/three/examples/jsm/loaders/NRRDLoader.js +var NRRDLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + /** + * + * @param {boolean} segmentation is a option for user to choose + */ + setSegmentation(segmentation) { + this.segmentation = segmentation; + } + parse(data2) { + let _data = data2; + let _dataPointer = 0; + const _nativeLittleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; + const _littleEndian = true; + const headerObject = {}; + function scan(type, chunks) { + let _chunkSize = 1; + let _array_type = Uint8Array; + switch (type) { + case "uchar": + break; + case "schar": + _array_type = Int8Array; + break; + case "ushort": + _array_type = Uint16Array; + _chunkSize = 2; + break; + case "sshort": + _array_type = Int16Array; + _chunkSize = 2; + break; + case "uint": + _array_type = Uint32Array; + _chunkSize = 4; + break; + case "sint": + _array_type = Int32Array; + _chunkSize = 4; + break; + case "float": + _array_type = Float32Array; + _chunkSize = 4; + break; + case "complex": + _array_type = Float64Array; + _chunkSize = 8; + break; + case "double": + _array_type = Float64Array; + _chunkSize = 8; + break; + } + let _bytes2 = new _array_type(_data.slice( + _dataPointer, + _dataPointer += chunks * _chunkSize + )); + if (_nativeLittleEndian != _littleEndian) { + _bytes2 = flipEndianness(_bytes2, _chunkSize); + } + return _bytes2; + } + function flipEndianness(array, chunkSize) { + const u82 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength); + for (let i2 = 0; i2 < array.byteLength; i2 += chunkSize) { + for (let j = i2 + chunkSize - 1, k2 = i2; j > k2; j--, k2++) { + const tmp = u82[k2]; + u82[k2] = u82[j]; + u82[j] = tmp; + } + } + return array; + } + function parseHeader(header) { + let data3, field, fn, i2, l2, m, _i, _len; + const lines = header.split(/\r?\n/); + for (_i = 0, _len = lines.length; _i < _len; _i++) { + l2 = lines[_i]; + if (l2.match(/NRRD\d+/)) { + headerObject.isNrrd = true; + } else if (!l2.match(/^#/) && (m = l2.match(/(.*):(.*)/))) { + field = m[1].trim(); + data3 = m[2].trim(); + fn = _fieldFunctions[field]; + if (fn) { + fn.call(headerObject, data3); + } else { + headerObject[field] = data3; + } + } + } + if (!headerObject.isNrrd) { + throw new Error("Not an NRRD file"); + } + if (headerObject.encoding === "bz2" || headerObject.encoding === "bzip2") { + throw new Error("Bzip is not supported"); + } + if (!headerObject.vectors) { + headerObject.vectors = []; + headerObject.vectors.push([1, 0, 0]); + headerObject.vectors.push([0, 1, 0]); + headerObject.vectors.push([0, 0, 1]); + if (headerObject.spacings) { + for (i2 = 0; i2 <= 2; i2++) { + if (!isNaN(headerObject.spacings[i2])) { + for (let j = 0; j <= 2; j++) { + headerObject.vectors[i2][j] *= headerObject.spacings[i2]; + } + } + } + } + } + } + function parseDataAsText(data3, start, end) { + let number = ""; + start = start || 0; + end = end || data3.length; + let value2; + const lengthOfTheResult = headerObject.sizes.reduce(function(previous, current) { + return previous * current; + }, 1); + let base = 10; + if (headerObject.encoding === "hex") { + base = 16; + } + const result = new headerObject.__array(lengthOfTheResult); + let resultIndex = 0; + let parsingFunction = parseInt; + if (headerObject.__array === Float32Array || headerObject.__array === Float64Array) { + parsingFunction = parseFloat; + } + for (let i2 = start; i2 < end; i2++) { + value2 = data3[i2]; + if ((value2 < 9 || value2 > 13) && value2 !== 32) { + number += String.fromCharCode(value2); + } else { + if (number !== "") { + result[resultIndex] = parsingFunction(number, base); + resultIndex++; + } + number = ""; + } + } + if (number !== "") { + result[resultIndex] = parsingFunction(number, base); + resultIndex++; + } + return result; + } + const _bytes = scan("uchar", data2.byteLength); + const _length = _bytes.length; + let _header = null; + let _data_start = 0; + let i; + for (i = 1; i < _length; i++) { + if (_bytes[i - 1] == 10 && _bytes[i] == 10) { + _header = this.parseChars(_bytes, 0, i - 2); + _data_start = i + 1; + break; + } + } + parseHeader(_header); + _data = _bytes.subarray(_data_start); + if (headerObject.encoding.substring(0, 2) === "gz") { + _data = gunzipSync(new Uint8Array(_data)); + } else if (headerObject.encoding === "ascii" || headerObject.encoding === "text" || headerObject.encoding === "txt" || headerObject.encoding === "hex") { + _data = parseDataAsText(_data); + } else if (headerObject.encoding === "raw") { + const _copy = new Uint8Array(_data.length); + for (let i2 = 0; i2 < _data.length; i2++) { + _copy[i2] = _data[i2]; + } + _data = _copy; + } + _data = _data.buffer; + const volume = new Volume(); + volume.header = headerObject; + volume.segmentation = this.segmentation; + volume.data = new headerObject.__array(_data); + const min_max = volume.computeMinMax(); + const min = min_max[0]; + const max2 = min_max[1]; + volume.windowLow = min; + volume.windowHigh = max2; + volume.dimensions = [headerObject.sizes[0], headerObject.sizes[1], headerObject.sizes[2]]; + volume.xLength = volume.dimensions[0]; + volume.yLength = volume.dimensions[1]; + volume.zLength = volume.dimensions[2]; + if (headerObject.vectors) { + const xIndex = headerObject.vectors.findIndex((vector) => vector[0] !== 0); + const yIndex = headerObject.vectors.findIndex((vector) => vector[1] !== 0); + const zIndex = headerObject.vectors.findIndex((vector) => vector[2] !== 0); + const axisOrder = []; + if (xIndex !== yIndex && xIndex !== zIndex && yIndex !== zIndex) { + axisOrder[xIndex] = "x"; + axisOrder[yIndex] = "y"; + axisOrder[zIndex] = "z"; + } else { + axisOrder[0] = "x"; + axisOrder[1] = "y"; + axisOrder[2] = "z"; + } + volume.axisOrder = axisOrder; + } else { + volume.axisOrder = ["x", "y", "z"]; + } + const spacingX = new Vector3().fromArray(headerObject.vectors[0]).length(); + const spacingY = new Vector3().fromArray(headerObject.vectors[1]).length(); + const spacingZ = new Vector3().fromArray(headerObject.vectors[2]).length(); + volume.spacing = [spacingX, spacingY, spacingZ]; + volume.matrix = new Matrix4(); + const transitionMatrix = new Matrix4(); + if (headerObject.space === "left-posterior-superior") { + transitionMatrix.set( + -1, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + } else if (headerObject.space === "left-anterior-superior") { + transitionMatrix.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 0, + 0, + 1 + ); + } + if (!headerObject.vectors) { + volume.matrix.set( + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ); + } else { + const v = headerObject.vectors; + const ijk_to_transition = new Matrix4().set( + v[0][0], + v[1][0], + v[2][0], + 0, + v[0][1], + v[1][1], + v[2][1], + 0, + v[0][2], + v[1][2], + v[2][2], + 0, + 0, + 0, + 0, + 1 + ); + const transition_to_ras = new Matrix4().multiplyMatrices(ijk_to_transition, transitionMatrix); + volume.matrix = transition_to_ras; + } + volume.inverseMatrix = new Matrix4(); + volume.inverseMatrix.copy(volume.matrix).invert(); + volume.RASDimensions = [ + Math.floor(volume.xLength * spacingX), + Math.floor(volume.yLength * spacingY), + Math.floor(volume.zLength * spacingZ) + ]; + if (volume.lowerThreshold === -Infinity) { + volume.lowerThreshold = min; + } + if (volume.upperThreshold === Infinity) { + volume.upperThreshold = max2; + } + return volume; + } + parseChars(array, start, end) { + if (start === void 0) { + start = 0; + } + if (end === void 0) { + end = array.length; + } + let output = ""; + let i = 0; + for (i = start; i < end; ++i) { + output += String.fromCharCode(array[i]); + } + return output; + } +}; +var _fieldFunctions = { + type: function(data2) { + switch (data2) { + case "uchar": + case "unsigned char": + case "uint8": + case "uint8_t": + this.__array = Uint8Array; + break; + case "signed char": + case "int8": + case "int8_t": + this.__array = Int8Array; + break; + case "short": + case "short int": + case "signed short": + case "signed short int": + case "int16": + case "int16_t": + this.__array = Int16Array; + break; + case "ushort": + case "unsigned short": + case "unsigned short int": + case "uint16": + case "uint16_t": + this.__array = Uint16Array; + break; + case "int": + case "signed int": + case "int32": + case "int32_t": + this.__array = Int32Array; + break; + case "uint": + case "unsigned int": + case "uint32": + case "uint32_t": + this.__array = Uint32Array; + break; + case "float": + this.__array = Float32Array; + break; + case "double": + this.__array = Float64Array; + break; + default: + throw new Error("Unsupported NRRD data type: " + data2); + } + return this.type = data2; + }, + endian: function(data2) { + return this.endian = data2; + }, + encoding: function(data2) { + return this.encoding = data2; + }, + dimension: function(data2) { + return this.dim = parseInt(data2, 10); + }, + sizes: function(data2) { + let i; + return this.sizes = function() { + const _ref = data2.split(/\s+/); + const _results = []; + for (let _i = 0, _len = _ref.length; _i < _len; _i++) { + i = _ref[_i]; + _results.push(parseInt(i, 10)); + } + return _results; + }(); + }, + space: function(data2) { + return this.space = data2; + }, + "space origin": function(data2) { + return this.space_origin = data2.split("(")[1].split(")")[0].split(","); + }, + "space directions": function(data2) { + let f, v; + const parts = data2.match(/\(.*?\)/g); + return this.vectors = function() { + const _results = []; + for (let _i = 0, _len = parts.length; _i < _len; _i++) { + v = parts[_i]; + _results.push(function() { + const _ref = v.slice(1, -1).split(/,/); + const _results2 = []; + for (let _j = 0, _len2 = _ref.length; _j < _len2; _j++) { + f = _ref[_j]; + _results2.push(parseFloat(f)); + } + return _results2; + }()); + } + return _results; + }(); + }, + spacings: function(data2) { + let f; + const parts = data2.split(/\s+/); + return this.spacings = function() { + const _results = []; + for (let _i = 0, _len = parts.length; _i < _len; _i++) { + f = parts[_i]; + _results.push(parseFloat(f)); + } + return _results; + }(); + } +}; + +// node_modules/three/examples/jsm/loaders/OBJLoader.js +var _object_pattern = /^[og]\s*(.+)?/; +var _material_library_pattern = /^mtllib /; +var _material_use_pattern = /^usemtl /; +var _map_use_pattern = /^usemap /; +var _face_vertex_data_separator_pattern = /\s+/; +var _vA = new Vector3(); +var _vB = new Vector3(); +var _vC = new Vector3(); +var _ab = new Vector3(); +var _cb = new Vector3(); +var _color = new Color(); +function ParserState() { + const state = { + objects: [], + object: {}, + vertices: [], + normals: [], + colors: [], + uvs: [], + materials: {}, + materialLibraries: [], + startObject: function(name2, fromDeclaration) { + if (this.object && this.object.fromDeclaration === false) { + this.object.name = name2; + this.object.fromDeclaration = fromDeclaration !== false; + return; + } + const previousMaterial = this.object && typeof this.object.currentMaterial === "function" ? this.object.currentMaterial() : void 0; + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + this.object = { + name: name2 || "", + fromDeclaration: fromDeclaration !== false, + geometry: { + vertices: [], + normals: [], + colors: [], + uvs: [], + hasUVIndices: false + }, + materials: [], + smooth: true, + startMaterial: function(name3, libraries) { + const previous = this._finalize(false); + if (previous && (previous.inherited || previous.groupCount <= 0)) { + this.materials.splice(previous.index, 1); + } + const material = { + index: this.materials.length, + name: name3 || "", + mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : "", + smooth: previous !== void 0 ? previous.smooth : this.smooth, + groupStart: previous !== void 0 ? previous.groupEnd : 0, + groupEnd: -1, + groupCount: -1, + inherited: false, + clone: function(index2) { + const cloned = { + index: typeof index2 === "number" ? index2 : this.index, + name: this.name, + mtllib: this.mtllib, + smooth: this.smooth, + groupStart: 0, + groupEnd: -1, + groupCount: -1, + inherited: false + }; + cloned.clone = this.clone.bind(cloned); + return cloned; + } + }; + this.materials.push(material); + return material; + }, + currentMaterial: function() { + if (this.materials.length > 0) { + return this.materials[this.materials.length - 1]; + } + return void 0; + }, + _finalize: function(end) { + const lastMultiMaterial = this.currentMaterial(); + if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) { + lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3; + lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart; + lastMultiMaterial.inherited = false; + } + if (end && this.materials.length > 1) { + for (let mi2 = this.materials.length - 1; mi2 >= 0; mi2--) { + if (this.materials[mi2].groupCount <= 0) { + this.materials.splice(mi2, 1); + } + } + } + if (end && this.materials.length === 0) { + this.materials.push({ + name: "", + smooth: this.smooth + }); + } + return lastMultiMaterial; + } + }; + if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === "function") { + const declared = previousMaterial.clone(0); + declared.inherited = true; + this.object.materials.push(declared); + } + this.objects.push(this.object); + }, + finalize: function() { + if (this.object && typeof this.object._finalize === "function") { + this.object._finalize(true); + } + }, + parseVertexIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 3) * 3; + }, + parseNormalIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 3) * 3; + }, + parseUVIndex: function(value2, len) { + const index2 = parseInt(value2, 10); + return (index2 >= 0 ? index2 - 1 : index2 + len / 2) * 2; + }, + addVertex: function(a2, b3, c2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addVertexPoint: function(a2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + }, + addVertexLine: function(a2) { + const src = this.vertices; + const dst = this.object.geometry.vertices; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + }, + addNormal: function(a2, b3, c2) { + const src = this.normals; + const dst = this.object.geometry.normals; + dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addFaceNormal: function(a2, b3, c2) { + const src = this.vertices; + const dst = this.object.geometry.normals; + _vA.fromArray(src, a2); + _vB.fromArray(src, b3); + _vC.fromArray(src, c2); + _cb.subVectors(_vC, _vB); + _ab.subVectors(_vA, _vB); + _cb.cross(_ab); + _cb.normalize(); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + dst.push(_cb.x, _cb.y, _cb.z); + }, + addColor: function(a2, b3, c2) { + const src = this.colors; + const dst = this.object.geometry.colors; + if (src[a2] !== void 0) dst.push(src[a2 + 0], src[a2 + 1], src[a2 + 2]); + if (src[b3] !== void 0) dst.push(src[b3 + 0], src[b3 + 1], src[b3 + 2]); + if (src[c2] !== void 0) dst.push(src[c2 + 0], src[c2 + 1], src[c2 + 2]); + }, + addUV: function(a2, b3, c2) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a2 + 0], src[a2 + 1]); + dst.push(src[b3 + 0], src[b3 + 1]); + dst.push(src[c2 + 0], src[c2 + 1]); + }, + addDefaultUV: function() { + const dst = this.object.geometry.uvs; + dst.push(0, 0); + dst.push(0, 0); + dst.push(0, 0); + }, + addUVLine: function(a2) { + const src = this.uvs; + const dst = this.object.geometry.uvs; + dst.push(src[a2 + 0], src[a2 + 1]); + }, + addFace: function(a2, b3, c2, ua, ub, uc, na, nb, nc) { + const vLen = this.vertices.length; + let ia2 = this.parseVertexIndex(a2, vLen); + let ib = this.parseVertexIndex(b3, vLen); + let ic = this.parseVertexIndex(c2, vLen); + this.addVertex(ia2, ib, ic); + this.addColor(ia2, ib, ic); + if (na !== void 0 && na !== "") { + const nLen = this.normals.length; + ia2 = this.parseNormalIndex(na, nLen); + ib = this.parseNormalIndex(nb, nLen); + ic = this.parseNormalIndex(nc, nLen); + this.addNormal(ia2, ib, ic); + } else { + this.addFaceNormal(ia2, ib, ic); + } + if (ua !== void 0 && ua !== "") { + const uvLen = this.uvs.length; + ia2 = this.parseUVIndex(ua, uvLen); + ib = this.parseUVIndex(ub, uvLen); + ic = this.parseUVIndex(uc, uvLen); + this.addUV(ia2, ib, ic); + this.object.geometry.hasUVIndices = true; + } else { + this.addDefaultUV(); + } + }, + addPointGeometry: function(vertices) { + this.object.geometry.type = "Points"; + const vLen = this.vertices.length; + for (let vi = 0, l2 = vertices.length; vi < l2; vi++) { + const index2 = this.parseVertexIndex(vertices[vi], vLen); + this.addVertexPoint(index2); + this.addColor(index2); + } + }, + addLineGeometry: function(vertices, uvs) { + this.object.geometry.type = "Line"; + const vLen = this.vertices.length; + const uvLen = this.uvs.length; + for (let vi = 0, l2 = vertices.length; vi < l2; vi++) { + this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen)); + } + for (let uvi = 0, l2 = uvs.length; uvi < l2; uvi++) { + this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen)); + } + } + }; + state.startObject("", false); + return state; +} +var OBJLoader = class extends Loader { + constructor(manager) { + super(manager); + this.materials = null; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setMaterials(materials) { + this.materials = materials; + return this; + } + parse(text2) { + const state = new ParserState(); + if (text2.indexOf("\r\n") !== -1) { + text2 = text2.replace(/\r\n/g, "\n"); + } + if (text2.indexOf("\\\n") !== -1) { + text2 = text2.replace(/\\\n/g, ""); + } + const lines = text2.split("\n"); + let result = []; + for (let i = 0, l2 = lines.length; i < l2; i++) { + const line2 = lines[i].trimStart(); + if (line2.length === 0) continue; + const lineFirstChar = line2.charAt(0); + if (lineFirstChar === "#") continue; + if (lineFirstChar === "v") { + const data2 = line2.split(_face_vertex_data_separator_pattern); + switch (data2[0]) { + case "v": + state.vertices.push( + parseFloat(data2[1]), + parseFloat(data2[2]), + parseFloat(data2[3]) + ); + if (data2.length >= 7) { + _color.setRGB( + parseFloat(data2[4]), + parseFloat(data2[5]), + parseFloat(data2[6]) + ).convertSRGBToLinear(); + state.colors.push(_color.r, _color.g, _color.b); + } else { + state.colors.push(void 0, void 0, void 0); + } + break; + case "vn": + state.normals.push( + parseFloat(data2[1]), + parseFloat(data2[2]), + parseFloat(data2[3]) + ); + break; + case "vt": + state.uvs.push( + parseFloat(data2[1]), + parseFloat(data2[2]) + ); + break; + } + } else if (lineFirstChar === "f") { + const lineData = line2.slice(1).trim(); + const vertexData = lineData.split(_face_vertex_data_separator_pattern); + const faceVertices = []; + for (let j = 0, jl = vertexData.length; j < jl; j++) { + const vertex = vertexData[j]; + if (vertex.length > 0) { + const vertexParts = vertex.split("/"); + faceVertices.push(vertexParts); + } + } + const v12 = faceVertices[0]; + for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) { + const v2 = faceVertices[j]; + const v3 = faceVertices[j + 1]; + state.addFace( + v12[0], + v2[0], + v3[0], + v12[1], + v2[1], + v3[1], + v12[2], + v2[2], + v3[2] + ); + } + } else if (lineFirstChar === "l") { + const lineParts = line2.substring(1).trim().split(" "); + let lineVertices = []; + const lineUVs = []; + if (line2.indexOf("/") === -1) { + lineVertices = lineParts; + } else { + for (let li = 0, llen = lineParts.length; li < llen; li++) { + const parts = lineParts[li].split("/"); + if (parts[0] !== "") lineVertices.push(parts[0]); + if (parts[1] !== "") lineUVs.push(parts[1]); + } + } + state.addLineGeometry(lineVertices, lineUVs); + } else if (lineFirstChar === "p") { + const lineData = line2.slice(1).trim(); + const pointData = lineData.split(" "); + state.addPointGeometry(pointData); + } else if ((result = _object_pattern.exec(line2)) !== null) { + const name2 = (" " + result[0].slice(1).trim()).slice(1); + state.startObject(name2); + } else if (_material_use_pattern.test(line2)) { + state.object.startMaterial(line2.substring(7).trim(), state.materialLibraries); + } else if (_material_library_pattern.test(line2)) { + state.materialLibraries.push(line2.substring(7).trim()); + } else if (_map_use_pattern.test(line2)) { + console.warn('THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.'); + } else if (lineFirstChar === "s") { + result = line2.split(" "); + if (result.length > 1) { + const value2 = result[1].trim().toLowerCase(); + state.object.smooth = value2 !== "0" && value2 !== "off"; + } else { + state.object.smooth = true; + } + const material = state.object.currentMaterial(); + if (material) material.smooth = state.object.smooth; + } else { + if (line2 === "\0") continue; + console.warn('THREE.OBJLoader: Unexpected line: "' + line2 + '"'); + } + } + state.finalize(); + const container = new Group(); + container.materialLibraries = [].concat(state.materialLibraries); + const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0); + if (hasPrimitives === true) { + for (let i = 0, l2 = state.objects.length; i < l2; i++) { + const object = state.objects[i]; + const geometry = object.geometry; + const materials = object.materials; + const isLine = geometry.type === "Line"; + const isPoints = geometry.type === "Points"; + let hasVertexColors = false; + if (geometry.vertices.length === 0) continue; + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(geometry.vertices, 3)); + if (geometry.normals.length > 0) { + buffergeometry.setAttribute("normal", new Float32BufferAttribute(geometry.normals, 3)); + } + if (geometry.colors.length > 0) { + hasVertexColors = true; + buffergeometry.setAttribute("color", new Float32BufferAttribute(geometry.colors, 3)); + } + if (geometry.hasUVIndices === true) { + buffergeometry.setAttribute("uv", new Float32BufferAttribute(geometry.uvs, 2)); + } + const createdMaterials = []; + for (let mi2 = 0, miLen = materials.length; mi2 < miLen; mi2++) { + const sourceMaterial = materials[mi2]; + const materialHash = sourceMaterial.name + "_" + sourceMaterial.smooth + "_" + hasVertexColors; + let material = state.materials[materialHash]; + if (this.materials !== null) { + material = this.materials.create(sourceMaterial.name); + if (isLine && material && !(material instanceof LineBasicMaterial)) { + const materialLine = new LineBasicMaterial(); + Material.prototype.copy.call(materialLine, material); + materialLine.color.copy(material.color); + material = materialLine; + } else if (isPoints && material && !(material instanceof PointsMaterial)) { + const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false }); + Material.prototype.copy.call(materialPoints, material); + materialPoints.color.copy(material.color); + materialPoints.map = material.map; + material = materialPoints; + } + } + if (material === void 0) { + if (isLine) { + material = new LineBasicMaterial(); + } else if (isPoints) { + material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + } else { + material = new MeshPhongMaterial(); + } + material.name = sourceMaterial.name; + material.flatShading = sourceMaterial.smooth ? false : true; + material.vertexColors = hasVertexColors; + state.materials[materialHash] = material; + } + createdMaterials.push(material); + } + let mesh; + if (createdMaterials.length > 1) { + for (let mi2 = 0, miLen = materials.length; mi2 < miLen; mi2++) { + const sourceMaterial = materials[mi2]; + buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi2); + } + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials); + } else { + mesh = new Mesh(buffergeometry, createdMaterials); + } + } else { + if (isLine) { + mesh = new LineSegments(buffergeometry, createdMaterials[0]); + } else if (isPoints) { + mesh = new Points(buffergeometry, createdMaterials[0]); + } else { + mesh = new Mesh(buffergeometry, createdMaterials[0]); + } + } + mesh.name = object.name; + container.add(mesh); + } + } else { + if (state.vertices.length > 0) { + const material = new PointsMaterial({ size: 1, sizeAttenuation: false }); + const buffergeometry = new BufferGeometry(); + buffergeometry.setAttribute("position", new Float32BufferAttribute(state.vertices, 3)); + if (state.colors.length > 0 && state.colors[0] !== void 0) { + buffergeometry.setAttribute("color", new Float32BufferAttribute(state.colors, 3)); + material.vertexColors = true; + } + const points = new Points(buffergeometry, material); + container.add(points); + } + } + return container; + } +}; + +// node_modules/three/examples/jsm/loaders/PCDLoader.js +var PCDLoader = class extends Loader { + constructor(manager) { + super(manager); + this.littleEndian = true; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function decompressLZF(inData, outLength) { + const inLength = inData.length; + const outData = new Uint8Array(outLength); + let inPtr = 0; + let outPtr = 0; + let ctrl; + let len; + let ref; + do { + ctrl = inData[inPtr++]; + if (ctrl < 1 << 5) { + ctrl++; + if (outPtr + ctrl > outLength) throw new Error("Output buffer is not large enough"); + if (inPtr + ctrl > inLength) throw new Error("Invalid compressed data"); + do { + outData[outPtr++] = inData[inPtr++]; + } while (--ctrl); + } else { + len = ctrl >> 5; + ref = outPtr - ((ctrl & 31) << 8) - 1; + if (inPtr >= inLength) throw new Error("Invalid compressed data"); + if (len === 7) { + len += inData[inPtr++]; + if (inPtr >= inLength) throw new Error("Invalid compressed data"); + } + ref -= inData[inPtr++]; + if (outPtr + len + 2 > outLength) throw new Error("Output buffer is not large enough"); + if (ref < 0) throw new Error("Invalid compressed data"); + if (ref >= outPtr) throw new Error("Invalid compressed data"); + do { + outData[outPtr++] = outData[ref++]; + } while (--len + 2); + } + } while (inPtr < inLength); + return outData; + } + function parseHeader(data3) { + const PCDheader2 = {}; + const result1 = data3.search(/[\r\n]DATA\s(\S*)\s/i); + const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data3.slice(result1 - 1)); + PCDheader2.data = result2[1]; + PCDheader2.headerLen = result2[0].length + result1; + PCDheader2.str = data3.slice(0, PCDheader2.headerLen); + PCDheader2.str = PCDheader2.str.replace(/#.*/gi, ""); + PCDheader2.version = /VERSION (.*)/i.exec(PCDheader2.str); + PCDheader2.fields = /FIELDS (.*)/i.exec(PCDheader2.str); + PCDheader2.size = /SIZE (.*)/i.exec(PCDheader2.str); + PCDheader2.type = /TYPE (.*)/i.exec(PCDheader2.str); + PCDheader2.count = /COUNT (.*)/i.exec(PCDheader2.str); + PCDheader2.width = /WIDTH (.*)/i.exec(PCDheader2.str); + PCDheader2.height = /HEIGHT (.*)/i.exec(PCDheader2.str); + PCDheader2.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader2.str); + PCDheader2.points = /POINTS (.*)/i.exec(PCDheader2.str); + if (PCDheader2.version !== null) + PCDheader2.version = parseFloat(PCDheader2.version[1]); + PCDheader2.fields = PCDheader2.fields !== null ? PCDheader2.fields[1].split(" ") : []; + if (PCDheader2.type !== null) + PCDheader2.type = PCDheader2.type[1].split(" "); + if (PCDheader2.width !== null) + PCDheader2.width = parseInt(PCDheader2.width[1]); + if (PCDheader2.height !== null) + PCDheader2.height = parseInt(PCDheader2.height[1]); + if (PCDheader2.viewpoint !== null) + PCDheader2.viewpoint = PCDheader2.viewpoint[1]; + if (PCDheader2.points !== null) + PCDheader2.points = parseInt(PCDheader2.points[1], 10); + if (PCDheader2.points === null) + PCDheader2.points = PCDheader2.width * PCDheader2.height; + if (PCDheader2.size !== null) { + PCDheader2.size = PCDheader2.size[1].split(" ").map(function(x2) { + return parseInt(x2, 10); + }); + } + if (PCDheader2.count !== null) { + PCDheader2.count = PCDheader2.count[1].split(" ").map(function(x2) { + return parseInt(x2, 10); + }); + } else { + PCDheader2.count = []; + for (let i = 0, l2 = PCDheader2.fields.length; i < l2; i++) { + PCDheader2.count.push(1); + } + } + PCDheader2.offset = {}; + let sizeSum = 0; + for (let i = 0, l2 = PCDheader2.fields.length; i < l2; i++) { + if (PCDheader2.data === "ascii") { + PCDheader2.offset[PCDheader2.fields[i]] = i; + } else { + PCDheader2.offset[PCDheader2.fields[i]] = sizeSum; + sizeSum += PCDheader2.size[i] * PCDheader2.count[i]; + } + } + PCDheader2.rowSize = sizeSum; + return PCDheader2; + } + const textData = new TextDecoder().decode(data2); + const PCDheader = parseHeader(textData); + const position2 = []; + const normal = []; + const color = []; + const intensity = []; + const label = []; + const c2 = new Color(); + if (PCDheader.data === "ascii") { + const offset = PCDheader.offset; + const pcdData = textData.slice(PCDheader.headerLen); + const lines = pcdData.split("\n"); + for (let i = 0, l2 = lines.length; i < l2; i++) { + if (lines[i] === "") continue; + const line2 = lines[i].split(" "); + if (offset.x !== void 0) { + position2.push(parseFloat(line2[offset.x])); + position2.push(parseFloat(line2[offset.y])); + position2.push(parseFloat(line2[offset.z])); + } + if (offset.rgb !== void 0) { + const rgb_field_index = PCDheader.fields.findIndex((field) => field === "rgb"); + const rgb_type = PCDheader.type[rgb_field_index]; + const float = parseFloat(line2[offset.rgb]); + let rgb = float; + if (rgb_type === "F") { + const farr = new Float32Array(1); + farr[0] = float; + rgb = new Int32Array(farr.buffer)[0]; + } + const r = (rgb >> 16 & 255) / 255; + const g2 = (rgb >> 8 & 255) / 255; + const b3 = (rgb >> 0 & 255) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + normal.push(parseFloat(line2[offset.normal_x])); + normal.push(parseFloat(line2[offset.normal_y])); + normal.push(parseFloat(line2[offset.normal_z])); + } + if (offset.intensity !== void 0) { + intensity.push(parseFloat(line2[offset.intensity])); + } + if (offset.label !== void 0) { + label.push(parseInt(line2[offset.label])); + } + } + } + if (PCDheader.data === "binary_compressed") { + const sizes = new Uint32Array(data2.slice(PCDheader.headerLen, PCDheader.headerLen + 8)); + const compressedSize = sizes[0]; + const decompressedSize = sizes[1]; + const decompressed = decompressLZF(new Uint8Array(data2, PCDheader.headerLen + 8, compressedSize), decompressedSize); + const dataview = new DataView(decompressed.buffer); + const offset = PCDheader.offset; + for (let i = 0; i < PCDheader.points; i++) { + if (offset.x !== void 0) { + const xIndex = PCDheader.fields.indexOf("x"); + const yIndex = PCDheader.fields.indexOf("y"); + const zIndex = PCDheader.fields.indexOf("z"); + position2.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[xIndex] * i, this.littleEndian)); + position2.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[yIndex] * i, this.littleEndian)); + position2.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[zIndex] * i, this.littleEndian)); + } + if (offset.rgb !== void 0) { + const rgbIndex = PCDheader.fields.indexOf("rgb"); + const r = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 2) / 255; + const g2 = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 1) / 255; + const b3 = dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[rgbIndex] * i + 0) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + const xIndex = PCDheader.fields.indexOf("normal_x"); + const yIndex = PCDheader.fields.indexOf("normal_y"); + const zIndex = PCDheader.fields.indexOf("normal_z"); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[xIndex] * i, this.littleEndian)); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[yIndex] * i, this.littleEndian)); + normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[zIndex] * i, this.littleEndian)); + } + if (offset.intensity !== void 0) { + const intensityIndex = PCDheader.fields.indexOf("intensity"); + intensity.push(dataview.getFloat32(PCDheader.points * offset.intensity + PCDheader.size[intensityIndex] * i, this.littleEndian)); + } + if (offset.label !== void 0) { + const labelIndex = PCDheader.fields.indexOf("label"); + label.push(dataview.getInt32(PCDheader.points * offset.label + PCDheader.size[labelIndex] * i, this.littleEndian)); + } + } + } + if (PCDheader.data === "binary") { + const dataview = new DataView(data2, PCDheader.headerLen); + const offset = PCDheader.offset; + for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) { + if (offset.x !== void 0) { + position2.push(dataview.getFloat32(row + offset.x, this.littleEndian)); + position2.push(dataview.getFloat32(row + offset.y, this.littleEndian)); + position2.push(dataview.getFloat32(row + offset.z, this.littleEndian)); + } + if (offset.rgb !== void 0) { + const r = dataview.getUint8(row + offset.rgb + 2) / 255; + const g2 = dataview.getUint8(row + offset.rgb + 1) / 255; + const b3 = dataview.getUint8(row + offset.rgb + 0) / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + color.push(c2.r, c2.g, c2.b); + } + if (offset.normal_x !== void 0) { + normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian)); + normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian)); + normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian)); + } + if (offset.intensity !== void 0) { + intensity.push(dataview.getFloat32(row + offset.intensity, this.littleEndian)); + } + if (offset.label !== void 0) { + label.push(dataview.getInt32(row + offset.label, this.littleEndian)); + } + } + } + const geometry = new BufferGeometry(); + if (position2.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position2, 3)); + if (normal.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal, 3)); + if (color.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color, 3)); + if (intensity.length > 0) geometry.setAttribute("intensity", new Float32BufferAttribute(intensity, 1)); + if (label.length > 0) geometry.setAttribute("label", new Int32BufferAttribute(label, 1)); + geometry.computeBoundingSphere(); + const material = new PointsMaterial({ size: 5e-3 }); + if (color.length > 0) { + material.vertexColors = true; + } + return new Points(geometry, material); + } +}; + +// node_modules/three/examples/jsm/loaders/PDBLoader.js +var PDBLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + // Based on CanvasMol PDB parser + parse(text2) { + function trim(text3) { + return text3.replace(/^\s\s*/, "").replace(/\s\s*$/, ""); + } + function capitalize(text3) { + return text3.charAt(0).toUpperCase() + text3.slice(1).toLowerCase(); + } + function hash(s, e) { + return "s" + Math.min(s, e) + "e" + Math.max(s, e); + } + function parseBond(start, length2, satom, i) { + const eatom = parseInt(lines[i].slice(start, start + length2)); + if (eatom) { + const h = hash(satom, eatom); + if (_bhash[h] === void 0) { + _bonds.push([satom - 1, eatom - 1, 1]); + _bhash[h] = _bonds.length - 1; + } else { + } + } + } + function buildGeometry() { + const build = { + geometryAtoms: new BufferGeometry(), + geometryBonds: new BufferGeometry(), + json: { + atoms + } + }; + const geometryAtoms = build.geometryAtoms; + const geometryBonds = build.geometryBonds; + const verticesAtoms = []; + const colorsAtoms = []; + const verticesBonds = []; + const c2 = new Color(); + for (let i = 0, l2 = atoms.length; i < l2; i++) { + const atom = atoms[i]; + const x2 = atom[0]; + const y2 = atom[1]; + const z = atom[2]; + verticesAtoms.push(x2, y2, z); + const r = atom[3][0] / 255; + const g2 = atom[3][1] / 255; + const b3 = atom[3][2] / 255; + c2.set(r, g2, b3).convertSRGBToLinear(); + colorsAtoms.push(c2.r, c2.g, c2.b); + } + for (let i = 0, l2 = _bonds.length; i < l2; i++) { + const bond = _bonds[i]; + const start = bond[0]; + const end = bond[1]; + const startAtom = _atomMap[start]; + const endAtom = _atomMap[end]; + let x2 = startAtom[0]; + let y2 = startAtom[1]; + let z = startAtom[2]; + verticesBonds.push(x2, y2, z); + x2 = endAtom[0]; + y2 = endAtom[1]; + z = endAtom[2]; + verticesBonds.push(x2, y2, z); + } + geometryAtoms.setAttribute("position", new Float32BufferAttribute(verticesAtoms, 3)); + geometryAtoms.setAttribute("color", new Float32BufferAttribute(colorsAtoms, 3)); + geometryBonds.setAttribute("position", new Float32BufferAttribute(verticesBonds, 3)); + return build; + } + const 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] }; + const atoms = []; + const _bonds = []; + const _bhash = {}; + const _atomMap = {}; + const lines = text2.split("\n"); + for (let i = 0, l2 = lines.length; i < l2; i++) { + if (lines[i].slice(0, 4) === "ATOM" || lines[i].slice(0, 6) === "HETATM") { + const x2 = parseFloat(lines[i].slice(30, 37)); + const y2 = parseFloat(lines[i].slice(38, 45)); + const z = parseFloat(lines[i].slice(46, 53)); + const index2 = parseInt(lines[i].slice(6, 11)) - 1; + let e = trim(lines[i].slice(76, 78)).toLowerCase(); + if (e === "") { + e = trim(lines[i].slice(12, 14)).toLowerCase(); + } + const atomData = [x2, y2, z, CPK[e], capitalize(e)]; + atoms.push(atomData); + _atomMap[index2] = atomData; + } else if (lines[i].slice(0, 6) === "CONECT") { + const satom = parseInt(lines[i].slice(6, 11)); + parseBond(11, 5, satom, i); + parseBond(16, 5, satom, i); + parseBond(21, 5, satom, i); + parseBond(26, 5, satom, i); + } + } + return buildGeometry(); + } +}; + +// node_modules/three/examples/jsm/loaders/PLYLoader.js +var _color2 = new Color(); +var PLYLoader = class extends Loader { + constructor(manager) { + super(manager); + this.propertyNameMapping = {}; + this.customPropertyMapping = {}; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + setPropertyNameMapping(mapping) { + this.propertyNameMapping = mapping; + } + setCustomPropertyNameMapping(mapping) { + this.customPropertyMapping = mapping; + } + parse(data2) { + function parseHeader(data3, headerLength = 0) { + const patternHeader = /^ply([\s\S]*)end_header(\r\n|\r|\n)/; + let headerText = ""; + const result = patternHeader.exec(data3); + if (result !== null) { + headerText = result[1]; + } + const header = { + comments: [], + elements: [], + headerLength, + objInfo: "" + }; + const lines = headerText.split(/\r\n|\r|\n/); + let currentElement; + function make_ply_element_property(propertValues, propertyNameMapping) { + const property2 = { type: propertValues[0] }; + if (property2.type === "list") { + property2.name = propertValues[3]; + property2.countType = propertValues[1]; + property2.itemType = propertValues[2]; + } else { + property2.name = propertValues[1]; + } + if (property2.name in propertyNameMapping) { + property2.name = propertyNameMapping[property2.name]; + } + return property2; + } + for (let i = 0; i < lines.length; i++) { + let line2 = lines[i]; + line2 = line2.trim(); + if (line2 === "") continue; + const lineValues = line2.split(/\s+/); + const lineType = lineValues.shift(); + line2 = lineValues.join(" "); + switch (lineType) { + case "format": + header.format = lineValues[0]; + header.version = lineValues[1]; + break; + case "comment": + header.comments.push(line2); + break; + case "element": + if (currentElement !== void 0) { + header.elements.push(currentElement); + } + currentElement = {}; + currentElement.name = lineValues[0]; + currentElement.count = parseInt(lineValues[1]); + currentElement.properties = []; + break; + case "property": + currentElement.properties.push(make_ply_element_property(lineValues, scope.propertyNameMapping)); + break; + case "obj_info": + header.objInfo = line2; + break; + default: + console.log("unhandled", lineType, lineValues); + } + } + if (currentElement !== void 0) { + header.elements.push(currentElement); + } + return header; + } + function parseASCIINumber(n2, type) { + switch (type) { + case "char": + case "uchar": + case "short": + case "ushort": + case "int": + case "uint": + case "int8": + case "uint8": + case "int16": + case "uint16": + case "int32": + case "uint32": + return parseInt(n2); + case "float": + case "double": + case "float32": + case "float64": + return parseFloat(n2); + } + } + function parseASCIIElement(properties, tokens) { + const element = {}; + for (let i = 0; i < properties.length; i++) { + if (tokens.empty()) return null; + if (properties[i].type === "list") { + const list = []; + const n2 = parseASCIINumber(tokens.next(), properties[i].countType); + for (let j = 0; j < n2; j++) { + if (tokens.empty()) return null; + list.push(parseASCIINumber(tokens.next(), properties[i].itemType)); + } + element[properties[i].name] = list; + } else { + element[properties[i].name] = parseASCIINumber(tokens.next(), properties[i].type); + } + } + return element; + } + function createBuffer() { + const buffer = { + indices: [], + vertices: [], + normals: [], + uvs: [], + faceVertexUvs: [], + colors: [], + faceVertexColors: [] + }; + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + buffer[customProperty] = []; + } + return buffer; + } + function mapElementAttributes(properties) { + const elementNames = properties.map((property2) => { + return property2.name; + }); + function findAttrName(names) { + for (let i = 0, l2 = names.length; i < l2; i++) { + const name2 = names[i]; + if (elementNames.includes(name2)) return name2; + } + return null; + } + return { + attrX: findAttrName(["x", "px", "posx"]) || "x", + attrY: findAttrName(["y", "py", "posy"]) || "y", + attrZ: findAttrName(["z", "pz", "posz"]) || "z", + attrNX: findAttrName(["nx", "normalx"]), + attrNY: findAttrName(["ny", "normaly"]), + attrNZ: findAttrName(["nz", "normalz"]), + attrS: findAttrName(["s", "u", "texture_u", "tx"]), + attrT: findAttrName(["t", "v", "texture_v", "ty"]), + attrR: findAttrName(["red", "diffuse_red", "r", "diffuse_r"]), + attrG: findAttrName(["green", "diffuse_green", "g", "diffuse_g"]), + attrB: findAttrName(["blue", "diffuse_blue", "b", "diffuse_b"]) + }; + } + function parseASCII(data3, header) { + const buffer = createBuffer(); + const patternBody = /end_header\s+(\S[\s\S]*\S|\S)\s*$/; + let body, matches; + if ((matches = patternBody.exec(data3)) !== null) { + body = matches[1].split(/\s+/); + } else { + body = []; + } + const tokens = new ArrayStream(body); + loop: for (let i = 0; i < header.elements.length; i++) { + const elementDesc = header.elements[i]; + const attributeMap = mapElementAttributes(elementDesc.properties); + for (let j = 0; j < elementDesc.count; j++) { + const element = parseASCIIElement(elementDesc.properties, tokens); + if (!element) break loop; + handleElement(buffer, elementDesc.name, element, attributeMap); + } + } + return postProcess(buffer); + } + function postProcess(buffer) { + let geometry2 = new BufferGeometry(); + if (buffer.indices.length > 0) { + geometry2.setIndex(buffer.indices); + } + geometry2.setAttribute("position", new Float32BufferAttribute(buffer.vertices, 3)); + if (buffer.normals.length > 0) { + geometry2.setAttribute("normal", new Float32BufferAttribute(buffer.normals, 3)); + } + if (buffer.uvs.length > 0) { + geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.uvs, 2)); + } + if (buffer.colors.length > 0) { + geometry2.setAttribute("color", new Float32BufferAttribute(buffer.colors, 3)); + } + if (buffer.faceVertexUvs.length > 0 || buffer.faceVertexColors.length > 0) { + geometry2 = geometry2.toNonIndexed(); + if (buffer.faceVertexUvs.length > 0) geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.faceVertexUvs, 2)); + if (buffer.faceVertexColors.length > 0) geometry2.setAttribute("color", new Float32BufferAttribute(buffer.faceVertexColors, 3)); + } + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + if (buffer[customProperty].length > 0) { + geometry2.setAttribute( + customProperty, + new Float32BufferAttribute( + buffer[customProperty], + scope.customPropertyMapping[customProperty].length + ) + ); + } + } + geometry2.computeBoundingSphere(); + return geometry2; + } + function handleElement(buffer, elementName, element, cacheEntry) { + if (elementName === "vertex") { + buffer.vertices.push(element[cacheEntry.attrX], element[cacheEntry.attrY], element[cacheEntry.attrZ]); + if (cacheEntry.attrNX !== null && cacheEntry.attrNY !== null && cacheEntry.attrNZ !== null) { + buffer.normals.push(element[cacheEntry.attrNX], element[cacheEntry.attrNY], element[cacheEntry.attrNZ]); + } + if (cacheEntry.attrS !== null && cacheEntry.attrT !== null) { + buffer.uvs.push(element[cacheEntry.attrS], element[cacheEntry.attrT]); + } + if (cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null) { + _color2.setRGB( + element[cacheEntry.attrR] / 255, + element[cacheEntry.attrG] / 255, + element[cacheEntry.attrB] / 255 + ).convertSRGBToLinear(); + buffer.colors.push(_color2.r, _color2.g, _color2.b); + } + for (const customProperty of Object.keys(scope.customPropertyMapping)) { + for (const elementProperty of scope.customPropertyMapping[customProperty]) { + buffer[customProperty].push(element[elementProperty]); + } + } + } else if (elementName === "face") { + const vertex_indices = element.vertex_indices || element.vertex_index; + const texcoord = element.texcoord; + if (vertex_indices.length === 3) { + buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[2]); + if (texcoord && texcoord.length === 6) { + buffer.faceVertexUvs.push(texcoord[0], texcoord[1]); + buffer.faceVertexUvs.push(texcoord[2], texcoord[3]); + buffer.faceVertexUvs.push(texcoord[4], texcoord[5]); + } + } else if (vertex_indices.length === 4) { + buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[3]); + buffer.indices.push(vertex_indices[1], vertex_indices[2], vertex_indices[3]); + } + if (cacheEntry.attrR !== null && cacheEntry.attrG !== null && cacheEntry.attrB !== null) { + _color2.setRGB( + element[cacheEntry.attrR] / 255, + element[cacheEntry.attrG] / 255, + element[cacheEntry.attrB] / 255 + ).convertSRGBToLinear(); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + buffer.faceVertexColors.push(_color2.r, _color2.g, _color2.b); + } + } + } + function binaryReadElement(at, properties) { + const element = {}; + let read = 0; + for (let i = 0; i < properties.length; i++) { + const property2 = properties[i]; + const valueReader = property2.valueReader; + if (property2.type === "list") { + const list = []; + const n2 = property2.countReader.read(at + read); + read += property2.countReader.size; + for (let j = 0; j < n2; j++) { + list.push(valueReader.read(at + read)); + read += valueReader.size; + } + element[property2.name] = list; + } else { + element[property2.name] = valueReader.read(at + read); + read += valueReader.size; + } + } + return [element, read]; + } + function setPropertyBinaryReaders(properties, body, little_endian) { + function getBinaryReader(dataview, type, little_endian2) { + switch (type) { + case "int8": + case "char": + return { read: (at) => { + return dataview.getInt8(at); + }, size: 1 }; + case "uint8": + case "uchar": + return { read: (at) => { + return dataview.getUint8(at); + }, size: 1 }; + case "int16": + case "short": + return { read: (at) => { + return dataview.getInt16(at, little_endian2); + }, size: 2 }; + case "uint16": + case "ushort": + return { read: (at) => { + return dataview.getUint16(at, little_endian2); + }, size: 2 }; + case "int32": + case "int": + return { read: (at) => { + return dataview.getInt32(at, little_endian2); + }, size: 4 }; + case "uint32": + case "uint": + return { read: (at) => { + return dataview.getUint32(at, little_endian2); + }, size: 4 }; + case "float32": + case "float": + return { read: (at) => { + return dataview.getFloat32(at, little_endian2); + }, size: 4 }; + case "float64": + case "double": + return { read: (at) => { + return dataview.getFloat64(at, little_endian2); + }, size: 8 }; + } + } + for (let i = 0, l2 = properties.length; i < l2; i++) { + const property2 = properties[i]; + if (property2.type === "list") { + property2.countReader = getBinaryReader(body, property2.countType, little_endian); + property2.valueReader = getBinaryReader(body, property2.itemType, little_endian); + } else { + property2.valueReader = getBinaryReader(body, property2.type, little_endian); + } + } + } + function parseBinary(data3, header) { + const buffer = createBuffer(); + const little_endian = header.format === "binary_little_endian"; + const body = new DataView(data3, header.headerLength); + let result, loc = 0; + for (let currentElement = 0; currentElement < header.elements.length; currentElement++) { + const elementDesc = header.elements[currentElement]; + const properties = elementDesc.properties; + const attributeMap = mapElementAttributes(properties); + setPropertyBinaryReaders(properties, body, little_endian); + for (let currentElementCount = 0; currentElementCount < elementDesc.count; currentElementCount++) { + result = binaryReadElement(loc, properties); + loc += result[1]; + const element = result[0]; + handleElement(buffer, elementDesc.name, element, attributeMap); + } + } + return postProcess(buffer); + } + function extractHeaderText(bytes) { + let i = 0; + let cont = true; + let line2 = ""; + const lines = []; + const startLine = new TextDecoder().decode(bytes.subarray(0, 5)); + const hasCRNL = /^ply\r\n/.test(startLine); + do { + const c2 = String.fromCharCode(bytes[i++]); + if (c2 !== "\n" && c2 !== "\r") { + line2 += c2; + } else { + if (line2 === "end_header") cont = false; + if (line2 !== "") { + lines.push(line2); + line2 = ""; + } + } + } while (cont && i < bytes.length); + if (hasCRNL === true) i++; + return { headerText: lines.join("\r") + "\r", headerLength: i }; + } + let geometry; + const scope = this; + if (data2 instanceof ArrayBuffer) { + const bytes = new Uint8Array(data2); + const { headerText, headerLength } = extractHeaderText(bytes); + const header = parseHeader(headerText, headerLength); + if (header.format === "ascii") { + const text2 = new TextDecoder().decode(bytes); + geometry = parseASCII(text2, header); + } else { + geometry = parseBinary(data2, header); + } + } else { + geometry = parseASCII(data2, parseHeader(data2)); + } + return geometry; + } +}; +var ArrayStream = class { + constructor(arr) { + this.arr = arr; + this.i = 0; + } + empty() { + return this.i >= this.arr.length; + } + next() { + return this.arr[this.i++]; + } +}; + +// node_modules/three/examples/jsm/loaders/PVRLoader.js +var PVRLoader = class extends CompressedTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer, loadMipmaps) { + const headerLengthInt = 13; + const header = new Uint32Array(buffer, 0, headerLengthInt); + const pvrDatas = { + buffer, + header, + loadMipmaps + }; + if (header[0] === 55727696) { + return _parseV3(pvrDatas); + } else if (header[11] === 559044176) { + return _parseV2(pvrDatas); + } else { + console.error("THREE.PVRLoader: Unknown PVR format."); + } + } +}; +function _parseV3(pvrDatas) { + const header = pvrDatas.header; + let bpp, format; + const metaLen = header[12], pixelFormat = header[2], height2 = header[6], width2 = header[7], numFaces = header[10], numMipmaps = header[11]; + switch (pixelFormat) { + case 0: + bpp = 2; + format = RGB_PVRTC_2BPPV1_Format; + break; + case 1: + bpp = 2; + format = RGBA_PVRTC_2BPPV1_Format; + break; + case 2: + bpp = 4; + format = RGB_PVRTC_4BPPV1_Format; + break; + case 3: + bpp = 4; + format = RGBA_PVRTC_4BPPV1_Format; + break; + default: + console.error("THREE.PVRLoader: Unsupported PVR format:", pixelFormat); + } + pvrDatas.dataPtr = 52 + metaLen; + pvrDatas.bpp = bpp; + pvrDatas.format = format; + pvrDatas.width = width2; + pvrDatas.height = height2; + pvrDatas.numSurfaces = numFaces; + pvrDatas.numMipmaps = numMipmaps; + pvrDatas.isCubemap = numFaces === 6; + return _extract(pvrDatas); +} +function _parseV2(pvrDatas) { + const header = pvrDatas.header; + const headerLength = header[0], height2 = header[1], width2 = header[2], numMipmaps = header[3], flags = header[4], bitmaskAlpha = header[10], numSurfs = header[12]; + const TYPE_MASK = 255; + const PVRTC_2 = 24, PVRTC_4 = 25; + const formatFlags = flags & TYPE_MASK; + let bpp, format; + const _hasAlpha = bitmaskAlpha > 0; + if (formatFlags === PVRTC_4) { + format = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format; + bpp = 4; + } else if (formatFlags === PVRTC_2) { + format = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format; + bpp = 2; + } else { + console.error("THREE.PVRLoader: Unknown PVR format:", formatFlags); + } + pvrDatas.dataPtr = headerLength; + pvrDatas.bpp = bpp; + pvrDatas.format = format; + pvrDatas.width = width2; + pvrDatas.height = height2; + pvrDatas.numSurfaces = numSurfs; + pvrDatas.numMipmaps = numMipmaps + 1; + pvrDatas.isCubemap = numSurfs === 6; + return _extract(pvrDatas); +} +function _extract(pvrDatas) { + const pvr = { + mipmaps: [], + width: pvrDatas.width, + height: pvrDatas.height, + format: pvrDatas.format, + mipmapCount: pvrDatas.numMipmaps, + isCubemap: pvrDatas.isCubemap + }; + const buffer = pvrDatas.buffer; + let dataOffset = pvrDatas.dataPtr, dataSize = 0, blockSize = 0, blockWidth = 0, blockHeight = 0, widthBlocks = 0, heightBlocks = 0; + const bpp = pvrDatas.bpp, numSurfs = pvrDatas.numSurfaces; + if (bpp === 2) { + blockWidth = 8; + blockHeight = 4; + } else { + blockWidth = 4; + blockHeight = 4; + } + blockSize = blockWidth * blockHeight * bpp / 8; + pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs; + let mipLevel = 0; + while (mipLevel < pvrDatas.numMipmaps) { + const sWidth = pvrDatas.width >> mipLevel, sHeight = pvrDatas.height >> mipLevel; + widthBlocks = sWidth / blockWidth; + heightBlocks = sHeight / blockHeight; + if (widthBlocks < 2) widthBlocks = 2; + if (heightBlocks < 2) heightBlocks = 2; + dataSize = widthBlocks * heightBlocks * blockSize; + for (let surfIndex = 0; surfIndex < numSurfs; surfIndex++) { + const byteArray = new Uint8Array(buffer, dataOffset, dataSize); + const mipmap = { + data: byteArray, + width: sWidth, + height: sHeight + }; + pvr.mipmaps[surfIndex * pvrDatas.numMipmaps + mipLevel] = mipmap; + dataOffset += dataSize; + } + mipLevel++; + } + return pvr; +} + +// node_modules/three/examples/jsm/loaders/UltraHDRLoader.js +var SRGB_TO_LINEAR = Array(1024).fill(0).map( + (_, value2) => Math.pow(value2 / 255 * 0.9478672986 + 0.0521327014, 2.4) +); +var UltraHDRLoader = class extends Loader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + setDataType(value2) { + this.type = value2; + return this; + } + parse(buffer, onLoad) { + const xmpMetadata = { + version: null, + baseRenditionIsHDR: null, + gainMapMin: null, + gainMapMax: null, + gamma: null, + offsetSDR: null, + offsetHDR: null, + hdrCapacityMin: null, + hdrCapacityMax: null + }; + const textDecoder = new TextDecoder(); + const data2 = new DataView(buffer); + let byteOffset = 0; + const sections = []; + while (byteOffset < data2.byteLength) { + const byte = data2.getUint8(byteOffset); + if (byte === 255) { + const leadingByte = data2.getUint8(byteOffset + 1); + if ([ + /* Valid section headers */ + 216, + // SOI + 224, + // APP0 + 225, + // APP1 + 226 + // APP2 + ].includes(leadingByte)) { + sections.push({ + sectionType: leadingByte, + section: [byte, leadingByte], + sectionOffset: byteOffset + 2 + }); + byteOffset += 2; + } else { + sections[sections.length - 1].section.push(byte, leadingByte); + byteOffset += 2; + } + } else { + sections[sections.length - 1].section.push(byte); + byteOffset++; + } + } + let primaryImage, gainmapImage; + for (let i = 0; i < sections.length; i++) { + const { sectionType, section, sectionOffset } = sections[i]; + if (sectionType === 224) { + } else if (sectionType === 225) { + this._parseXMPMetadata( + textDecoder.decode(new Uint8Array(section)), + xmpMetadata + ); + } else if (sectionType === 226) { + const sectionData = new DataView( + new Uint8Array(section.slice(2)).buffer + ); + const sectionHeader = sectionData.getUint32(2, false); + if (sectionHeader === 1297106432) { + const mpfLittleEndian = sectionData.getUint32(6) === 1229531648; + const mpfBytesOffset = 60; + const primaryImageSize = sectionData.getUint32( + mpfBytesOffset, + mpfLittleEndian + ); + const primaryImageOffset = sectionData.getUint32( + mpfBytesOffset + 4, + mpfLittleEndian + ); + const gainmapImageSize = sectionData.getUint32( + mpfBytesOffset + 16, + mpfLittleEndian + ); + const gainmapImageOffset = sectionData.getUint32(mpfBytesOffset + 20, mpfLittleEndian) + sectionOffset + 6; + primaryImage = new Uint8Array( + data2.buffer, + primaryImageOffset, + primaryImageSize + ); + gainmapImage = new Uint8Array( + data2.buffer, + gainmapImageOffset, + gainmapImageSize + ); + } + } + } + if (!xmpMetadata.version) { + throw new Error("THREE.UltraHDRLoader: Not a valid UltraHDR image"); + } + if (primaryImage && gainmapImage) { + this._applyGainmapToSDR( + xmpMetadata, + primaryImage, + gainmapImage, + (hdrBuffer, width2, height2) => { + onLoad({ + width: width2, + height: height2, + data: hdrBuffer, + format: RGBAFormat, + type: this.type + }); + }, + (error) => { + throw new Error(error); + } + ); + } else { + throw new Error("THREE.UltraHDRLoader: Could not parse UltraHDR images"); + } + } + load(url, onLoad, onProgress, onError) { + const texture = new DataTexture( + this.type === HalfFloatType ? new Uint16Array() : new Float32Array(), + 0, + 0, + RGBAFormat, + this.type, + UVMapping, + ClampToEdgeWrapping, + ClampToEdgeWrapping, + LinearFilter, + LinearMipMapLinearFilter, + 1, + LinearSRGBColorSpace + ); + texture.generateMipmaps = true; + texture.flipY = true; + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setPath(this.path); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + try { + this.parse( + buffer, + (texData) => { + texture.image = { + data: texData.data, + width: texData.width, + height: texData.height + }; + texture.needsUpdate = true; + if (onLoad) onLoad(texture, texData); + } + ); + } catch (error) { + if (onError) onError(error); + console.error(error); + } + }, onProgress, onError); + return texture; + } + _parseXMPMetadata(xmpDataString, xmpMetadata) { + const domParser = new DOMParser(); + const xmpXml = domParser.parseFromString( + xmpDataString.substring( + xmpDataString.indexOf("<"), + xmpDataString.lastIndexOf(">") + 1 + ), + "text/xml" + ); + const [hasHDRContainerDescriptor] = xmpXml.getElementsByTagName( + "Container:Directory" + ); + if (hasHDRContainerDescriptor) { + } else { + const [gainmapNode] = xmpXml.getElementsByTagName("rdf:Description"); + xmpMetadata.version = gainmapNode.getAttribute("hdrgm:Version"); + xmpMetadata.baseRenditionIsHDR = gainmapNode.getAttribute("hdrgm:BaseRenditionIsHDR") === "True"; + xmpMetadata.gainMapMin = parseFloat( + gainmapNode.getAttribute("hdrgm:GainMapMin") || 0 + ); + xmpMetadata.gainMapMax = parseFloat( + gainmapNode.getAttribute("hdrgm:GainMapMax") || 1 + ); + xmpMetadata.gamma = parseFloat( + gainmapNode.getAttribute("hdrgm:Gamma") || 1 + ); + xmpMetadata.offsetSDR = parseFloat( + gainmapNode.getAttribute("hdrgm:OffsetSDR") / (1 / 64) + ); + xmpMetadata.offsetHDR = parseFloat( + gainmapNode.getAttribute("hdrgm:OffsetHDR") / (1 / 64) + ); + xmpMetadata.hdrCapacityMin = parseFloat( + gainmapNode.getAttribute("hdrgm:HDRCapacityMin") || 0 + ); + xmpMetadata.hdrCapacityMax = parseFloat( + gainmapNode.getAttribute("hdrgm:HDRCapacityMax") || 1 + ); + } + } + _srgbToLinear(value2) { + if (value2 / 255 < 0.04045) { + return value2 / 255 * 0.0773993808; + } + if (value2 < 1024) { + return SRGB_TO_LINEAR[~~value2]; + } + return Math.pow(value2 / 255 * 0.9478672986 + 0.0521327014, 2.4); + } + _applyGainmapToSDR(xmpMetadata, sdrBuffer, gainmapBuffer, onSuccess, onError) { + const getImageDataFromBuffer = (buffer) => new Promise((resolve, reject2) => { + const imageLoader = document.createElement("img"); + imageLoader.onload = () => { + const image = { + width: imageLoader.naturalWidth, + height: imageLoader.naturalHeight, + source: imageLoader + }; + URL.revokeObjectURL(imageLoader.src); + resolve(image); + }; + imageLoader.onerror = () => { + URL.revokeObjectURL(imageLoader.src); + reject2(); + }; + imageLoader.src = URL.createObjectURL( + new Blob([buffer], { type: "image/jpeg" }) + ); + }); + Promise.all([ + getImageDataFromBuffer(sdrBuffer), + getImageDataFromBuffer(gainmapBuffer) + ]).then(([sdrImage, gainmapImage]) => { + const sdrImageAspect = sdrImage.width / sdrImage.height; + const gainmapImageAspect = gainmapImage.width / gainmapImage.height; + if (sdrImageAspect !== gainmapImageAspect) { + onError( + "THREE.UltraHDRLoader Error: Aspect ratio mismatch between SDR and Gainmap images" + ); + return; + } + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { + willReadFrequently: true, + colorSpace: "srgb" + }); + canvas.width = sdrImage.width; + canvas.height = sdrImage.height; + ctx.drawImage( + gainmapImage.source, + 0, + 0, + gainmapImage.width, + gainmapImage.height, + 0, + 0, + sdrImage.width, + sdrImage.height + ); + const gainmapImageData = ctx.getImageData( + 0, + 0, + sdrImage.width, + sdrImage.height, + { colorSpace: "srgb" } + ); + ctx.drawImage(sdrImage.source, 0, 0); + const sdrImageData = ctx.getImageData( + 0, + 0, + sdrImage.width, + sdrImage.height, + { colorSpace: "srgb" } + ); + let hdrBuffer; + if (this.type === HalfFloatType) { + hdrBuffer = new Uint16Array(sdrImageData.data.length).fill(23544); + } else { + hdrBuffer = new Float32Array(sdrImageData.data.length).fill(255); + } + const maxDisplayBoost = Math.sqrt( + Math.pow( + /* 1.8 instead of 2 near-perfectly rectifies approximations introduced by precalculated SRGB_TO_LINEAR values */ + 1.8, + xmpMetadata.hdrCapacityMax + ) + ); + const unclampedWeightFactor = (Math.log2(maxDisplayBoost) - xmpMetadata.hdrCapacityMin) / (xmpMetadata.hdrCapacityMax - xmpMetadata.hdrCapacityMin); + const weightFactor = Math.min( + Math.max(unclampedWeightFactor, 0), + 1 + ); + const useGammaOne = xmpMetadata.gamma === 1; + for (let pixelIndex = 0; pixelIndex < sdrImageData.data.length; pixelIndex += 4) { + const x2 = pixelIndex / 4 % sdrImage.width; + const y2 = Math.floor(pixelIndex / 4 / sdrImage.width); + for (let channelIndex = 0; channelIndex < 3; channelIndex++) { + const sdrValue = sdrImageData.data[pixelIndex + channelIndex]; + const gainmapIndex = (y2 * sdrImage.width + x2) * 4 + channelIndex; + const gainmapValue = gainmapImageData.data[gainmapIndex] / 255; + const logRecovery = useGammaOne ? gainmapValue : Math.pow(gainmapValue, 1 / xmpMetadata.gamma); + const logBoost = xmpMetadata.gainMapMin * (1 - logRecovery) + xmpMetadata.gainMapMax * logRecovery; + const hdrValue = (sdrValue + xmpMetadata.offsetSDR) * (logBoost * weightFactor === 0 ? 1 : Math.pow(2, logBoost * weightFactor)) - xmpMetadata.offsetHDR; + const linearHDRValue = Math.min( + Math.max(this._srgbToLinear(hdrValue), 0), + 65504 + ); + hdrBuffer[pixelIndex + channelIndex] = this.type === HalfFloatType ? DataUtils.toHalfFloat(linearHDRValue) : linearHDRValue; + } + } + onSuccess(hdrBuffer, sdrImage.width, sdrImage.height); + }).catch(() => { + throw new Error( + "THREE.UltraHDRLoader Error: Could not parse UltraHDR images" + ); + }); + } +}; + +// node_modules/three/examples/jsm/loaders/RGBMLoader.js +var RGBMLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + this.maxRange = 7; + } + setDataType(value2) { + this.type = value2; + return this; + } + setMaxRange(value2) { + this.maxRange = value2; + return this; + } + loadCubemap(urls, onLoad, onProgress, onError) { + const texture = new CubeTexture(); + for (let i = 0; i < 6; i++) { + texture.images[i] = void 0; + } + let loaded = 0; + const scope = this; + function loadTexture(i) { + scope.load(urls[i], function(image) { + texture.images[i] = image; + loaded++; + if (loaded === 6) { + texture.needsUpdate = true; + if (onLoad) onLoad(texture); + } + }, void 0, onError); + } + for (let i = 0; i < urls.length; ++i) { + loadTexture(i); + } + texture.type = this.type; + texture.format = RGBAFormat; + texture.minFilter = LinearFilter; + texture.generateMipmaps = false; + return texture; + } + loadCubemapAsync(urls, onProgress) { + return new Promise((resolve, reject2) => { + this.loadCubemap(urls, resolve, onProgress, reject2); + }); + } + parse(buffer) { + const img = UPNG.decode(buffer); + const rgba = UPNG.toRGBA8(img)[0]; + const data2 = new Uint8Array(rgba); + const size2 = img.width * img.height * 4; + const output = this.type === HalfFloatType ? new Uint16Array(size2) : new Float32Array(size2); + for (let i = 0; i < data2.length; i += 4) { + const r = data2[i + 0] / 255; + const g2 = data2[i + 1] / 255; + const b3 = data2[i + 2] / 255; + const a2 = data2[i + 3] / 255; + if (this.type === HalfFloatType) { + output[i + 0] = DataUtils.toHalfFloat(Math.min(r * a2 * this.maxRange, 65504)); + output[i + 1] = DataUtils.toHalfFloat(Math.min(g2 * a2 * this.maxRange, 65504)); + output[i + 2] = DataUtils.toHalfFloat(Math.min(b3 * a2 * this.maxRange, 65504)); + output[i + 3] = DataUtils.toHalfFloat(1); + } else { + output[i + 0] = r * a2 * this.maxRange; + output[i + 1] = g2 * a2 * this.maxRange; + output[i + 2] = b3 * a2 * this.maxRange; + output[i + 3] = 1; + } + } + return { + width: img.width, + height: img.height, + data: output, + format: RGBAFormat, + type: this.type, + flipY: true + }; + } +}; +var UPNG = {}; +UPNG.toRGBA8 = function(out) { + var w = out.width, h = out.height; + if (out.tabs.acTL == null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer]; + var frms = []; + if (out.frames[0].data == null) out.frames[0].data = out.data; + var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len); + for (var i = 0; i < out.frames.length; i++) { + var frm = out.frames[i]; + var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height; + var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out); + if (i != 0) for (var j = 0; j < len; j++) prev[j] = img[j]; + if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0); + else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1); + frms.push(img.buffer.slice(0)); + if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0); + else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j]; + } + return frms; +}; +UPNG.toRGBA8.decodeImage = function(data2, w, h, out) { + var area = w * h, bpp = UPNG.decode._getBPP(out); + var bpl = Math.ceil(w * bpp / 8); + var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer); + var ctype = out.ctype, depth = out.depth; + var rs = UPNG._bin.readUshort; + if (ctype == 6) { + var qarea = area << 2; + if (depth == 8) for (var i = 0; i < qarea; i += 4) { + bf[i] = data2[i]; + bf[i + 1] = data2[i + 1]; + bf[i + 2] = data2[i + 2]; + bf[i + 3] = data2[i + 3]; + } + if (depth == 16) for (var i = 0; i < qarea; i++) { + bf[i] = data2[i << 1]; + } + } else if (ctype == 2) { + var ts = out.tabs["tRNS"]; + if (ts == null) { + if (depth == 8) for (var i = 0; i < area; i++) { + var ti = i * 3; + bf32[i] = 255 << 24 | data2[ti + 2] << 16 | data2[ti + 1] << 8 | data2[ti]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var ti = i * 6; + bf32[i] = 255 << 24 | data2[ti + 4] << 16 | data2[ti + 2] << 8 | data2[ti]; + } + } else { + var tr = ts[0], tg = ts[1], tb = ts[2]; + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + bf32[i] = 255 << 24 | data2[ti + 2] << 16 | data2[ti + 1] << 8 | data2[ti]; + if (data2[ti] == tr && data2[ti + 1] == tg && data2[ti + 2] == tb) bf[qi + 3] = 0; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 6; + bf32[i] = 255 << 24 | data2[ti + 4] << 16 | data2[ti + 2] << 8 | data2[ti]; + if (rs(data2, ti) == tr && rs(data2, ti + 2) == tg && rs(data2, ti + 4) == tb) bf[qi + 3] = 0; + } + } + } else if (ctype == 3) { + var p2 = out.tabs["PLTE"], ap = out.tabs["tRNS"], tl = ap ? ap.length : 0; + if (depth == 1) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 2) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 4) for (var y2 = 0; y2 < h; y2++) { + var s0 = y2 * bpl, t0 = y2 * w; + for (var i = 0; i < w; i++) { + var qi = t0 + i << 2, j = data2[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, j = data2[i], cj = 3 * j; + bf[qi] = p2[cj]; + bf[qi + 1] = p2[cj + 1]; + bf[qi + 2] = p2[cj + 2]; + bf[qi + 3] = j < tl ? ap[j] : 255; + } + } else if (ctype == 4) { + if (depth == 8) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 1, gr = data2[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data2[di + 1]; + } + if (depth == 16) for (var i = 0; i < area; i++) { + var qi = i << 2, di = i << 2, gr = data2[di]; + bf[qi] = gr; + bf[qi + 1] = gr; + bf[qi + 2] = gr; + bf[qi + 3] = data2[di + 2]; + } + } else if (ctype == 0) { + var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, to = y2 * w; + if (depth == 1) for (var x2 = 0; x2 < w; x2++) { + var gr = 255 * (data2[off + (x2 >>> 3)] >>> 7 - (x2 & 7) & 1), al = gr == tr * 255 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 2) for (var x2 = 0; x2 < w; x2++) { + var gr = 85 * (data2[off + (x2 >>> 2)] >>> 6 - ((x2 & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 4) for (var x2 = 0; x2 < w; x2++) { + var gr = 17 * (data2[off + (x2 >>> 1)] >>> 4 - ((x2 & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 8) for (var x2 = 0; x2 < w; x2++) { + var gr = data2[off + x2], al = gr == tr ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + else if (depth == 16) for (var x2 = 0; x2 < w; x2++) { + var gr = data2[off + (x2 << 1)], al = rs(data2, off + (x2 << 1)) == tr ? 0 : 255; + bf32[to + x2] = al << 24 | gr << 16 | gr << 8 | gr; + } + } + } + return bf; +}; +UPNG.decode = function(buff) { + var data2 = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint; + var out = { tabs: {}, frames: [] }; + var dd = new Uint8Array(data2.length), doff = 0; + var fd2, foff = 0; + var text2, keyw, bfr; + var mgck = [137, 80, 78, 71, 13, 10, 26, 10]; + for (var i = 0; i < 8; i++) if (data2[i] != mgck[i]) throw new Error("The input is not a PNG file!"); + while (offset < data2.length) { + var len = bin.readUint(data2, offset); + offset += 4; + var type = bin.readASCII(data2, offset, 4); + offset += 4; + if (type == "IHDR") { + UPNG.decode._IHDR(data2, offset, out); + } else if (type == "CgBI") { + out.tabs[type] = data2.slice(offset, offset + 4); + } else if (type == "IDAT") { + for (var i = 0; i < len; i++) dd[doff + i] = data2[offset + i]; + doff += len; + } else if (type == "acTL") { + out.tabs[type] = { num_frames: rUi(data2, offset), num_plays: rUi(data2, offset + 4) }; + fd2 = new Uint8Array(data2.length); + } else if (type == "fcTL") { + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd2.slice(0, foff), fr.rect.width, fr.rect.height); + foff = 0; + } + var rct = { x: rUi(data2, offset + 12), y: rUi(data2, offset + 16), width: rUi(data2, offset + 4), height: rUi(data2, offset + 8) }; + var del = rUs(data2, offset + 22); + del = rUs(data2, offset + 20) / (del == 0 ? 100 : del); + var frm = { rect: rct, delay: Math.round(del * 1e3), dispose: data2[offset + 24], blend: data2[offset + 25] }; + out.frames.push(frm); + } else if (type == "fdAT") { + for (var i = 0; i < len - 4; i++) fd2[foff + i] = data2[offset + i + 4]; + foff += len - 4; + } else if (type == "pHYs") { + out.tabs[type] = [bin.readUint(data2, offset), bin.readUint(data2, offset + 4), data2[offset + 8]]; + } else if (type == "cHRM") { + out.tabs[type] = []; + for (var i = 0; i < 8; i++) out.tabs[type].push(bin.readUint(data2, offset + i * 4)); + } else if (type == "tEXt" || type == "zTXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = bin.nextZero(data2, offset); + keyw = bin.readASCII(data2, offset, nz - offset); + var tl = offset + len - nz - 1; + if (type == "tEXt") text2 = bin.readASCII(data2, nz + 1, tl); + else { + bfr = UPNG.decode._inflate(data2.slice(nz + 2, nz + 2 + tl)); + text2 = bin.readUTF8(bfr, 0, bfr.length); + } + out.tabs[type][keyw] = text2; + } else if (type == "iTXt") { + if (out.tabs[type] == null) out.tabs[type] = {}; + var nz = 0, off = offset; + nz = bin.nextZero(data2, off); + keyw = bin.readASCII(data2, off, nz - off); + off = nz + 1; + var cflag = data2[off]; + off += 2; + nz = bin.nextZero(data2, off); + bin.readASCII(data2, off, nz - off); + off = nz + 1; + nz = bin.nextZero(data2, off); + bin.readUTF8(data2, off, nz - off); + off = nz + 1; + var tl = len - (off - offset); + if (cflag == 0) text2 = bin.readUTF8(data2, off, tl); + else { + bfr = UPNG.decode._inflate(data2.slice(off, off + tl)); + text2 = bin.readUTF8(bfr, 0, bfr.length); + } + out.tabs[type][keyw] = text2; + } else if (type == "PLTE") { + out.tabs[type] = bin.readBytes(data2, offset, len); + } else if (type == "hIST") { + var pl = out.tabs["PLTE"].length / 3; + out.tabs[type] = []; + for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data2, offset + i * 2)); + } else if (type == "tRNS") { + if (out.ctype == 3) out.tabs[type] = bin.readBytes(data2, offset, len); + else if (out.ctype == 0) out.tabs[type] = rUs(data2, offset); + else if (out.ctype == 2) out.tabs[type] = [rUs(data2, offset), rUs(data2, offset + 2), rUs(data2, offset + 4)]; + } else if (type == "gAMA") out.tabs[type] = bin.readUint(data2, offset) / 1e5; + else if (type == "sRGB") out.tabs[type] = data2[offset]; + else if (type == "bKGD") { + if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data2, offset)]; + else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [rUs(data2, offset), rUs(data2, offset + 2), rUs(data2, offset + 4)]; + else if (out.ctype == 3) out.tabs[type] = data2[offset]; + } else if (type == "IEND") { + break; + } + offset += len; + bin.readUint(data2, offset); + offset += 4; + } + if (foff != 0) { + var fr = out.frames[out.frames.length - 1]; + fr.data = UPNG.decode._decompress(out, fd2.slice(0, foff), fr.rect.width, fr.rect.height); + } + out.data = UPNG.decode._decompress(out, dd, out.width, out.height); + delete out.compress; + delete out.interlace; + delete out.filter; + return out; +}; +UPNG.decode._decompress = function(out, dd, w, h) { + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h); + if (out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd, buff); + else dd = UPNG.decode._inflate(dd, buff); + if (out.interlace == 0) dd = UPNG.decode._filterZero(dd, out, 0, w, h); + else if (out.interlace == 1) dd = UPNG.decode._readInterlace(dd, out); + return dd; +}; +UPNG.decode._inflate = function(data2, buff) { + var out = UPNG["inflateRaw"](new Uint8Array(data2.buffer, 2, data2.length - 6), buff); + return out; +}; +UPNG.inflateRaw = function() { + var H = {}; + H.H = {}; + H.H.N = function(N, W) { + var R4 = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q3 = 0, X2 = 0, u = 0, w = 0, d = 0, v, C2; + if (N[0] == 3 && N[1] == 0) return W ? W : new R4(0); + var V = H.H, n2 = V.b, A2 = V.e, l2 = V.R, M = V.n, I2 = V.A, e = V.Z, b3 = V.m, Z2 = W == null; + if (Z2) W = new R4(N.length >>> 2 << 5); + while (i == 0) { + i = n2(N, d, 1); + m = n2(N, d + 1, 2); + d += 3; + if (m == 0) { + if ((d & 7) != 0) d += 8 - (d & 7); + var D = (d >>> 3) + 4, q2 = N[D - 4] | N[D - 3] << 8; + if (Z2) W = H.H.W(W, w + q2); + W.set(new R4(N.buffer, N.byteOffset + D, q2), w); + d = D + q2 << 3; + w += q2; + continue; + } + if (Z2) W = H.H.W(W, w + (1 << 17)); + if (m == 1) { + v = b3.J; + C2 = b3.h; + X2 = (1 << 9) - 1; + u = (1 << 5) - 1; + } + if (m == 2) { + J = A2(N, d, 5) + 257; + h = A2(N, d + 5, 5) + 1; + Q3 = A2(N, d + 10, 4) + 4; + d += 14; + var j = 1; + for (var c2 = 0; c2 < 38; c2 += 2) { + b3.Q[c2] = 0; + b3.Q[c2 + 1] = 0; + } + for (var c2 = 0; c2 < Q3; c2++) { + var K = A2(N, d + c2 * 3, 3); + b3.Q[(b3.X[c2] << 1) + 1] = K; + if (K > j) j = K; + } + d += 3 * Q3; + M(b3.Q, j); + I2(b3.Q, j, b3.u); + v = b3.w; + C2 = b3.d; + d = l2(b3.u, (1 << j) - 1, J + h, N, d, b3.v); + var r = V.V(b3.v, 0, J, b3.C); + X2 = (1 << r) - 1; + var S = V.V(b3.v, J, h, b3.D); + u = (1 << S) - 1; + M(b3.C, r); + I2(b3.C, r, v); + M(b3.D, S); + I2(b3.D, S, C2); + } + while (true) { + var T = v[e(N, d) & X2]; + d += T & 15; + var p2 = T >>> 4; + if (p2 >>> 8 == 0) { + W[w++] = p2; + } else if (p2 == 256) { + break; + } else { + var z = w + p2 - 254; + if (p2 > 264) { + var _ = b3.q[p2 - 257]; + z = w + (_ >>> 3) + A2(N, d, _ & 7); + d += _ & 7; + } + var $2 = C2[e(N, d) & u]; + d += $2 & 15; + var s = $2 >>> 4, Y2 = b3.c[s], a2 = (Y2 >>> 4) + n2(N, d, Y2 & 15); + d += Y2 & 15; + while (w < z) { + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + } + w = z; + } + } + } + return W.length == w ? W : W.slice(0, w); + }; + H.H.W = function(N, W) { + var R4 = N.length; + if (W <= R4) return N; + var V = new Uint8Array(R4 << 1); + V.set(N, 0); + return V; + }; + H.H.R = function(N, W, R4, V, n2, A2) { + var l2 = H.H.e, M = H.H.Z, I2 = 0; + while (I2 < R4) { + var e = N[M(V, n2) & W]; + n2 += e & 15; + var b3 = e >>> 4; + if (b3 <= 15) { + A2[I2] = b3; + I2++; + } else { + var Z2 = 0, m = 0; + if (b3 == 16) { + m = 3 + l2(V, n2, 2); + n2 += 2; + Z2 = A2[I2 - 1]; + } else if (b3 == 17) { + m = 3 + l2(V, n2, 3); + n2 += 3; + } else if (b3 == 18) { + m = 11 + l2(V, n2, 7); + n2 += 7; + } + var J = I2 + m; + while (I2 < J) { + A2[I2] = Z2; + I2++; + } + } + } + return n2; + }; + H.H.V = function(N, W, R4, V) { + var n2 = 0, A2 = 0, l2 = V.length >>> 1; + while (A2 < R4) { + var M = N[A2 + W]; + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = M; + if (M > n2) n2 = M; + A2++; + } + while (A2 < l2) { + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = 0; + A2++; + } + return n2; + }; + H.H.n = function(N, W) { + var R4 = H.H.m, V = N.length, n2, A2, l2, M, I2, e = R4.j; + for (var M = 0; M <= W; M++) e[M] = 0; + for (M = 1; M < V; M += 2) e[N[M]]++; + var b3 = R4.K; + n2 = 0; + e[0] = 0; + for (A2 = 1; A2 <= W; A2++) { + n2 = n2 + e[A2 - 1] << 1; + b3[A2] = n2; + } + for (l2 = 0; l2 < V; l2 += 2) { + I2 = N[l2 + 1]; + if (I2 != 0) { + N[l2] = b3[I2]; + b3[I2]++; + } + } + }; + H.H.A = function(N, W, R4) { + var V = N.length, n2 = H.H.m, A2 = n2.r; + for (var l2 = 0; l2 < V; l2 += 2) if (N[l2 + 1] != 0) { + var M = l2 >> 1, I2 = N[l2 + 1], e = M << 4 | I2, b3 = W - I2, Z2 = N[l2] << b3, m = Z2 + (1 << b3); + while (Z2 != m) { + var J = A2[Z2] >>> 15 - W; + R4[J] = e; + Z2++; + } + } + }; + H.H.l = function(N, W) { + var R4 = H.H.m.r, V = 15 - W; + for (var n2 = 0; n2 < N.length; n2 += 2) { + var A2 = N[n2] << W - N[n2 + 1]; + N[n2] = R4[A2] >>> V; + } + }; + H.H.M = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + }; + H.H.I = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + N[V + 2] |= R4 >>> 16; + }; + H.H.e = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.b = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.Z = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); + }; + H.H.i = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); + }; + H.H.m = function() { + var N = Uint16Array, W = Uint32Array; + return { 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) }; + }(); + (function() { + var N = H.H.m, W = 1 << 15; + for (var R4 = 0; R4 < W; R4++) { + var V = R4; + V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; + V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; + V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; + V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; + N.r[R4] = (V >>> 16 | V << 16) >>> 17; + } + function n2(A2, l2, M) { + while (l2-- != 0) A2.push(0, M); + } + for (var R4 = 0; R4 < 32; R4++) { + N.q[R4] = N.S[R4] << 3 | N.T[R4]; + N.c[R4] = N.p[R4] << 4 | N.z[R4]; + } + n2(N._, 144, 8); + n2(N._, 255 - 143, 9); + n2(N._, 279 - 255, 7); + n2(N._, 287 - 279, 8); + H.H.n(N._, 9); + H.H.A(N._, 9, N.J); + H.H.l(N._, 9); + n2(N.$, 32, 5); + H.H.n(N.$, 5); + H.H.A(N.$, 5, N.h); + H.H.l(N.$, 5); + n2(N.Q, 19, 0); + n2(N.C, 286, 0); + n2(N.D, 30, 0); + n2(N.v, 320, 0); + })(); + return H.H.N; +}(); +UPNG.decode._readInterlace = function(data2, out) { + var w = out.width, h = out.height; + var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8); + var img = new Uint8Array(h * bpl); + var di = 0; + var starting_row = [0, 0, 4, 0, 2, 0, 1]; + var starting_col = [0, 4, 0, 2, 0, 1, 0]; + var row_increment = [8, 8, 8, 4, 4, 2, 2]; + var col_increment = [8, 8, 4, 4, 2, 2, 1]; + var pass = 0; + while (pass < 7) { + var ri = row_increment[pass], ci = col_increment[pass]; + var sw = 0, sh = 0; + var cr = starting_row[pass]; + while (cr < h) { + cr += ri; + sh++; + } + var cc = starting_col[pass]; + while (cc < w) { + cc += ci; + sw++; + } + var bpll = Math.ceil(sw * bpp / 8); + UPNG.decode._filterZero(data2, out, di, sw, sh); + var y2 = 0, row = starting_row[pass]; + var val2; + while (row < h) { + var col = starting_col[pass]; + var cdi = di + y2 * bpll << 3; + while (col < w) { + if (bpp == 1) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 7 - (cdi & 7) & 1; + img[row * bpl + (col >> 3)] |= val2 << 7 - ((col & 7) << 0); + } + if (bpp == 2) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 6 - (cdi & 7) & 3; + img[row * bpl + (col >> 2)] |= val2 << 6 - ((col & 3) << 1); + } + if (bpp == 4) { + val2 = data2[cdi >> 3]; + val2 = val2 >> 4 - (cdi & 7) & 15; + img[row * bpl + (col >> 1)] |= val2 << 4 - ((col & 1) << 2); + } + if (bpp >= 8) { + var ii = row * bpl + col * cbpp; + for (var j = 0; j < cbpp; j++) img[ii + j] = data2[(cdi >> 3) + j]; + } + cdi += bpp; + col += ci; + } + y2++; + row += ri; + } + if (sw * sh != 0) di += sh * (1 + bpll); + pass = pass + 1; + } + return img; +}; +UPNG.decode._getBPP = function(out) { + var noc = [1, null, 3, 1, 2, null, 4][out.ctype]; + return noc * out.depth; +}; +UPNG.decode._filterZero = function(data2, out, off, w, h) { + var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth; + bpp = Math.ceil(bpp / 8); + var i, di, type = data2[off], x2 = 0; + if (type > 1) data2[off] = [0, 0, 1][type - 2]; + if (type == 3) for (x2 = bpp; x2 < bpl; x2++) data2[x2 + 1] = data2[x2 + 1] + (data2[x2 + 1 - bpp] >>> 1) & 255; + for (var y2 = 0; y2 < h; y2++) { + i = off + y2 * bpl; + di = i + y2 + 1; + type = data2[di - 1]; + x2 = 0; + if (type == 0) for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2]; + else if (type == 1) { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2]; + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + data2[i + x2 - bpp]; + } else if (type == 2) { + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + data2[i + x2 - bpl]; + } else if (type == 3) { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2] + (data2[i + x2 - bpl] >>> 1); + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + (data2[i + x2 - bpl] + data2[i + x2 - bpp] >>> 1); + } else { + for (; x2 < bpp; x2++) data2[i + x2] = data2[di + x2] + paeth(0, data2[i + x2 - bpl], 0); + for (; x2 < bpl; x2++) data2[i + x2] = data2[di + x2] + paeth(data2[i + x2 - bpp], data2[i + x2 - bpl], data2[i + x2 - bpp - bpl]); + } + } + return data2; +}; +UPNG.decode._paeth = function(a2, b3, c2) { + var p2 = a2 + b3 - c2, pa2 = p2 - a2, pb = p2 - b3, pc = p2 - c2; + if (pa2 * pa2 <= pb * pb && pa2 * pa2 <= pc * pc) return a2; + else if (pb * pb <= pc * pc) return b3; + return c2; +}; +UPNG.decode._IHDR = function(data2, offset, out) { + var bin = UPNG._bin; + out.width = bin.readUint(data2, offset); + offset += 4; + out.height = bin.readUint(data2, offset); + offset += 4; + out.depth = data2[offset]; + offset++; + out.ctype = data2[offset]; + offset++; + out.compress = data2[offset]; + offset++; + out.filter = data2[offset]; + offset++; + out.interlace = data2[offset]; + offset++; +}; +UPNG._bin = { + nextZero: function(data2, p2) { + while (data2[p2] != 0) p2++; + return p2; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + readUint: function(buff, p2) { + return buff[p2] * (256 * 256 * 256) + (buff[p2 + 1] << 16 | buff[p2 + 2] << 8 | buff[p2 + 3]); + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 & 255; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + writeASCII: function(data2, p2, s) { + for (var i = 0; i < s.length; i++) data2[p2 + i] = s.charCodeAt(i); + }, + readBytes: function(buff, p2, l2) { + var arr = []; + for (var i = 0; i < l2; i++) arr.push(buff[p2 + i]); + return arr; + }, + pad: function(n2) { + return n2.length < 2 ? "0" + n2 : n2; + }, + readUTF8: function(buff, p2, l2) { + var s = "", ns; + for (var i = 0; i < l2; i++) s += "%" + UPNG._bin.pad(buff[p2 + i].toString(16)); + try { + ns = decodeURIComponent(s); + } catch (e) { + return UPNG._bin.readASCII(buff, p2, l2); + } + return ns; + } +}; +UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) { + var w = Math.min(sw, tw), h = Math.min(sh, th); + var si = 0, ti = 0; + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + if (xoff >= 0 && yoff >= 0) { + si = y2 * sw + x2 << 2; + ti = (yoff + y2) * tw + xoff + x2 << 2; + } else { + si = (-yoff + y2) * sw - xoff + x2 << 2; + ti = y2 * tw + x2 << 2; + } + if (mode == 0) { + tb[ti] = sb[si]; + tb[ti + 1] = sb[si + 1]; + tb[ti + 2] = sb[si + 2]; + tb[ti + 3] = sb[si + 3]; + } else if (mode == 1) { + var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa; + var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba; + var ifa = 1 - fa, oa2 = fa + ba * ifa, ioa = oa2 == 0 ? 0 : 1 / oa2; + tb[ti + 3] = 255 * oa2; + tb[ti + 0] = (fr + br * ifa) * ioa; + tb[ti + 1] = (fg + bg * ifa) * ioa; + tb[ti + 2] = (fb + bb * ifa) * ioa; + } else if (mode == 2) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) { + tb[ti] = 0; + tb[ti + 1] = 0; + tb[ti + 2] = 0; + tb[ti + 3] = 0; + } else { + tb[ti] = fr; + tb[ti + 1] = fg; + tb[ti + 2] = fb; + tb[ti + 3] = fa; + } + } else if (mode == 3) { + var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; + var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; + if (fa == ba && fr == br && fg == bg && fb == bb) continue; + if (fa < 220 && ba > 20) return false; + } + } + return true; +}; + +// node_modules/three/examples/jsm/loaders/STLLoader.js +var STLLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(data2) { + function isBinary(data3) { + const reader = new DataView(data3); + const face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8; + const n_faces = reader.getUint32(80, true); + const expect = 80 + 32 / 8 + n_faces * face_size; + if (expect === reader.byteLength) { + return true; + } + const solid = [115, 111, 108, 105, 100]; + for (let off = 0; off < 5; off++) { + if (matchDataViewAt(solid, reader, off)) return false; + } + return true; + } + function matchDataViewAt(query, reader, offset) { + for (let i = 0, il = query.length; i < il; i++) { + if (query[i] !== reader.getUint8(offset + i)) return false; + } + return true; + } + function parseBinary(data3) { + const reader = new DataView(data3); + const faces = reader.getUint32(80, true); + let r, g2, b3, hasColors = false, colors; + let defaultR, defaultG, defaultB, alpha; + for (let index2 = 0; index2 < 80 - 10; index2++) { + if (reader.getUint32(index2, false) == 1129270351 && reader.getUint8(index2 + 4) == 82 && reader.getUint8(index2 + 5) == 61) { + hasColors = true; + colors = new Float32Array(faces * 3 * 3); + defaultR = reader.getUint8(index2 + 6) / 255; + defaultG = reader.getUint8(index2 + 7) / 255; + defaultB = reader.getUint8(index2 + 8) / 255; + alpha = reader.getUint8(index2 + 9) / 255; + } + } + const dataOffset = 84; + const faceLength = 12 * 4 + 2; + const geometry = new BufferGeometry(); + const vertices = new Float32Array(faces * 3 * 3); + const normals = new Float32Array(faces * 3 * 3); + const color = new Color(); + for (let face = 0; face < faces; face++) { + const start = dataOffset + face * faceLength; + const normalX = reader.getFloat32(start, true); + const normalY = reader.getFloat32(start + 4, true); + const normalZ = reader.getFloat32(start + 8, true); + if (hasColors) { + const packedColor = reader.getUint16(start + 48, true); + if ((packedColor & 32768) === 0) { + r = (packedColor & 31) / 31; + g2 = (packedColor >> 5 & 31) / 31; + b3 = (packedColor >> 10 & 31) / 31; + } else { + r = defaultR; + g2 = defaultG; + b3 = defaultB; + } + } + for (let i = 1; i <= 3; i++) { + const vertexstart = start + i * 12; + const componentIdx = face * 3 * 3 + (i - 1) * 3; + vertices[componentIdx] = reader.getFloat32(vertexstart, true); + vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true); + vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true); + normals[componentIdx] = normalX; + normals[componentIdx + 1] = normalY; + normals[componentIdx + 2] = normalZ; + if (hasColors) { + color.set(r, g2, b3).convertSRGBToLinear(); + colors[componentIdx] = color.r; + colors[componentIdx + 1] = color.g; + colors[componentIdx + 2] = color.b; + } + } + } + geometry.setAttribute("position", new BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new BufferAttribute(normals, 3)); + if (hasColors) { + geometry.setAttribute("color", new BufferAttribute(colors, 3)); + geometry.hasColors = true; + geometry.alpha = alpha; + } + return geometry; + } + function parseASCII(data3) { + const geometry = new BufferGeometry(); + const patternSolid = /solid([\s\S]*?)endsolid/g; + const patternFace = /facet([\s\S]*?)endfacet/g; + const patternName = /solid\s(.+)/; + let faceCounter = 0; + const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source; + const patternVertex = new RegExp("vertex" + patternFloat + patternFloat + patternFloat, "g"); + const patternNormal = new RegExp("normal" + patternFloat + patternFloat + patternFloat, "g"); + const vertices = []; + const normals = []; + const groupNames = []; + const normal = new Vector3(); + let result; + let groupCount = 0; + let startVertex = 0; + let endVertex = 0; + while ((result = patternSolid.exec(data3)) !== null) { + startVertex = endVertex; + const solid = result[0]; + const name2 = (result = patternName.exec(solid)) !== null ? result[1] : ""; + groupNames.push(name2); + while ((result = patternFace.exec(solid)) !== null) { + let vertexCountPerFace = 0; + let normalCountPerFace = 0; + const text2 = result[0]; + while ((result = patternNormal.exec(text2)) !== null) { + normal.x = parseFloat(result[1]); + normal.y = parseFloat(result[2]); + normal.z = parseFloat(result[3]); + normalCountPerFace++; + } + while ((result = patternVertex.exec(text2)) !== null) { + vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])); + normals.push(normal.x, normal.y, normal.z); + vertexCountPerFace++; + endVertex++; + } + if (normalCountPerFace !== 1) { + console.error("THREE.STLLoader: Something isn't right with the normal of face number " + faceCounter); + } + if (vertexCountPerFace !== 3) { + console.error("THREE.STLLoader: Something isn't right with the vertices of face number " + faceCounter); + } + faceCounter++; + } + const start = startVertex; + const count = endVertex - startVertex; + geometry.userData.groupNames = groupNames; + geometry.addGroup(start, count, groupCount); + groupCount++; + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + return geometry; + } + function ensureString(buffer) { + if (typeof buffer !== "string") { + return new TextDecoder().decode(buffer); + } + return buffer; + } + function ensureBinary(buffer) { + if (typeof buffer === "string") { + const array_buffer = new Uint8Array(buffer.length); + for (let i = 0; i < buffer.length; i++) { + array_buffer[i] = buffer.charCodeAt(i) & 255; + } + return array_buffer.buffer || array_buffer; + } else { + return buffer; + } + } + const binData = ensureBinary(data2); + return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data2)); + } +}; + +// node_modules/three/examples/jsm/loaders/SVGLoader.js +var COLOR_SPACE_SVG = SRGBColorSpace; +var SVGLoader = class _SVGLoader extends Loader { + constructor(manager) { + super(manager); + this.defaultDPI = 90; + this.defaultUnit = "px"; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text2) { + const scope = this; + function parseNode(node, style) { + if (node.nodeType !== 1) return; + const transform2 = getNodeTransform(node); + let isDefsNode = false; + let path = null; + switch (node.nodeName) { + case "svg": + style = parseStyle(node, style); + break; + case "style": + parseCSSStylesheet(node); + break; + case "g": + style = parseStyle(node, style); + break; + case "path": + style = parseStyle(node, style); + if (node.hasAttribute("d")) path = parsePathNode(node); + break; + case "rect": + style = parseStyle(node, style); + path = parseRectNode(node); + break; + case "polygon": + style = parseStyle(node, style); + path = parsePolygonNode(node); + break; + case "polyline": + style = parseStyle(node, style); + path = parsePolylineNode(node); + break; + case "circle": + style = parseStyle(node, style); + path = parseCircleNode(node); + break; + case "ellipse": + style = parseStyle(node, style); + path = parseEllipseNode(node); + break; + case "line": + style = parseStyle(node, style); + path = parseLineNode(node); + break; + case "defs": + isDefsNode = true; + break; + case "use": + style = parseStyle(node, style); + const href = node.getAttributeNS("http://www.w3.org/1999/xlink", "href") || ""; + const usedNodeId = href.substring(1); + const usedNode = node.viewportElement.getElementById(usedNodeId); + if (usedNode) { + parseNode(usedNode, style); + } else { + console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId); + } + break; + default: + } + if (path) { + if (style.fill !== void 0 && style.fill !== "none") { + path.color.setStyle(style.fill, COLOR_SPACE_SVG); + } + transformPath(path, currentTransform); + paths.push(path); + path.userData = { node, style }; + } + const childNodes = node.childNodes; + for (let i = 0; i < childNodes.length; i++) { + const node2 = childNodes[i]; + if (isDefsNode && node2.nodeName !== "style" && node2.nodeName !== "defs") { + continue; + } + parseNode(node2, style); + } + if (transform2) { + transformStack.pop(); + if (transformStack.length > 0) { + currentTransform.copy(transformStack[transformStack.length - 1]); + } else { + currentTransform.identity(); + } + } + } + function parsePathNode(node) { + const path = new ShapePath2(); + const point = new Vector2(); + const control = new Vector2(); + const firstPoint = new Vector2(); + let isFirstPoint = true; + let doSetFirstPoint = false; + const d = node.getAttribute("d"); + if (d === "" || d === "none") return null; + const commands = d.match(/[a-df-z][^a-df-z]*/ig); + for (let i = 0, l2 = commands.length; i < l2; i++) { + const command = commands[i]; + const type = command.charAt(0); + const data3 = command.slice(1).trim(); + if (isFirstPoint === true) { + doSetFirstPoint = true; + isFirstPoint = false; + } + let numbers; + switch (type) { + case "M": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) { + path.moveTo(point.x, point.y); + } else { + path.lineTo(point.x, point.y); + } + if (j === 0) firstPoint.copy(point); + } + break; + case "H": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "V": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "L": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "C": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo( + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + numbers[j + 5] + ); + control.x = numbers[j + 2]; + control.y = numbers[j + 3]; + point.x = numbers[j + 4]; + point.y = numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "S": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo( + getReflection(point.x, control.x), + getReflection(point.y, control.y), + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3] + ); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Q": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo( + numbers[j + 0], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3] + ); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "T": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo( + rx, + ry, + numbers[j + 0], + numbers[j + 1] + ); + control.x = rx; + control.y = ry; + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "A": + numbers = parseFloats(data3, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == point.x && numbers[j + 6] == point.y) continue; + const start = point.clone(); + point.x = numbers[j + 5]; + point.y = numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand( + path, + numbers[j], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + start, + point + ); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "m": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) { + path.moveTo(point.x, point.y); + } else { + path.lineTo(point.x, point.y); + } + if (j === 0) firstPoint.copy(point); + } + break; + case "h": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "v": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "l": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "c": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo( + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3], + point.x + numbers[j + 4], + point.y + numbers[j + 5] + ); + control.x = point.x + numbers[j + 2]; + control.y = point.y + numbers[j + 3]; + point.x += numbers[j + 4]; + point.y += numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "s": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo( + getReflection(point.x, control.x), + getReflection(point.y, control.y), + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3] + ); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "q": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo( + point.x + numbers[j + 0], + point.y + numbers[j + 1], + point.x + numbers[j + 2], + point.y + numbers[j + 3] + ); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "t": + numbers = parseFloats(data3); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo( + rx, + ry, + point.x + numbers[j + 0], + point.y + numbers[j + 1] + ); + control.x = rx; + control.y = ry; + point.x = point.x + numbers[j + 0]; + point.y = point.y + numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "a": + numbers = parseFloats(data3, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == 0 && numbers[j + 6] == 0) continue; + const start = point.clone(); + point.x += numbers[j + 5]; + point.y += numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand( + path, + numbers[j], + numbers[j + 1], + numbers[j + 2], + numbers[j + 3], + numbers[j + 4], + start, + point + ); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Z": + case "z": + path.currentPath.autoClose = true; + if (path.currentPath.curves.length > 0) { + point.copy(firstPoint); + path.currentPath.currentPoint.copy(point); + isFirstPoint = true; + } + break; + default: + console.warn(command); + } + doSetFirstPoint = false; + } + return path; + } + function parseCSSStylesheet(node) { + if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length) return; + for (let i = 0; i < node.sheet.cssRules.length; i++) { + const stylesheet = node.sheet.cssRules[i]; + if (stylesheet.type !== 1) continue; + const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim()); + for (let j = 0; j < selectorList.length; j++) { + const definitions = Object.fromEntries( + Object.entries(stylesheet.style).filter(([, v]) => v !== "") + ); + stylesheets[selectorList[j]] = Object.assign( + stylesheets[selectorList[j]] || {}, + definitions + ); + } + } + } + function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) { + if (rx == 0 || ry == 0) { + path.lineTo(end.x, end.y); + return; + } + x_axis_rotation = x_axis_rotation * Math.PI / 180; + rx = Math.abs(rx); + ry = Math.abs(ry); + const dx2 = (start.x - end.x) / 2; + const dy2 = (start.y - end.y) / 2; + const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2; + const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2; + let rxs = rx * rx; + let rys = ry * ry; + const x1ps = x1p * x1p; + const y1ps = y1p * y1p; + const cr = x1ps / rxs + y1ps / rys; + if (cr > 1) { + const s = Math.sqrt(cr); + rx = s * rx; + ry = s * ry; + rxs = rx * rx; + rys = ry * ry; + } + const dq = rxs * y1ps + rys * x1ps; + const pq = (rxs * rys - dq) / dq; + let q2 = Math.sqrt(Math.max(0, pq)); + if (large_arc_flag === sweep_flag) q2 = -q2; + const cxp = q2 * rx * y1p / ry; + const cyp = -q2 * ry * x1p / rx; + const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2; + const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2; + const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry); + const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2); + path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation); + } + function svgAngle(ux, uy, vx, vy) { + const dot = ux * vx + uy * vy; + const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy); + let ang = Math.acos(Math.max(-1, Math.min(1, dot / len))); + if (ux * vy - uy * vx < 0) ang = -ang; + return ang; + } + function parseRectNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("x") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("y") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0); + const w = parseFloatWithUnits(node.getAttribute("width")); + const h = parseFloatWithUnits(node.getAttribute("height")); + const bci = 1 - 0.551915024494; + const path = new ShapePath2(); + path.moveTo(x2 + rx, y2); + path.lineTo(x2 + w - rx, y2); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + w - rx * bci, + y2, + x2 + w, + y2 + ry * bci, + x2 + w, + y2 + ry + ); + } + path.lineTo(x2 + w, y2 + h - ry); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + w, + y2 + h - ry * bci, + x2 + w - rx * bci, + y2 + h, + x2 + w - rx, + y2 + h + ); + } + path.lineTo(x2 + rx, y2 + h); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo( + x2 + rx * bci, + y2 + h, + x2, + y2 + h - ry * bci, + x2, + y2 + h - ry + ); + } + path.lineTo(x2, y2 + ry); + if (rx !== 0 || ry !== 0) { + path.bezierCurveTo(x2, y2 + ry * bci, x2 + rx * bci, y2, x2 + rx, y2); + } + return path; + } + function parsePolygonNode(node) { + function iterator(match, a2, b3) { + const x2 = parseFloatWithUnits(a2); + const y2 = parseFloatWithUnits(b3); + if (index2 === 0) { + path.moveTo(x2, y2); + } else { + path.lineTo(x2, y2); + } + index2++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath2(); + let index2 = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = true; + return path; + } + function parsePolylineNode(node) { + function iterator(match, a2, b3) { + const x2 = parseFloatWithUnits(a2); + const y2 = parseFloatWithUnits(b3); + if (index2 === 0) { + path.moveTo(x2, y2); + } else { + path.lineTo(x2, y2); + } + index2++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath2(); + let index2 = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = false; + return path; + } + function parseCircleNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("cy") || 0); + const r = parseFloatWithUnits(node.getAttribute("r") || 0); + const subpath = new Path(); + subpath.absarc(x2, y2, r, 0, Math.PI * 2); + const path = new ShapePath2(); + path.subPaths.push(subpath); + return path; + } + function parseEllipseNode(node) { + const x2 = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("cy") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || 0); + const subpath = new Path(); + subpath.absellipse(x2, y2, rx, ry, 0, Math.PI * 2); + const path = new ShapePath2(); + path.subPaths.push(subpath); + return path; + } + function parseLineNode(node) { + const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0); + const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0); + const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0); + const path = new ShapePath2(); + path.moveTo(x1, y1); + path.lineTo(x2, y2); + path.currentPath.autoClose = false; + return path; + } + function parseStyle(node, style) { + style = Object.assign({}, style); + let stylesheetStyles = {}; + if (node.hasAttribute("class")) { + const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim()); + for (let i = 0; i < classSelectors.length; i++) { + stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]); + } + } + if (node.hasAttribute("id")) { + stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]); + } + function addStyle(svgName, jsName, adjustFunction) { + if (adjustFunction === void 0) adjustFunction = function copy(v) { + if (v.startsWith("url")) console.warn("SVGLoader: url access in attributes is not implemented."); + return v; + }; + if (node.hasAttribute(svgName)) style[jsName] = adjustFunction(node.getAttribute(svgName)); + if (stylesheetStyles[svgName]) style[jsName] = adjustFunction(stylesheetStyles[svgName]); + if (node.style && node.style[svgName] !== "") style[jsName] = adjustFunction(node.style[svgName]); + } + function clamp2(v) { + return Math.max(0, Math.min(1, parseFloatWithUnits(v))); + } + function positive(v) { + return Math.max(0, parseFloatWithUnits(v)); + } + addStyle("fill", "fill"); + addStyle("fill-opacity", "fillOpacity", clamp2); + addStyle("fill-rule", "fillRule"); + addStyle("opacity", "opacity", clamp2); + addStyle("stroke", "stroke"); + addStyle("stroke-opacity", "strokeOpacity", clamp2); + addStyle("stroke-width", "strokeWidth", positive); + addStyle("stroke-linejoin", "strokeLineJoin"); + addStyle("stroke-linecap", "strokeLineCap"); + addStyle("stroke-miterlimit", "strokeMiterLimit", positive); + addStyle("visibility", "visibility"); + return style; + } + function getReflection(a2, b3) { + return a2 - (b3 - a2); + } + function parseFloats(input, flags, stride) { + if (typeof input !== "string") { + throw new TypeError("Invalid input: " + typeof input); + } + const RE = { + SEPARATOR: /[ \t\r\n\,.\-+]/, + WHITESPACE: /[ \t\r\n]/, + DIGIT: /[\d]/, + SIGN: /[-+]/, + POINT: /\./, + COMMA: /,/, + EXP: /e/i, + FLAGS: /[01]/ + }; + const SEP = 0; + const INT = 1; + const FLOAT = 2; + const EXP = 3; + let state = SEP; + let seenComma = true; + let number = "", exponent = ""; + const result = []; + function throwSyntaxError(current2, i, partial2) { + const error = new SyntaxError('Unexpected character "' + current2 + '" at index ' + i + "."); + error.partial = partial2; + throw error; + } + function newNumber() { + if (number !== "") { + if (exponent === "") result.push(Number(number)); + else result.push(Number(number) * Math.pow(10, Number(exponent))); + } + number = ""; + exponent = ""; + } + let current; + const length2 = input.length; + for (let i = 0; i < length2; i++) { + current = input[i]; + if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) { + state = INT; + number = current; + newNumber(); + continue; + } + if (state === SEP) { + if (RE.WHITESPACE.test(current)) { + continue; + } + if (RE.DIGIT.test(current) || RE.SIGN.test(current)) { + state = INT; + number = current; + continue; + } + if (RE.POINT.test(current)) { + state = FLOAT; + number = current; + continue; + } + if (RE.COMMA.test(current)) { + if (seenComma) { + throwSyntaxError(current, i, result); + } + seenComma = true; + } + } + if (state === INT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.POINT.test(current)) { + number += current; + state = FLOAT; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) { + throwSyntaxError(current, i, result); + } + } + if (state === FLOAT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.POINT.test(current) && number[number.length - 1] === ".") { + throwSyntaxError(current, i, result); + } + } + if (state === EXP) { + if (RE.DIGIT.test(current)) { + exponent += current; + continue; + } + if (RE.SIGN.test(current)) { + if (exponent === "") { + exponent += current; + continue; + } + if (exponent.length === 1 && RE.SIGN.test(exponent)) { + throwSyntaxError(current, i, result); + } + } + } + if (RE.WHITESPACE.test(current)) { + newNumber(); + state = SEP; + seenComma = false; + } else if (RE.COMMA.test(current)) { + newNumber(); + state = SEP; + seenComma = true; + } else if (RE.SIGN.test(current)) { + newNumber(); + state = INT; + number = current; + } else if (RE.POINT.test(current)) { + newNumber(); + state = FLOAT; + number = current; + } else { + throwSyntaxError(current, i, result); + } + } + newNumber(); + return result; + } + const units = ["mm", "cm", "in", "pt", "pc", "px"]; + const unitConversion = { + "mm": { + "mm": 1, + "cm": 0.1, + "in": 1 / 25.4, + "pt": 72 / 25.4, + "pc": 6 / 25.4, + "px": -1 + }, + "cm": { + "mm": 10, + "cm": 1, + "in": 1 / 2.54, + "pt": 72 / 2.54, + "pc": 6 / 2.54, + "px": -1 + }, + "in": { + "mm": 25.4, + "cm": 2.54, + "in": 1, + "pt": 72, + "pc": 6, + "px": -1 + }, + "pt": { + "mm": 25.4 / 72, + "cm": 2.54 / 72, + "in": 1 / 72, + "pt": 1, + "pc": 6 / 72, + "px": -1 + }, + "pc": { + "mm": 25.4 / 6, + "cm": 2.54 / 6, + "in": 1 / 6, + "pt": 72 / 6, + "pc": 1, + "px": -1 + }, + "px": { + "px": 1 + } + }; + function parseFloatWithUnits(string) { + let theUnit = "px"; + if (typeof string === "string" || string instanceof String) { + for (let i = 0, n2 = units.length; i < n2; i++) { + const u = units[i]; + if (string.endsWith(u)) { + theUnit = u; + string = string.substring(0, string.length - u.length); + break; + } + } + } + let scale2 = void 0; + if (theUnit === "px" && scope.defaultUnit !== "px") { + scale2 = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI; + } else { + scale2 = unitConversion[theUnit][scope.defaultUnit]; + if (scale2 < 0) { + scale2 = unitConversion[theUnit]["in"] * scope.defaultDPI; + } + } + return scale2 * parseFloat(string); + } + function getNodeTransform(node) { + if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) { + return null; + } + const transform2 = parseNodeTransform(node); + if (transformStack.length > 0) { + transform2.premultiply(transformStack[transformStack.length - 1]); + } + currentTransform.copy(transform2); + transformStack.push(transform2); + return transform2; + } + function parseNodeTransform(node) { + const transform2 = new Matrix3(); + const currentTransform2 = tempTransform0; + if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) { + const tx = parseFloatWithUnits(node.getAttribute("x")); + const ty = parseFloatWithUnits(node.getAttribute("y")); + transform2.translate(tx, ty); + } + if (node.hasAttribute("transform")) { + const transformsTexts = node.getAttribute("transform").split(")"); + for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) { + const transformText = transformsTexts[tIndex].trim(); + if (transformText === "") continue; + const openParPos = transformText.indexOf("("); + const closeParPos = transformText.length; + if (openParPos > 0 && openParPos < closeParPos) { + const transformType = transformText.slice(0, openParPos); + const array = parseFloats(transformText.slice(openParPos + 1)); + currentTransform2.identity(); + switch (transformType) { + case "translate": + if (array.length >= 1) { + const tx = array[0]; + let ty = 0; + if (array.length >= 2) { + ty = array[1]; + } + currentTransform2.translate(tx, ty); + } + break; + case "rotate": + if (array.length >= 1) { + let angle = 0; + let cx = 0; + let cy = 0; + angle = array[0] * Math.PI / 180; + if (array.length >= 3) { + cx = array[1]; + cy = array[2]; + } + tempTransform1.makeTranslation(-cx, -cy); + tempTransform2.makeRotation(angle); + tempTransform3.multiplyMatrices(tempTransform2, tempTransform1); + tempTransform1.makeTranslation(cx, cy); + currentTransform2.multiplyMatrices(tempTransform1, tempTransform3); + } + break; + case "scale": + if (array.length >= 1) { + const scaleX = array[0]; + let scaleY = scaleX; + if (array.length >= 2) { + scaleY = array[1]; + } + currentTransform2.scale(scaleX, scaleY); + } + break; + case "skewX": + if (array.length === 1) { + currentTransform2.set( + 1, + Math.tan(array[0] * Math.PI / 180), + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ); + } + break; + case "skewY": + if (array.length === 1) { + currentTransform2.set( + 1, + 0, + 0, + Math.tan(array[0] * Math.PI / 180), + 1, + 0, + 0, + 0, + 1 + ); + } + break; + case "matrix": + if (array.length === 6) { + currentTransform2.set( + array[0], + array[2], + array[4], + array[1], + array[3], + array[5], + 0, + 0, + 1 + ); + } + break; + } + } + transform2.premultiply(currentTransform2); + } + } + return transform2; + } + function transformPath(path, m) { + function transfVec2(v2) { + tempV3.set(v2.x, v2.y, 1).applyMatrix3(m); + v2.set(tempV3.x, tempV3.y); + } + function transfEllipseGeneric(curve) { + const a2 = curve.xRadius; + const b3 = curve.yRadius; + const cosTheta = Math.cos(curve.aRotation); + const sinTheta = Math.sin(curve.aRotation); + const v12 = new Vector3(a2 * cosTheta, a2 * sinTheta, 0); + const v2 = new Vector3(-b3 * sinTheta, b3 * cosTheta, 0); + const f1 = v12.applyMatrix3(m); + const f2 = v2.applyMatrix3(m); + const mF = tempTransform0.set( + f1.x, + f2.x, + 0, + f1.y, + f2.y, + 0, + 0, + 0, + 1 + ); + const mFInv = tempTransform1.copy(mF).invert(); + const mFInvT = tempTransform2.copy(mFInv).transpose(); + const mQ = mFInvT.multiply(mFInv); + const mQe = mQ.elements; + const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]); + const rt1sqrt = Math.sqrt(ed.rt1); + const rt2sqrt = Math.sqrt(ed.rt2); + curve.xRadius = 1 / rt1sqrt; + curve.yRadius = 1 / rt2sqrt; + curve.aRotation = Math.atan2(ed.sn, ed.cs); + const isFullEllipse = (curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON; + if (!isFullEllipse) { + const mDsqrt = tempTransform1.set( + rt1sqrt, + 0, + 0, + 0, + rt2sqrt, + 0, + 0, + 0, + 1 + ); + const mRT = tempTransform2.set( + ed.cs, + ed.sn, + 0, + -ed.sn, + ed.cs, + 0, + 0, + 0, + 1 + ); + const mDRF = mDsqrt.multiply(mRT).multiply(mF); + const transformAngle = (phi) => { + const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF); + return Math.atan2(sinR, cosR); + }; + curve.aStartAngle = transformAngle(curve.aStartAngle); + curve.aEndAngle = transformAngle(curve.aEndAngle); + if (isTransformFlipped(m)) { + curve.aClockwise = !curve.aClockwise; + } + } + } + function transfEllipseNoSkew(curve) { + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + curve.xRadius *= sx; + curve.yRadius *= sy; + const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]); + curve.aRotation += theta; + if (isTransformFlipped(m)) { + curve.aStartAngle *= -1; + curve.aEndAngle *= -1; + curve.aClockwise = !curve.aClockwise; + } + } + const subPaths = path.subPaths; + for (let i = 0, n2 = subPaths.length; i < n2; i++) { + const subPath = subPaths[i]; + const curves = subPath.curves; + for (let j = 0; j < curves.length; j++) { + const curve = curves[j]; + if (curve.isLineCurve) { + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isCubicBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + transfVec2(curve.v3); + } else if (curve.isQuadraticBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isEllipseCurve) { + tempV2.set(curve.aX, curve.aY); + transfVec2(tempV2); + curve.aX = tempV2.x; + curve.aY = tempV2.y; + if (isTransformSkewed(m)) { + transfEllipseGeneric(curve); + } else { + transfEllipseNoSkew(curve); + } + } + } + } + } + function isTransformFlipped(m) { + const te2 = m.elements; + return te2[0] * te2[4] - te2[1] * te2[3] < 0; + } + function isTransformSkewed(m) { + const te2 = m.elements; + const basisDot = te2[0] * te2[3] + te2[1] * te2[4]; + if (basisDot === 0) return false; + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + return Math.abs(basisDot / (sx * sy)) > Number.EPSILON; + } + function getTransformScaleX(m) { + const te2 = m.elements; + return Math.sqrt(te2[0] * te2[0] + te2[1] * te2[1]); + } + function getTransformScaleY(m) { + const te2 = m.elements; + return Math.sqrt(te2[3] * te2[3] + te2[4] * te2[4]); + } + function eigenDecomposition(A2, B2, C2) { + let rt1, rt2, cs, sn, t3; + const sm = A2 + C2; + const df = A2 - C2; + const rt = Math.sqrt(df * df + 4 * B2 * B2); + if (sm > 0) { + rt1 = 0.5 * (sm + rt); + t3 = 1 / rt1; + rt2 = A2 * t3 * C2 - B2 * t3 * B2; + } else if (sm < 0) { + rt2 = 0.5 * (sm - rt); + } else { + rt1 = 0.5 * rt; + rt2 = -0.5 * rt; + } + if (df > 0) { + cs = df + rt; + } else { + cs = df - rt; + } + if (Math.abs(cs) > 2 * Math.abs(B2)) { + t3 = -2 * B2 / cs; + sn = 1 / Math.sqrt(1 + t3 * t3); + cs = t3 * sn; + } else if (Math.abs(B2) === 0) { + cs = 1; + sn = 0; + } else { + t3 = -0.5 * cs / B2; + cs = 1 / Math.sqrt(1 + t3 * t3); + sn = t3 * cs; + } + if (df > 0) { + t3 = cs; + cs = -sn; + sn = t3; + } + return { rt1, rt2, cs, sn }; + } + const paths = []; + const stylesheets = {}; + const transformStack = []; + const tempTransform0 = new Matrix3(); + const tempTransform1 = new Matrix3(); + const tempTransform2 = new Matrix3(); + const tempTransform3 = new Matrix3(); + const tempV2 = new Vector2(); + const tempV3 = new Vector3(); + const currentTransform = new Matrix3(); + const xml = new DOMParser().parseFromString(text2, "image/svg+xml"); + parseNode(xml.documentElement, { + fill: "#000", + fillOpacity: 1, + strokeOpacity: 1, + strokeWidth: 1, + strokeLineJoin: "miter", + strokeLineCap: "butt", + strokeMiterLimit: 4 + }); + const data2 = { paths, xml: xml.documentElement }; + return data2; + } + static createShapes(shapePath) { + const BIGNUMBER = 999999999; + const IntersectionLocationType = { + ORIGIN: 0, + DESTINATION: 1, + BETWEEN: 2, + LEFT: 3, + RIGHT: 4, + BEHIND: 5, + BEYOND: 6 + }; + const classifyResult = { + loc: IntersectionLocationType.ORIGIN, + t: 0 + }; + function findEdgeIntersection(a0, a1, b0, b1) { + const x1 = a0.x; + const x2 = a1.x; + const x3 = b0.x; + const x4 = b1.x; + const y1 = a0.y; + const y2 = a1.y; + const y3 = b0.y; + const y4 = b1.y; + const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); + const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); + const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + const t1 = nom1 / denom; + const t22 = nom2 / denom; + if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t22 < 0 || t22 > 1) { + return null; + } else if (nom1 === 0 && denom === 0) { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { x: point.x, y: point.y, t: classifyResult.t }; + } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) { + const x5 = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10); + const y5 = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10); + return { x: x5, y: y5, t: classifyResult.t }; + } + } + return null; + } else { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { x: point.x, y: point.y, t: classifyResult.t }; + } + } + const x5 = +(x1 + t1 * (x2 - x1)).toPrecision(10); + const y5 = +(y1 + t1 * (y2 - y1)).toPrecision(10); + return { x: x5, y: y5, t: t1 }; + } + } + function classifyPoint(p2, edgeStart, edgeEnd) { + const ax = edgeEnd.x - edgeStart.x; + const ay = edgeEnd.y - edgeStart.y; + const bx = p2.x - edgeStart.x; + const by = p2.y - edgeStart.y; + const sa = ax * by - bx * ay; + if (p2.x === edgeStart.x && p2.y === edgeStart.y) { + classifyResult.loc = IntersectionLocationType.ORIGIN; + classifyResult.t = 0; + return; + } + if (p2.x === edgeEnd.x && p2.y === edgeEnd.y) { + classifyResult.loc = IntersectionLocationType.DESTINATION; + classifyResult.t = 1; + return; + } + if (sa < -Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.LEFT; + return; + } + if (sa > Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.RIGHT; + return; + } + if (ax * bx < 0 || ay * by < 0) { + classifyResult.loc = IntersectionLocationType.BEHIND; + return; + } + if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) { + classifyResult.loc = IntersectionLocationType.BEYOND; + return; + } + let t3; + if (ax !== 0) { + t3 = bx / ax; + } else { + t3 = by / ay; + } + classifyResult.loc = IntersectionLocationType.BETWEEN; + classifyResult.t = t3; + } + function getIntersections(path1, path2) { + const intersectionsRaw = []; + const intersections = []; + for (let index2 = 1; index2 < path1.length; index2++) { + const path1EdgeStart = path1[index2 - 1]; + const path1EdgeEnd = path1[index2]; + for (let index22 = 1; index22 < path2.length; index22++) { + const path2EdgeStart = path2[index22 - 1]; + const path2EdgeEnd = path2[index22]; + const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd); + if (intersection !== null && intersectionsRaw.find((i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON) === void 0) { + intersectionsRaw.push(intersection); + intersections.push(new Vector2(intersection.x, intersection.y)); + } + } + } + return intersections; + } + function getScanlineIntersections(scanline, boundingBox, paths) { + const center = new Vector2(); + boundingBox.getCenter(center); + const allIntersections = []; + paths.forEach((path) => { + if (path.boundingBox.containsPoint(center)) { + const intersections = getIntersections(scanline, path.points); + intersections.forEach((p2) => { + allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p2 }); + }); + } + }); + allIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + return allIntersections; + } + function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) { + if (_fillRule === null || _fillRule === void 0 || _fillRule === "") { + _fillRule = "nonzero"; + } + const centerBoundingBox = new Vector2(); + simplePath.boundingBox.getCenter(centerBoundingBox); + const scanline = [new Vector2(scanlineMinX2, centerBoundingBox.y), new Vector2(scanlineMaxX2, centerBoundingBox.y)]; + const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths); + scanlineIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + const baseIntersections = []; + const otherIntersections = []; + scanlineIntersections.forEach((i2) => { + if (i2.identifier === simplePath.identifier) { + baseIntersections.push(i2); + } else { + otherIntersections.push(i2); + } + }); + const firstXOfPath = baseIntersections[0].point.x; + const stack = []; + let i = 0; + while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) { + if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) { + stack.pop(); + } else { + stack.push(otherIntersections[i].identifier); + } + i++; + } + stack.push(simplePath.identifier); + if (_fillRule === "evenodd") { + const isHole = stack.length % 2 === 0 ? true : false; + const isHoleFor = stack[stack.length - 2]; + return { identifier: simplePath.identifier, isHole, for: isHoleFor }; + } else if (_fillRule === "nonzero") { + let isHole = true; + let isHoleFor = null; + let lastCWValue = null; + for (let i2 = 0; i2 < stack.length; i2++) { + const identifier = stack[i2]; + if (isHole) { + lastCWValue = allPaths[identifier].isCW; + isHole = false; + isHoleFor = identifier; + } else if (lastCWValue !== allPaths[identifier].isCW) { + lastCWValue = allPaths[identifier].isCW; + isHole = true; + } + } + return { identifier: simplePath.identifier, isHole, for: isHoleFor }; + } else { + console.warn('fill-rule: "' + _fillRule + '" is currently not implemented.'); + } + } + let scanlineMinX = BIGNUMBER; + let scanlineMaxX = -BIGNUMBER; + let simplePaths = shapePath.subPaths.map((p2) => { + const points = p2.getPoints(); + let maxY = -BIGNUMBER; + let minY = BIGNUMBER; + let maxX = -BIGNUMBER; + let minX = BIGNUMBER; + for (let i = 0; i < points.length; i++) { + const p3 = points[i]; + if (p3.y > maxY) { + maxY = p3.y; + } + if (p3.y < minY) { + minY = p3.y; + } + if (p3.x > maxX) { + maxX = p3.x; + } + if (p3.x < minX) { + minX = p3.x; + } + } + if (scanlineMaxX <= maxX) { + scanlineMaxX = maxX + 1; + } + if (scanlineMinX >= minX) { + scanlineMinX = minX - 1; + } + return { curves: p2.curves, points, isCW: ShapeUtils.isClockWise(points), identifier: -1, boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY)) }; + }); + simplePaths = simplePaths.filter((sp) => sp.points.length > 1); + for (let identifier = 0; identifier < simplePaths.length; identifier++) { + simplePaths[identifier].identifier = identifier; + } + const isAHole = simplePaths.map((p2) => isHoleTo(p2, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData ? shapePath.userData.style.fillRule : void 0)); + const shapesToReturn = []; + simplePaths.forEach((p2) => { + const amIAHole = isAHole[p2.identifier]; + if (!amIAHole.isHole) { + const shape = new Shape(); + shape.curves = p2.curves; + const holes = isAHole.filter((h) => h.isHole && h.for === p2.identifier); + holes.forEach((h) => { + const hole = simplePaths[h.identifier]; + const path = new Path(); + path.curves = hole.curves; + shape.holes.push(path); + }); + shapesToReturn.push(shape); + } + }); + return shapesToReturn; + } + static getStrokeStyle(width2, color, lineJoin, lineCap, miterLimit) { + width2 = width2 !== void 0 ? width2 : 1; + color = color !== void 0 ? color : "#000"; + lineJoin = lineJoin !== void 0 ? lineJoin : "miter"; + lineCap = lineCap !== void 0 ? lineCap : "butt"; + miterLimit = miterLimit !== void 0 ? miterLimit : 4; + return { + strokeColor: color, + strokeWidth: width2, + strokeLineJoin: lineJoin, + strokeLineCap: lineCap, + strokeMiterLimit: miterLimit + }; + } + static pointsToStroke(points, style, arcDivisions, minDistance) { + const vertices = []; + const normals = []; + const uvs = []; + if (_SVGLoader.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) { + return null; + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + return geometry; + } + static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) { + const tempV2_1 = new Vector2(); + const tempV2_2 = new Vector2(); + const tempV2_3 = new Vector2(); + const tempV2_4 = new Vector2(); + const tempV2_5 = new Vector2(); + const tempV2_6 = new Vector2(); + const tempV2_7 = new Vector2(); + const lastPointL = new Vector2(); + const lastPointR = new Vector2(); + const point0L = new Vector2(); + const point0R = new Vector2(); + const currentPointL = new Vector2(); + const currentPointR = new Vector2(); + const nextPointL = new Vector2(); + const nextPointR = new Vector2(); + const innerPoint = new Vector2(); + const outerPoint = new Vector2(); + arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12; + minDistance = minDistance !== void 0 ? minDistance : 1e-3; + vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0; + points = removeDuplicatedPoints(points); + const numPoints = points.length; + if (numPoints < 2) return 0; + const isClosed = points[0].equals(points[numPoints - 1]); + let currentPoint; + let previousPoint = points[0]; + let nextPoint; + const strokeWidth2 = style.strokeWidth / 2; + const deltaU = 1 / (numPoints - 1); + let u0 = 0, u1; + let innerSideModified; + let joinIsOnLeftSide; + let isMiter; + let initialJoinIsOnLeftSide = false; + let numVertices = 0; + let currentCoordinate = vertexOffset * 3; + let currentCoordinateUV = vertexOffset * 2; + getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2); + lastPointL.copy(points[0]).sub(tempV2_1); + lastPointR.copy(points[0]).add(tempV2_1); + point0L.copy(lastPointL); + point0R.copy(lastPointR); + for (let iPoint = 1; iPoint < numPoints; iPoint++) { + currentPoint = points[iPoint]; + if (iPoint === numPoints - 1) { + if (isClosed) { + nextPoint = points[1]; + } else nextPoint = void 0; + } else { + nextPoint = points[iPoint + 1]; + } + const normal1 = tempV2_1; + getNormal(previousPoint, currentPoint, normal1); + tempV2_3.copy(normal1).multiplyScalar(strokeWidth2); + currentPointL.copy(currentPoint).sub(tempV2_3); + currentPointR.copy(currentPoint).add(tempV2_3); + u1 = u0 + deltaU; + innerSideModified = false; + if (nextPoint !== void 0) { + getNormal(currentPoint, nextPoint, tempV2_2); + tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2); + nextPointL.copy(currentPoint).sub(tempV2_3); + nextPointR.copy(currentPoint).add(tempV2_3); + joinIsOnLeftSide = true; + tempV2_3.subVectors(nextPoint, previousPoint); + if (normal1.dot(tempV2_3) < 0) { + joinIsOnLeftSide = false; + } + if (iPoint === 1) initialJoinIsOnLeftSide = joinIsOnLeftSide; + tempV2_3.subVectors(nextPoint, currentPoint); + tempV2_3.normalize(); + const dot = Math.abs(normal1.dot(tempV2_3)); + if (dot > Number.EPSILON) { + const miterSide = strokeWidth2 / dot; + tempV2_3.multiplyScalar(-miterSide); + tempV2_4.subVectors(currentPoint, previousPoint); + tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3); + innerPoint.copy(tempV2_5).negate(); + const miterLength2 = tempV2_5.length(); + const segmentLengthPrev = tempV2_4.length(); + tempV2_4.divideScalar(segmentLengthPrev); + tempV2_6.subVectors(nextPoint, currentPoint); + const segmentLengthNext = tempV2_6.length(); + tempV2_6.divideScalar(segmentLengthNext); + if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) { + innerSideModified = true; + } + outerPoint.copy(tempV2_5).add(currentPoint); + innerPoint.add(currentPoint); + isMiter = false; + if (innerSideModified) { + if (joinIsOnLeftSide) { + nextPointR.copy(innerPoint); + currentPointR.copy(innerPoint); + } else { + nextPointL.copy(innerPoint); + currentPointL.copy(innerPoint); + } + } else { + makeSegmentTriangles(); + } + switch (style.strokeLineJoin) { + case "bevel": + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + case "round": + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) { + makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0); + } else { + makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1); + } + break; + case "miter": + case "miter-clip": + default: + const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2; + if (miterFraction < 1) { + if (style.strokeLineJoin !== "miter-clip") { + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + } else { + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) { + tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL); + tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL); + addVertex(currentPointL, u1, 0); + addVertex(tempV2_6, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_6, u1, 0); + addVertex(tempV2_7, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_7, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR); + tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR); + addVertex(currentPointR, u1, 1); + addVertex(tempV2_6, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_6, u1, 1); + addVertex(tempV2_7, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(tempV2_7, u1, 1); + addVertex(nextPointR, u1, 1); + } + } + } else { + if (innerSideModified) { + if (joinIsOnLeftSide) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(outerPoint, u1, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(outerPoint, u1, 1); + } + if (joinIsOnLeftSide) { + nextPointL.copy(outerPoint); + } else { + nextPointR.copy(outerPoint); + } + } else { + if (joinIsOnLeftSide) { + addVertex(currentPointL, u1, 0); + addVertex(outerPoint, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(outerPoint, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + addVertex(currentPointR, u1, 1); + addVertex(outerPoint, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(outerPoint, u1, 1); + addVertex(nextPointR, u1, 1); + } + } + isMiter = true; + } + break; + } + } else { + makeSegmentTriangles(); + } + } else { + makeSegmentTriangles(); + } + if (!isClosed && iPoint === numPoints - 1) { + addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0); + } + u0 = u1; + previousPoint = currentPoint; + lastPointL.copy(nextPointL); + lastPointR.copy(nextPointR); + } + if (!isClosed) { + addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1); + } else if (innerSideModified && vertices) { + let lastOuter = outerPoint; + let lastInner = innerPoint; + if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) { + lastOuter = innerPoint; + lastInner = outerPoint; + } + if (joinIsOnLeftSide) { + if (isMiter || initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 0 * 3); + lastInner.toArray(vertices, 3 * 3); + if (isMiter) { + lastOuter.toArray(vertices, 1 * 3); + } + } + } else { + if (isMiter || !initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 1 * 3); + lastInner.toArray(vertices, 3 * 3); + if (isMiter) { + lastOuter.toArray(vertices, 0 * 3); + } + } + } + } + return numVertices; + function getNormal(p1, p2, result) { + result.subVectors(p2, p1); + return result.set(-result.y, result.x).normalize(); + } + function addVertex(position2, u, v) { + if (vertices) { + vertices[currentCoordinate] = position2.x; + vertices[currentCoordinate + 1] = position2.y; + vertices[currentCoordinate + 2] = 0; + if (normals) { + normals[currentCoordinate] = 0; + normals[currentCoordinate + 1] = 0; + normals[currentCoordinate + 2] = 1; + } + currentCoordinate += 3; + if (uvs) { + uvs[currentCoordinateUV] = u; + uvs[currentCoordinateUV + 1] = v; + currentCoordinateUV += 2; + } + } + numVertices += 3; + } + function makeCircularSector(center, p1, p2, u, v) { + tempV2_1.copy(p1).sub(center).normalize(); + tempV2_2.copy(p2).sub(center).normalize(); + let angle = Math.PI; + const dot = tempV2_1.dot(tempV2_2); + if (Math.abs(dot) < 1) angle = Math.abs(Math.acos(dot)); + angle /= arcDivisions; + tempV2_3.copy(p1); + for (let i = 0, il = arcDivisions - 1; i < il; i++) { + tempV2_4.copy(tempV2_3).rotateAround(center, angle); + addVertex(tempV2_3, u, v); + addVertex(tempV2_4, u, v); + addVertex(center, u, 0.5); + tempV2_3.copy(tempV2_4); + } + addVertex(tempV2_4, u, v); + addVertex(p2, u, v); + addVertex(center, u, 0.5); + } + function makeSegmentTriangles() { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(currentPointR, u1, 1); + } + function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) { + if (innerSideModified2) { + if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(innerPoint, u, 0.5); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u, 1); + addVertex(innerPoint, u, 0); + addVertex(nextPointR, u, 1); + } + } else { + if (joinIsOnLeftSide2) { + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(currentPoint, u, 0.5); + } else { + addVertex(currentPointR, u, 1); + addVertex(nextPointR, u, 0); + addVertex(currentPoint, u, 0.5); + } + } + } + function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) { + if (innerSideModified2) { + if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u0, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(innerPoint, u1, 1); + addVertex(currentPoint, u1, 0.5); + addVertex(nextPointL, u0, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u0, 1); + addVertex(innerPoint, u1, 0); + addVertex(currentPoint, u1, 0.5); + addVertex(currentPoint, u1, 0.5); + addVertex(innerPoint, u1, 0); + addVertex(nextPointR, u0, 1); + } + } + } + function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) { + switch (style.strokeLineCap) { + case "round": + if (start) { + makeCircularSector(center, p2, p1, u, 0.5); + } else { + makeCircularSector(center, p1, p2, u, 0.5); + } + break; + case "square": + if (start) { + tempV2_1.subVectors(p1, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, 1 * 3); + tempV2_4.toArray(vertices, 0 * 3); + tempV2_4.toArray(vertices, 3 * 3); + } else { + tempV2_3.toArray(vertices, 1 * 3); + uvs[3 * 2 + 1] === 1 ? tempV2_4.toArray(vertices, 3 * 3) : tempV2_3.toArray(vertices, 3 * 3); + tempV2_4.toArray(vertices, 0 * 3); + } + } else { + tempV2_1.subVectors(p2, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + const vl = vertices.length; + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, vl - 1 * 3); + tempV2_4.toArray(vertices, vl - 2 * 3); + tempV2_4.toArray(vertices, vl - 4 * 3); + } else { + tempV2_4.toArray(vertices, vl - 2 * 3); + tempV2_3.toArray(vertices, vl - 1 * 3); + tempV2_4.toArray(vertices, vl - 4 * 3); + } + } + break; + case "butt": + default: + break; + } + } + function removeDuplicatedPoints(points2) { + let dupPoints = false; + for (let i = 1, n2 = points2.length - 1; i < n2; i++) { + if (points2[i].distanceTo(points2[i + 1]) < minDistance) { + dupPoints = true; + break; + } + } + if (!dupPoints) return points2; + const newPoints = []; + newPoints.push(points2[0]); + for (let i = 1, n2 = points2.length - 1; i < n2; i++) { + if (points2[i].distanceTo(points2[i + 1]) >= minDistance) { + newPoints.push(points2[i]); + } + } + newPoints.push(points2[points2.length - 1]); + return newPoints; + } + } +}; + +// node_modules/three/examples/jsm/loaders/TDSLoader.js +var TDSLoader = class extends Loader { + constructor(manager) { + super(manager); + this.debug = false; + this.group = null; + this.materials = []; + this.meshes = []; + } + /** + * Load 3ds file from url. + * + * @method load + * @param {[type]} url URL for the file. + * @param {Function} onLoad onLoad callback, receives group Object3D as argument. + * @param {Function} onProgress onProgress callback. + * @param {Function} onError onError callback. + */ + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data2) { + try { + onLoad(scope.parse(data2, path)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + /** + * Parse arraybuffer data and load 3ds file. + * + * @method parse + * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. + * @param {String} path Path for external resources. + * @return {Group} Group loaded from 3ds file. + */ + parse(arraybuffer, path) { + this.group = new Group(); + this.materials = []; + this.meshes = []; + this.readFile(arraybuffer, path); + for (let i = 0; i < this.meshes.length; i++) { + this.group.add(this.meshes[i]); + } + return this.group; + } + /** + * Decode file content to read 3ds data. + * + * @method readFile + * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. + * @param {String} path Path for external resources. + */ + readFile(arraybuffer, path) { + const data2 = new DataView(arraybuffer); + const chunk = new Chunk(data2, 0, this.debugMessage); + if (chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC) { + let next = chunk.readChunk(); + while (next) { + if (next.id === M3D_VERSION) { + const version = next.readDWord(); + this.debugMessage("3DS file version: " + version); + } else if (next.id === MDATA) { + this.readMeshData(next, path); + } else { + this.debugMessage("Unknown main chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + this.debugMessage("Parsed " + this.meshes.length + " meshes"); + } + /** + * Read mesh data chunk. + * + * @method readMeshData + * @param {Chunk} chunk to read mesh from + * @param {String} path Path for external resources. + */ + readMeshData(chunk, path) { + let next = chunk.readChunk(); + while (next) { + if (next.id === MESH_VERSION) { + const version = +next.readDWord(); + this.debugMessage("Mesh Version: " + version); + } else if (next.id === MASTER_SCALE) { + const scale2 = next.readFloat(); + this.debugMessage("Master scale: " + scale2); + this.group.scale.set(scale2, scale2, scale2); + } else if (next.id === NAMED_OBJECT) { + this.debugMessage("Named Object"); + this.readNamedObject(next); + } else if (next.id === MAT_ENTRY) { + this.debugMessage("Material"); + this.readMaterialEntry(next, path); + } else { + this.debugMessage("Unknown MDATA chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + /** + * Read named object chunk. + * + * @method readNamedObject + * @param {Chunk} chunk Chunk in use. + */ + readNamedObject(chunk) { + const name2 = chunk.readString(); + let next = chunk.readChunk(); + while (next) { + if (next.id === N_TRI_OBJECT) { + const mesh = this.readMesh(next); + mesh.name = name2; + this.meshes.push(mesh); + } else { + this.debugMessage("Unknown named object chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + } + /** + * Read material data chunk and add it to the material list. + * + * @method readMaterialEntry + * @param {Chunk} chunk Chunk in use. + * @param {String} path Path for external resources. + */ + readMaterialEntry(chunk, path) { + let next = chunk.readChunk(); + const material = new MeshPhongMaterial(); + while (next) { + if (next.id === MAT_NAME) { + material.name = next.readString(); + this.debugMessage(" Name: " + material.name); + } else if (next.id === MAT_WIRE) { + this.debugMessage(" Wireframe"); + material.wireframe = true; + } else if (next.id === MAT_WIRE_SIZE) { + const value2 = next.readByte(); + material.wireframeLinewidth = value2; + this.debugMessage(" Wireframe Thickness: " + value2); + } else if (next.id === MAT_TWO_SIDE) { + material.side = DoubleSide; + this.debugMessage(" DoubleSided"); + } else if (next.id === MAT_ADDITIVE) { + this.debugMessage(" Additive Blending"); + material.blending = AdditiveBlending; + } else if (next.id === MAT_DIFFUSE) { + this.debugMessage(" Diffuse Color"); + material.color = this.readColor(next); + } else if (next.id === MAT_SPECULAR) { + this.debugMessage(" Specular Color"); + material.specular = this.readColor(next); + } else if (next.id === MAT_AMBIENT) { + this.debugMessage(" Ambient color"); + material.color = this.readColor(next); + } else if (next.id === MAT_SHININESS) { + const shininess = this.readPercentage(next); + material.shininess = shininess * 100; + this.debugMessage(" Shininess : " + shininess); + } else if (next.id === MAT_TRANSPARENCY) { + const transparency = this.readPercentage(next); + material.opacity = 1 - transparency; + this.debugMessage(" Transparency : " + transparency); + material.transparent = material.opacity < 1 ? true : false; + } else if (next.id === MAT_TEXMAP) { + this.debugMessage(" ColorMap"); + material.map = this.readMap(next, path); + } else if (next.id === MAT_BUMPMAP) { + this.debugMessage(" BumpMap"); + material.bumpMap = this.readMap(next, path); + } else if (next.id === MAT_OPACMAP) { + this.debugMessage(" OpacityMap"); + material.alphaMap = this.readMap(next, path); + } else if (next.id === MAT_SPECMAP) { + this.debugMessage(" SpecularMap"); + material.specularMap = this.readMap(next, path); + } else { + this.debugMessage(" Unknown material chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + this.materials[material.name] = material; + } + /** + * Read mesh data chunk. + * + * @method readMesh + * @param {Chunk} chunk Chunk in use. + * @return {Mesh} The parsed mesh. + */ + readMesh(chunk) { + let next = chunk.readChunk(); + const geometry = new BufferGeometry(); + const material = new MeshPhongMaterial(); + const mesh = new Mesh(geometry, material); + mesh.name = "mesh"; + while (next) { + if (next.id === POINT_ARRAY) { + const points = next.readWord(); + this.debugMessage(" Vertex: " + points); + const vertices = []; + for (let i = 0; i < points; i++) { + vertices.push(next.readFloat()); + vertices.push(next.readFloat()); + vertices.push(next.readFloat()); + } + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + } else if (next.id === FACE_ARRAY) { + this.readFaceArray(next, mesh); + } else if (next.id === TEX_VERTS) { + const texels = next.readWord(); + this.debugMessage(" UV: " + texels); + const uvs = []; + for (let i = 0; i < texels; i++) { + uvs.push(next.readFloat()); + uvs.push(next.readFloat()); + } + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } else if (next.id === MESH_MATRIX) { + this.debugMessage(" Tranformation Matrix (TODO)"); + const values2 = []; + for (let i = 0; i < 12; i++) { + values2[i] = next.readFloat(); + } + const matrix3 = new Matrix4(); + matrix3.elements[0] = values2[0]; + matrix3.elements[1] = values2[6]; + matrix3.elements[2] = values2[3]; + matrix3.elements[3] = values2[9]; + matrix3.elements[4] = values2[2]; + matrix3.elements[5] = values2[8]; + matrix3.elements[6] = values2[5]; + matrix3.elements[7] = values2[11]; + matrix3.elements[8] = values2[1]; + matrix3.elements[9] = values2[7]; + matrix3.elements[10] = values2[4]; + matrix3.elements[11] = values2[10]; + matrix3.elements[12] = 0; + matrix3.elements[13] = 0; + matrix3.elements[14] = 0; + matrix3.elements[15] = 1; + matrix3.transpose(); + const inverse2 = new Matrix4(); + inverse2.copy(matrix3).invert(); + geometry.applyMatrix4(inverse2); + matrix3.decompose(mesh.position, mesh.quaternion, mesh.scale); + } else { + this.debugMessage(" Unknown mesh chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + geometry.computeVertexNormals(); + return mesh; + } + /** + * Read face array data chunk. + * + * @method readFaceArray + * @param {Chunk} chunk Chunk in use. + * @param {Mesh} mesh Mesh to be filled with the data read. + */ + readFaceArray(chunk, mesh) { + const faces = chunk.readWord(); + this.debugMessage(" Faces: " + faces); + const index2 = []; + for (let i = 0; i < faces; ++i) { + index2.push(chunk.readWord(), chunk.readWord(), chunk.readWord()); + chunk.readWord(); + } + mesh.geometry.setIndex(index2); + let materialIndex = 0; + let start = 0; + while (!chunk.endOfChunk) { + const subchunk = chunk.readChunk(); + if (subchunk.id === MSH_MAT_GROUP) { + this.debugMessage(" Material Group"); + const group = this.readMaterialGroup(subchunk); + const count = group.index.length * 3; + mesh.geometry.addGroup(start, count, materialIndex); + start += count; + materialIndex++; + const material = this.materials[group.name]; + if (Array.isArray(mesh.material) === false) mesh.material = []; + if (material !== void 0) { + mesh.material.push(material); + } + } else { + this.debugMessage(" Unknown face array chunk: " + subchunk.hexId); + } + } + if (mesh.material.length === 1) mesh.material = mesh.material[0]; + } + /** + * Read texture map data chunk. + * + * @method readMap + * @param {Chunk} chunk Chunk in use. + * @param {String} path Path for external resources. + * @return {Texture} Texture read from this data chunk. + */ + readMap(chunk, path) { + let next = chunk.readChunk(); + let texture = {}; + const loader = new TextureLoader(this.manager); + loader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); + while (next) { + if (next.id === MAT_MAPNAME) { + const name2 = next.readString(); + texture = loader.load(name2); + this.debugMessage(" File: " + path + name2); + } else if (next.id === MAT_MAP_UOFFSET) { + texture.offset.x = next.readFloat(); + this.debugMessage(" OffsetX: " + texture.offset.x); + } else if (next.id === MAT_MAP_VOFFSET) { + texture.offset.y = next.readFloat(); + this.debugMessage(" OffsetY: " + texture.offset.y); + } else if (next.id === MAT_MAP_USCALE) { + texture.repeat.x = next.readFloat(); + this.debugMessage(" RepeatX: " + texture.repeat.x); + } else if (next.id === MAT_MAP_VSCALE) { + texture.repeat.y = next.readFloat(); + this.debugMessage(" RepeatY: " + texture.repeat.y); + } else { + this.debugMessage(" Unknown map chunk: " + next.hexId); + } + next = chunk.readChunk(); + } + return texture; + } + /** + * Read material group data chunk. + * + * @method readMaterialGroup + * @param {Chunk} chunk Chunk in use. + * @return {Object} Object with name and index of the object. + */ + readMaterialGroup(chunk) { + const name2 = chunk.readString(); + const numFaces = chunk.readWord(); + this.debugMessage(" Name: " + name2); + this.debugMessage(" Faces: " + numFaces); + const index2 = []; + for (let i = 0; i < numFaces; ++i) { + index2.push(chunk.readWord()); + } + return { name: name2, index: index2 }; + } + /** + * Read a color value. + * + * @method readColor + * @param {Chunk} chunk Chunk. + * @return {Color} Color value read.. + */ + readColor(chunk) { + const subChunk = chunk.readChunk(); + const color = new Color(); + if (subChunk.id === COLOR_24 || subChunk.id === LIN_COLOR_24) { + const r = subChunk.readByte(); + const g2 = subChunk.readByte(); + const b3 = subChunk.readByte(); + color.setRGB(r / 255, g2 / 255, b3 / 255); + this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); + } else if (subChunk.id === COLOR_F || subChunk.id === LIN_COLOR_F) { + const r = subChunk.readFloat(); + const g2 = subChunk.readFloat(); + const b3 = subChunk.readFloat(); + color.setRGB(r, g2, b3); + this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); + } else { + this.debugMessage(" Unknown color chunk: " + subChunk.hexId); + } + return color; + } + /** + * Read percentage value. + * + * @method readPercentage + * @param {Chunk} chunk Chunk to read data from. + * @return {Number} Data read from the dataview. + */ + readPercentage(chunk) { + const subChunk = chunk.readChunk(); + switch (subChunk.id) { + case INT_PERCENTAGE: + return subChunk.readShort() / 100; + break; + case FLOAT_PERCENTAGE: + return subChunk.readFloat(); + break; + default: + this.debugMessage(" Unknown percentage chunk: " + subChunk.hexId); + return 0; + } + } + /** + * Print debug message to the console. + * + * Is controlled by a flag to show or hide debug messages. + * + * @method debugMessage + * @param {Object} message Debug message to print to the console. + */ + debugMessage(message) { + if (this.debug) { + console.log(message); + } + } +}; +var Chunk = class _Chunk { + /** + * Create a new chunk + * + * @class Chunk + * @param {DataView} data DataView to read from. + * @param {Number} position in data. + * @param {Function} debugMessage logging callback. + */ + constructor(data2, position2, debugMessage) { + this.data = data2; + this.offset = position2; + this.position = position2; + this.debugMessage = debugMessage; + if (this.debugMessage instanceof Function) { + this.debugMessage = function() { + }; + } + this.id = this.readWord(); + this.size = this.readDWord(); + this.end = this.offset + this.size; + if (this.end > data2.byteLength) { + this.debugMessage("Bad chunk size for chunk at " + position2); + } + } + /** + * read a sub cchunk. + * + * @method readChunk + * @return {Chunk | null} next sub chunk + */ + readChunk() { + if (this.endOfChunk) { + return null; + } + try { + const next = new _Chunk(this.data, this.position, this.debugMessage); + this.position += next.size; + return next; + } catch (e) { + this.debugMessage("Unable to read chunk at " + this.position); + return null; + } + } + /** + * return the ID of this chunk as Hex + * + * @method idToString + * @return {String} hex-string of id + */ + get hexId() { + return this.id.toString(16); + } + get endOfChunk() { + return this.position >= this.end; + } + /** + * Read byte value. + * + * @method readByte + * @return {Number} Data read from the dataview. + */ + readByte() { + const v = this.data.getUint8(this.position, true); + this.position += 1; + return v; + } + /** + * Read 32 bit float value. + * + * @method readFloat + * @return {Number} Data read from the dataview. + */ + readFloat() { + try { + const v = this.data.getFloat32(this.position, true); + this.position += 4; + return v; + } catch (e) { + this.debugMessage(e + " " + this.position + " " + this.data.byteLength); + return 0; + } + } + /** + * Read 32 bit signed integer value. + * + * @method readInt + * @return {Number} Data read from the dataview. + */ + readInt() { + const v = this.data.getInt32(this.position, true); + this.position += 4; + return v; + } + /** + * Read 16 bit signed integer value. + * + * @method readShort + * @return {Number} Data read from the dataview. + */ + readShort() { + const v = this.data.getInt16(this.position, true); + this.position += 2; + return v; + } + /** + * Read 64 bit unsigned integer value. + * + * @method readDWord + * @return {Number} Data read from the dataview. + */ + readDWord() { + const v = this.data.getUint32(this.position, true); + this.position += 4; + return v; + } + /** + * Read 32 bit unsigned integer value. + * + * @method readWord + * @return {Number} Data read from the dataview. + */ + readWord() { + const v = this.data.getUint16(this.position, true); + this.position += 2; + return v; + } + /** + * Read NULL terminated ASCII string value from chunk-pos. + * + * @method readString + * @return {String} Data read from the dataview. + */ + readString() { + let s = ""; + let c2 = this.readByte(); + while (c2) { + s += String.fromCharCode(c2); + c2 = this.readByte(); + } + return s; + } +}; +var M3DMAGIC = 19789; +var MLIBMAGIC = 15786; +var CMAGIC = 49725; +var M3D_VERSION = 2; +var COLOR_F = 16; +var COLOR_24 = 17; +var LIN_COLOR_24 = 18; +var LIN_COLOR_F = 19; +var INT_PERCENTAGE = 48; +var FLOAT_PERCENTAGE = 49; +var MDATA = 15677; +var MESH_VERSION = 15678; +var MASTER_SCALE = 256; +var MAT_ENTRY = 45055; +var MAT_NAME = 40960; +var MAT_AMBIENT = 40976; +var MAT_DIFFUSE = 40992; +var MAT_SPECULAR = 41008; +var MAT_SHININESS = 41024; +var MAT_TRANSPARENCY = 41040; +var MAT_TWO_SIDE = 41089; +var MAT_ADDITIVE = 41091; +var MAT_WIRE = 41093; +var MAT_WIRE_SIZE = 41095; +var MAT_TEXMAP = 41472; +var MAT_OPACMAP = 41488; +var MAT_BUMPMAP = 41520; +var MAT_SPECMAP = 41476; +var MAT_MAPNAME = 41728; +var MAT_MAP_USCALE = 41812; +var MAT_MAP_VSCALE = 41814; +var MAT_MAP_UOFFSET = 41816; +var MAT_MAP_VOFFSET = 41818; +var NAMED_OBJECT = 16384; +var N_TRI_OBJECT = 16640; +var POINT_ARRAY = 16656; +var FACE_ARRAY = 16672; +var MSH_MAT_GROUP = 16688; +var TEX_VERTS = 16704; +var MESH_MATRIX = 16736; + +// node_modules/three/examples/jsm/libs/utif.module.js +var UTIF2 = {}; +(function() { + "use strict"; + var W = function a1() { + function W2(p2) { + this.message = "JPEG error: " + p2; + } + W2.prototype = new Error(); + W2.prototype.name = "JpegError"; + W2.constructor = W2; + return W2; + }(), ak = function ag() { + var p2 = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]), t3 = 4017, ac = 799, ah = 3406, ao = 2276, ar = 1567, ai = 3784, s = 5793, ad = 2896; + function ak2(Q3) { + if (Q3 == null) Q3 = {}; + if (Q3.w == null) Q3.w = -1; + this.V = Q3.n; + this.N = Q3.w; + } + function a5(Q3, h) { + var f = 0, G = [], n2, E2, a3 = 16, F2; + while (a3 > 0 && !Q3[a3 - 1]) { + a3--; + } + G.push({ children: [], index: 0 }); + var C2 = G[0]; + for (n2 = 0; n2 < a3; n2++) { + for (E2 = 0; E2 < Q3[n2]; E2++) { + C2 = G.pop(); + C2.children[C2.index] = h[f]; + while (C2.index > 0) { + C2 = G.pop(); + } + C2.index++; + G.push(C2); + while (G.length <= n2) { + G.push(F2 = { children: [], index: 0 }); + C2.children[C2.index] = F2.children; + C2 = F2; + } + f++; + } + if (n2 + 1 < a3) { + G.push(F2 = { children: [], index: 0 }); + C2.children[C2.index] = F2.children; + C2 = F2; + } + } + return G[0].children; + } + function a2(Q3, h, f) { + return 64 * ((Q3.P + 1) * h + f); + } + function a7(Q3, h, f, G, n2, E2, a3, C2, F2, d) { + if (d == null) d = false; + var T = f.m, U = f.Z, z = h, J = 0, V = 0, r = 0, D = 0, a8, q2 = 0, X2, O, _, N, e, K, x2 = 0, k2, g2, R4, c2; + function Y2() { + if (V > 0) { + V--; + return J >> V & 1; + } + J = Q3[h++]; + if (J === 255) { + var I2 = Q3[h++]; + if (I2) { + if (I2 === 220 && d) { + h += 2; + var l2 = Z2(Q3, h); + h += 2; + if (l2 > 0 && l2 !== f.s) { + throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", l2); + } + } else if (I2 === 217) { + if (d) { + var M = q2 * 8; + if (M > 0 && M < f.s / 10) { + throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter", M); + } + } + throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); + } + throw new W("unexpected marker"); + } + } + V = 7; + return J >>> 7; + } + function u(I2) { + var l2 = I2; + while (true) { + l2 = l2[Y2()]; + switch (typeof l2) { + case "number": + return l2; + case "object": + continue; + } + throw new W("invalid huffman sequence"); + } + } + function m(I2) { + var e2 = 0; + while (I2 > 0) { + e2 = e2 << 1 | Y2(); + I2--; + } + return e2; + } + function j(I2) { + if (I2 === 1) { + return Y2() === 1 ? 1 : -1; + } + var e2 = m(I2); + if (e2 >= 1 << I2 - 1) { + return e2; + } + return e2 + (-1 << I2) + 1; + } + function v(X3, I2) { + var l2 = u(X3.J), M = l2 === 0 ? 0 : j(l2), N2 = 1; + X3.D[I2] = X3.Q += M; + while (N2 < 64) { + var S = u(X3.i), i = S & 15, A2 = S >> 4; + if (i === 0) { + if (A2 < 15) { + break; + } + N2 += 16; + continue; + } + N2 += A2; + var o = p2[N2]; + X3.D[I2 + o] = j(i); + N2++; + } + } + function $2(X3, I2) { + var l2 = u(X3.J), M = l2 === 0 ? 0 : j(l2) << F2; + X3.D[I2] = X3.Q += M; + } + function b3(X3, I2) { + X3.D[I2] |= Y2() << F2; + } + function P(X3, I2) { + if (r > 0) { + r--; + return; + } + var N2 = E2, l2 = a3; + while (N2 <= l2) { + var M = u(X3.i), S = M & 15, i = M >> 4; + if (S === 0) { + if (i < 15) { + r = m(i) + (1 << i) - 1; + break; + } + N2 += 16; + continue; + } + N2 += i; + var A2 = p2[N2]; + X3.D[I2 + A2] = j(S) * (1 << F2); + N2++; + } + } + function a4(X3, I2) { + var N2 = E2, l2 = a3, M = 0, S, i; + while (N2 <= l2) { + var A2 = I2 + p2[N2], o = X3.D[A2] < 0 ? -1 : 1; + switch (D) { + case 0: + i = u(X3.i); + S = i & 15; + M = i >> 4; + if (S === 0) { + if (M < 15) { + r = m(M) + (1 << M); + D = 4; + } else { + M = 16; + D = 1; + } + } else { + if (S !== 1) { + throw new W("invalid ACn encoding"); + } + a8 = j(S); + D = M ? 2 : 3; + } + continue; + case 1: + case 2: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } else { + M--; + if (M === 0) { + D = D === 2 ? 3 : 0; + } + } + break; + case 3: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } else { + X3.D[A2] = a8 << F2; + D = 0; + } + break; + case 4: + if (X3.D[A2]) { + X3.D[A2] += o * (Y2() << F2); + } + break; + } + N2++; + } + if (D === 4) { + r--; + if (r === 0) { + D = 0; + } + } + } + function H(X3, I2, x3, l2, M) { + var S = x3 / T | 0, i = x3 % T; + q2 = S * X3.A + l2; + var A2 = i * X3.h + M, o = a2(X3, q2, A2); + I2(X3, o); + } + function w(X3, I2, x3) { + q2 = x3 / X3.P | 0; + var l2 = x3 % X3.P, M = a2(X3, q2, l2); + I2(X3, M); + } + var y2 = G.length; + if (U) { + if (E2 === 0) { + K = C2 === 0 ? $2 : b3; + } else { + K = C2 === 0 ? P : a4; + } + } else { + K = v; + } + if (y2 === 1) { + g2 = G[0].P * G[0].c; + } else { + g2 = T * f.R; + } + while (x2 <= g2) { + var L = n2 ? Math.min(g2 - x2, n2) : g2; + if (L > 0) { + for (O = 0; O < y2; O++) { + G[O].Q = 0; + } + r = 0; + if (y2 === 1) { + X2 = G[0]; + for (e = 0; e < L; e++) { + w(X2, K, x2); + x2++; + } + } else { + for (e = 0; e < L; e++) { + for (O = 0; O < y2; O++) { + X2 = G[O]; + R4 = X2.h; + c2 = X2.A; + for (_ = 0; _ < c2; _++) { + for (N = 0; N < R4; N++) { + H(X2, K, x2, _, N); + } + } + } + x2++; + } + } + } + V = 0; + k2 = an(Q3, h); + if (!k2) { + break; + } + if (k2.u) { + var a6 = L > 0 ? "unexpected" : "excessive"; + h = k2.offset; + } + if (k2.M >= 65488 && k2.M <= 65495) { + h += 2; + } else { + break; + } + } + return h - z; + } + function al(Q3, h, f) { + var G = Q3.$, n2 = Q3.D, E2, a3, C2, F2, d, T, U, z, J, V, Y2, u, m, j, v, $2, b3; + if (!G) { + throw new W("missing required Quantization Table."); + } + for (var r = 0; r < 64; r += 8) { + J = n2[h + r]; + V = n2[h + r + 1]; + Y2 = n2[h + r + 2]; + u = n2[h + r + 3]; + m = n2[h + r + 4]; + j = n2[h + r + 5]; + v = n2[h + r + 6]; + $2 = n2[h + r + 7]; + J *= G[r]; + if ((V | Y2 | u | m | j | v | $2) === 0) { + b3 = s * J + 512 >> 10; + f[r] = b3; + f[r + 1] = b3; + f[r + 2] = b3; + f[r + 3] = b3; + f[r + 4] = b3; + f[r + 5] = b3; + f[r + 6] = b3; + f[r + 7] = b3; + continue; + } + V *= G[r + 1]; + Y2 *= G[r + 2]; + u *= G[r + 3]; + m *= G[r + 4]; + j *= G[r + 5]; + v *= G[r + 6]; + $2 *= G[r + 7]; + E2 = s * J + 128 >> 8; + a3 = s * m + 128 >> 8; + C2 = Y2; + F2 = v; + d = ad * (V - $2) + 128 >> 8; + z = ad * (V + $2) + 128 >> 8; + T = u << 4; + U = j << 4; + E2 = E2 + a3 + 1 >> 1; + a3 = E2 - a3; + b3 = C2 * ai + F2 * ar + 128 >> 8; + C2 = C2 * ar - F2 * ai + 128 >> 8; + F2 = b3; + d = d + U + 1 >> 1; + U = d - U; + z = z + T + 1 >> 1; + T = z - T; + E2 = E2 + F2 + 1 >> 1; + F2 = E2 - F2; + a3 = a3 + C2 + 1 >> 1; + C2 = a3 - C2; + b3 = d * ao + z * ah + 2048 >> 12; + d = d * ah - z * ao + 2048 >> 12; + z = b3; + b3 = T * ac + U * t3 + 2048 >> 12; + T = T * t3 - U * ac + 2048 >> 12; + U = b3; + f[r] = E2 + z; + f[r + 7] = E2 - z; + f[r + 1] = a3 + U; + f[r + 6] = a3 - U; + f[r + 2] = C2 + T; + f[r + 5] = C2 - T; + f[r + 3] = F2 + d; + f[r + 4] = F2 - d; + } + for (var P = 0; P < 8; ++P) { + J = f[P]; + V = f[P + 8]; + Y2 = f[P + 16]; + u = f[P + 24]; + m = f[P + 32]; + j = f[P + 40]; + v = f[P + 48]; + $2 = f[P + 56]; + if ((V | Y2 | u | m | j | v | $2) === 0) { + b3 = s * J + 8192 >> 14; + if (b3 < -2040) { + b3 = 0; + } else if (b3 >= 2024) { + b3 = 255; + } else { + b3 = b3 + 2056 >> 4; + } + n2[h + P] = b3; + n2[h + P + 8] = b3; + n2[h + P + 16] = b3; + n2[h + P + 24] = b3; + n2[h + P + 32] = b3; + n2[h + P + 40] = b3; + n2[h + P + 48] = b3; + n2[h + P + 56] = b3; + continue; + } + E2 = s * J + 2048 >> 12; + a3 = s * m + 2048 >> 12; + C2 = Y2; + F2 = v; + d = ad * (V - $2) + 2048 >> 12; + z = ad * (V + $2) + 2048 >> 12; + T = u; + U = j; + E2 = (E2 + a3 + 1 >> 1) + 4112; + a3 = E2 - a3; + b3 = C2 * ai + F2 * ar + 2048 >> 12; + C2 = C2 * ar - F2 * ai + 2048 >> 12; + F2 = b3; + d = d + U + 1 >> 1; + U = d - U; + z = z + T + 1 >> 1; + T = z - T; + E2 = E2 + F2 + 1 >> 1; + F2 = E2 - F2; + a3 = a3 + C2 + 1 >> 1; + C2 = a3 - C2; + b3 = d * ao + z * ah + 2048 >> 12; + d = d * ah - z * ao + 2048 >> 12; + z = b3; + b3 = T * ac + U * t3 + 2048 >> 12; + T = T * t3 - U * ac + 2048 >> 12; + U = b3; + J = E2 + z; + $2 = E2 - z; + V = a3 + U; + v = a3 - U; + Y2 = C2 + T; + j = C2 - T; + u = F2 + d; + m = F2 - d; + if (J < 16) { + J = 0; + } else if (J >= 4080) { + J = 255; + } else { + J >>= 4; + } + if (V < 16) { + V = 0; + } else if (V >= 4080) { + V = 255; + } else { + V >>= 4; + } + if (Y2 < 16) { + Y2 = 0; + } else if (Y2 >= 4080) { + Y2 = 255; + } else { + Y2 >>= 4; + } + if (u < 16) { + u = 0; + } else if (u >= 4080) { + u = 255; + } else { + u >>= 4; + } + if (m < 16) { + m = 0; + } else if (m >= 4080) { + m = 255; + } else { + m >>= 4; + } + if (j < 16) { + j = 0; + } else if (j >= 4080) { + j = 255; + } else { + j >>= 4; + } + if (v < 16) { + v = 0; + } else if (v >= 4080) { + v = 255; + } else { + v >>= 4; + } + if ($2 < 16) { + $2 = 0; + } else if ($2 >= 4080) { + $2 = 255; + } else { + $2 >>= 4; + } + n2[h + P] = J; + n2[h + P + 8] = V; + n2[h + P + 16] = Y2; + n2[h + P + 24] = u; + n2[h + P + 32] = m; + n2[h + P + 40] = j; + n2[h + P + 48] = v; + n2[h + P + 56] = $2; + } + } + function a0(Q3, h) { + var f = h.P, G = h.c, n2 = new Int16Array(64); + for (var E2 = 0; E2 < G; E2++) { + for (var a3 = 0; a3 < f; a3++) { + var C2 = a2(h, E2, a3); + al(h, C2, n2); + } + } + return h.D; + } + function an(Q3, h, f) { + if (f == null) f = h; + var G = Q3.length - 1, n2 = f < h ? f : h; + if (h >= G) { + return null; + } + var E2 = Z2(Q3, h); + if (E2 >= 65472 && E2 <= 65534) { + return { u: null, M: E2, offset: h }; + } + var a3 = Z2(Q3, n2); + while (!(a3 >= 65472 && a3 <= 65534)) { + if (++n2 >= G) { + return null; + } + a3 = Z2(Q3, n2); + } + return { u: E2.toString(16), M: a3, offset: n2 }; + } + ak2.prototype = { parse(Q3, h) { + if (h == null) h = {}; + var f = h.F, E2 = 0, a3 = null, C2 = null, F2, d, T = 0; + function G() { + var o = Z2(Q3, E2); + E2 += 2; + var B2 = E2 + o - 2, V2 = an(Q3, B2, E2); + if (V2 && V2.u) { + B2 = V2.offset; + } + var ab = Q3.subarray(E2, B2); + E2 += ab.length; + return ab; + } + function n2(F3) { + var o = Math.ceil(F3.o / 8 / F3.X), B2 = Math.ceil(F3.s / 8 / F3.B); + for (var Y3 = 0; Y3 < F3.W.length; Y3++) { + R4 = F3.W[Y3]; + var ab = Math.ceil(Math.ceil(F3.o / 8) * R4.h / F3.X), af = Math.ceil(Math.ceil(F3.s / 8) * R4.A / F3.B), ap = o * R4.h, aq = B2 * R4.A, ae = 64 * aq * (ap + 1); + R4.D = new Int16Array(ae); + R4.P = ab; + R4.c = af; + } + F3.m = o; + F3.R = B2; + } + var U = [], z = [], J = [], V = Z2(Q3, E2); + E2 += 2; + if (V !== 65496) { + throw new W("SOI not found"); + } + V = Z2(Q3, E2); + E2 += 2; + markerLoop: while (V !== 65497) { + var Y2, u, m; + switch (V) { + case 65504: + case 65505: + case 65506: + case 65507: + case 65508: + case 65509: + case 65510: + case 65511: + case 65512: + case 65513: + case 65514: + case 65515: + case 65516: + case 65517: + case 65518: + case 65519: + case 65534: + var j = G(); + if (V === 65504) { + if (j[0] === 74 && j[1] === 70 && j[2] === 73 && j[3] === 70 && j[4] === 0) { + a3 = { version: { d: j[5], T: j[6] }, K: j[7], j: j[8] << 8 | j[9], H: j[10] << 8 | j[11], S: j[12], I: j[13], C: j.subarray(14, 14 + 3 * j[12] * j[13]) }; + } + } + if (V === 65518) { + if (j[0] === 65 && j[1] === 100 && j[2] === 111 && j[3] === 98 && j[4] === 101) { + C2 = { version: j[5] << 8 | j[6], k: j[7] << 8 | j[8], q: j[9] << 8 | j[10], a: j[11] }; + } + } + break; + case 65499: + var v = Z2(Q3, E2), b3; + E2 += 2; + var $2 = v + E2 - 2; + while (E2 < $2) { + var r = Q3[E2++], P = new Uint16Array(64); + if (r >> 4 === 0) { + for (u = 0; u < 64; u++) { + b3 = p2[u]; + P[b3] = Q3[E2++]; + } + } else if (r >> 4 === 1) { + for (u = 0; u < 64; u++) { + b3 = p2[u]; + P[b3] = Z2(Q3, E2); + E2 += 2; + } + } else { + throw new W("DQT - invalid table spec"); + } + U[r & 15] = P; + } + break; + case 65472: + case 65473: + case 65474: + if (F2) { + throw new W("Only single frame JPEGs supported"); + } + E2 += 2; + F2 = {}; + F2.G = V === 65473; + F2.Z = V === 65474; + F2.precision = Q3[E2++]; + var D = Z2(Q3, E2), a4, q2 = 0, H = 0; + E2 += 2; + F2.s = f || D; + F2.o = Z2(Q3, E2); + E2 += 2; + F2.W = []; + F2._ = {}; + var a8 = Q3[E2++]; + for (Y2 = 0; Y2 < a8; Y2++) { + a4 = Q3[E2]; + var w = Q3[E2 + 1] >> 4, y2 = Q3[E2 + 1] & 15; + if (q2 < w) { + q2 = w; + } + if (H < y2) { + H = y2; + } + var X2 = Q3[E2 + 2]; + m = F2.W.push({ h: w, A: y2, L: X2, $: null }); + F2._[a4] = m - 1; + E2 += 3; + } + F2.X = q2; + F2.B = H; + n2(F2); + break; + case 65476: + var O = Z2(Q3, E2); + E2 += 2; + for (Y2 = 2; Y2 < O; ) { + var _ = Q3[E2++], N = new Uint8Array(16), e = 0; + for (u = 0; u < 16; u++, E2++) { + e += N[u] = Q3[E2]; + } + var K = new Uint8Array(e); + for (u = 0; u < e; u++, E2++) { + K[u] = Q3[E2]; + } + Y2 += 17 + e; + (_ >> 4 === 0 ? J : z)[_ & 15] = a5(N, K); + } + break; + case 65501: + E2 += 2; + d = Z2(Q3, E2); + E2 += 2; + break; + case 65498: + var x2 = ++T === 1 && !f, R4; + E2 += 2; + var k2 = Q3[E2++], g2 = []; + for (Y2 = 0; Y2 < k2; Y2++) { + var c2 = Q3[E2++], L = F2._[c2]; + R4 = F2.W[L]; + R4.index = c2; + var a6 = Q3[E2++]; + R4.J = J[a6 >> 4]; + R4.i = z[a6 & 15]; + g2.push(R4); + } + var I2 = Q3[E2++], l2 = Q3[E2++], M = Q3[E2++]; + try { + var S = a7(Q3, E2, F2, g2, d, I2, l2, M >> 4, M & 15, x2); + E2 += S; + } catch (ex) { + if (ex instanceof DNLMarkerError) { + return this.parse(Q3, { F: ex.s }); + } else if (ex instanceof EOIMarkerError) { + break markerLoop; + } + throw ex; + } + break; + case 65500: + E2 += 4; + break; + case 65535: + if (Q3[E2] !== 255) { + E2--; + } + break; + default: + var i = an(Q3, E2 - 2, E2 - 3); + if (i && i.u) { + E2 = i.offset; + break; + } + if (E2 >= Q3.length - 1) { + break markerLoop; + } + throw new W("JpegImage.parse - unknown marker: " + V.toString(16)); + } + V = Z2(Q3, E2); + E2 += 2; + } + this.width = F2.o; + this.height = F2.s; + this.g = a3; + this.b = C2; + this.W = []; + for (Y2 = 0; Y2 < F2.W.length; Y2++) { + R4 = F2.W[Y2]; + var A2 = U[R4.L]; + if (A2) { + R4.$ = A2; + } + this.W.push({ index: R4.index, e: a0(F2, R4), l: R4.h / F2.X, t: R4.A / F2.B, P: R4.P, c: R4.c }); + } + this.p = this.W.length; + return void 0; + }, Y(Q3, h, f) { + if (f == null) f = false; + var G = this.width / Q3, n2 = this.height / h, E2, a3, C2, F2, d, T, U, z, J, V, Y2 = 0, u, m = this.W.length, j = Q3 * h * m, v = new Uint8ClampedArray(j), $2 = new Uint32Array(Q3), b3 = 4294967288, r; + for (U = 0; U < m; U++) { + E2 = this.W[U]; + a3 = E2.l * G; + C2 = E2.t * n2; + Y2 = U; + u = E2.e; + F2 = E2.P + 1 << 3; + if (a3 !== r) { + for (d = 0; d < Q3; d++) { + z = 0 | d * a3; + $2[d] = (z & b3) << 3 | z & 7; + } + r = a3; + } + for (T = 0; T < h; T++) { + z = 0 | T * C2; + V = F2 * (z & b3) | (z & 7) << 3; + for (d = 0; d < Q3; d++) { + v[Y2] = u[V + $2[d]]; + Y2 += m; + } + } + } + var P = this.V; + if (!f && m === 4 && !P) { + P = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); + } + if (P) { + for (U = 0; U < j; ) { + for (z = 0, J = 0; z < m; z++, U++, J += 2) { + v[U] = (v[U] * P[J] >> 8) + P[J + 1]; + } + } + } + return v; + }, get f() { + if (this.b) { + return !!this.b.a; + } + if (this.p === 3) { + if (this.N === 0) { + return false; + } else if (this.W[0].index === 82 && this.W[1].index === 71 && this.W[2].index === 66) { + return false; + } + return true; + } + if (this.N === 1) { + return true; + } + return false; + }, z: function aj(Q3) { + var h, f, G; + for (var n2 = 0, E2 = Q3.length; n2 < E2; n2 += 3) { + h = Q3[n2]; + f = Q3[n2 + 1]; + G = Q3[n2 + 2]; + Q3[n2] = h - 179.456 + 1.402 * G; + Q3[n2 + 1] = h + 135.459 - 0.344 * f - 0.714 * G; + Q3[n2 + 2] = h - 226.816 + 1.772 * f; + } + return Q3; + }, O: function aa(Q3) { + var h, f, G, n2, E2 = 0; + for (var a3 = 0, C2 = Q3.length; a3 < C2; a3 += 4) { + h = Q3[a3]; + f = Q3[a3 + 1]; + G = Q3[a3 + 2]; + n2 = Q3[a3 + 3]; + Q3[E2++] = -122.67195406894 + f * (-660635669420364e-19 * f + 437130475926232e-18 * G - 54080610064599e-18 * h + 48449797120281e-17 * n2 - 0.154362151871126) + G * (-957964378445773e-18 * G + 817076911346625e-18 * h - 0.00477271405408747 * n2 + 1.53380253221734) + h * (961250184130688e-18 * h - 0.00266257332283933 * n2 + 0.48357088451265) + n2 * (-336197177618394e-18 * n2 + 0.484791561490776); + Q3[E2++] = 107.268039397724 + f * (219927104525741e-19 * f - 640992018297945e-18 * G + 659397001245577e-18 * h + 426105652938837e-18 * n2 - 0.176491792462875) + G * (-778269941513683e-18 * G + 0.00130872261408275 * h + 770482631801132e-18 * n2 - 0.151051492775562) + h * (0.00126935368114843 * h - 0.00265090189010898 * n2 + 0.25802910206845) + n2 * (-318913117588328e-18 * n2 - 0.213742400323665); + Q3[E2++] = -20.810012546947 + f * (-570115196973677e-18 * f - 263409051004589e-19 * G + 0.0020741088115012 * h - 0.00288260236853442 * n2 + 0.814272968359295) + G * (-153496057440975e-19 * G - 132689043961446e-18 * h + 560833691242812e-18 * n2 - 0.195152027534049) + h * (0.00174418132927582 * h - 0.00255243321439347 * n2 + 0.116935020465145) + n2 * (-343531996510555e-18 * n2 + 0.24165260232407); + } + return Q3.subarray(0, E2); + }, r: function a3(Q3) { + var h, f, G; + for (var n2 = 0, E2 = Q3.length; n2 < E2; n2 += 4) { + h = Q3[n2]; + f = Q3[n2 + 1]; + G = Q3[n2 + 2]; + Q3[n2] = 434.456 - h - 1.402 * G; + Q3[n2 + 1] = 119.541 - h + 0.344 * f + 0.714 * G; + Q3[n2 + 2] = 481.816 - h - 1.772 * f; + } + return Q3; + }, U: function as(Q3) { + var h, f, G, n2, E2 = 0; + for (var a3 = 0, C2 = Q3.length; a3 < C2; a3 += 4) { + h = Q3[a3]; + f = Q3[a3 + 1]; + G = Q3[a3 + 2]; + n2 = Q3[a3 + 3]; + Q3[E2++] = 255 + h * (-6747147073602441e-20 * h + 8379262121013727e-19 * f + 2894718188643294e-19 * G + 0.003264231057537806 * n2 - 1.1185611867203937) + f * (26374107616089405e-21 * f - 8626949158638572e-20 * G - 2748769067499491e-19 * n2 - 0.02155688794978967) + G * (-3878099212869363e-20 * G - 3267808279485286e-19 * n2 + 0.0686742238595345) - n2 * (3361971776183937e-19 * n2 + 0.7430659151342254); + Q3[E2++] = 255 + h * (13596372813588848e-20 * h + 924537132573585e-18 * f + 10567359618683593e-20 * G + 4791864687436512e-19 * n2 - 0.3109689587515875) + f * (-23545346108370344e-20 * f + 2702845253534714e-19 * G + 0.0020200308977307156 * n2 - 0.7488052167015494) + G * (6834815998235662e-20 * G + 15168452363460973e-20 * n2 - 0.09751927774728933) - n2 * (3189131175883281e-19 * n2 + 0.7364883807733168); + Q3[E2++] = 255 + h * (13598650411385307e-21 * h + 12423956175490851e-20 * f + 4751985097583589e-19 * G - 36729317476630422e-22 * n2 - 0.05562186980264034) + f * (16141380598724676e-20 * f + 9692239130725186e-19 * G + 7782692450036253e-19 * n2 - 0.44015232367526463) + G * (5068882914068769e-22 * G + 0.0017778369011375071 * n2 - 0.7591454649749609) - n2 * (3435319965105553e-19 * n2 + 0.7063770186160144); + } + return Q3.subarray(0, E2); + }, getData: function(Q3) { + var h = Q3.width, f = Q3.height, G = Q3.forceRGB, n2 = Q3.isSourcePDF; + if (this.p > 4) { + throw new W("Unsupported color mode"); + } + var E2 = this.Y(h, f, n2); + if (this.p === 1 && G) { + var a3 = E2.length, C2 = new Uint8ClampedArray(a3 * 3), F2 = 0; + for (var d = 0; d < a3; d++) { + var T = E2[d]; + C2[F2++] = T; + C2[F2++] = T; + C2[F2++] = T; + } + return C2; + } else if (this.p === 3 && this.f) { + return this.z(E2); + } else if (this.p === 4) { + if (this.f) { + if (G) { + return this.O(E2); + } + return this.r(E2); + } else if (G) { + return this.U(E2); + } + } + return E2; + } }; + return ak2; + }(); + function a9(p2, t3) { + return p2[t3] << 24 >> 24; + } + function Z2(p2, t3) { + return p2[t3] << 8 | p2[t3 + 1]; + } + function am(p2, t3) { + return (p2[t3] << 24 | p2[t3 + 1] << 16 | p2[t3 + 2] << 8 | p2[t3 + 3]) >>> 0; + } + UTIF2.JpegDecoder = ak; +})(); +UTIF2.encodeImage = function(rgba, w, h, metadata) { + var idf = { + "t256": [w], + "t257": [h], + "t258": [8, 8, 8, 8], + "t259": [1], + "t262": [2], + "t273": [1e3], + // strips offset + "t277": [4], + "t278": [h], + /* rows per strip */ + "t279": [w * h * 4], + // strip byte counts + "t282": [[72, 1]], + "t283": [[72, 1]], + "t284": [1], + "t286": [[0, 1]], + "t287": [[0, 1]], + "t296": [1], + "t305": ["Photopea (UTIF.js)"], + "t338": [1] + }; + if (metadata) for (var i in metadata) idf[i] = metadata[i]; + var prfx = new Uint8Array(UTIF2.encode([idf])); + var img = new Uint8Array(rgba); + var data2 = new Uint8Array(1e3 + w * h * 4); + for (var i = 0; i < prfx.length; i++) data2[i] = prfx[i]; + for (var i = 0; i < img.length; i++) data2[1e3 + i] = img[i]; + return data2.buffer; +}; +UTIF2.encode = function(ifds) { + var LE = false; + var data2 = new Uint8Array(2e4), offset = 4, bin = LE ? UTIF2._binLE : UTIF2._binBE; + data2[0] = data2[1] = LE ? 73 : 77; + bin.writeUshort(data2, 2, 42); + var ifdo = 8; + bin.writeUint(data2, offset, ifdo); + offset += 4; + for (var i = 0; i < ifds.length; i++) { + var noffs = UTIF2._writeIFD(bin, UTIF2._types.basic, data2, ifdo, ifds[i]); + ifdo = noffs[1]; + if (i < ifds.length - 1) { + if ((ifdo & 3) != 0) ifdo += 4 - (ifdo & 3); + bin.writeUint(data2, noffs[0], ifdo); + } + } + return data2.slice(0, ifdo).buffer; +}; +UTIF2.decode = function(buff, prm) { + if (prm == null) prm = { parseMN: true, debug: false }; + var data2 = new Uint8Array(buff), offset = 0; + var id = UTIF2._binBE.readASCII(data2, offset, 2); + offset += 2; + var bin = id == "II" ? UTIF2._binLE : UTIF2._binBE; + var num = bin.readUshort(data2, offset); + offset += 2; + var ifdo = bin.readUint(data2, offset); + offset += 4; + var ifds = []; + while (true) { + var cnt = bin.readUshort(data2, ifdo), typ = bin.readUshort(data2, ifdo + 4); + if (cnt != 0) { + if (typ < 1 || 13 < typ) { + log("error in TIFF"); + break; + } + } + ; + UTIF2._readIFD(bin, data2, ifdo, ifds, 0, prm); + ifdo = bin.readUint(data2, ifdo + 2 + cnt * 12); + if (ifdo == 0) break; + } + return ifds; +}; +UTIF2.decodeImage = function(buff, img, ifds) { + if (img.data) return; + var data2 = new Uint8Array(buff); + var id = UTIF2._binBE.readASCII(data2, 0, 2); + if (img["t256"] == null) return; + img.isLE = id == "II"; + img.width = img["t256"][0]; + img.height = img["t257"][0]; + var cmpr = img["t259"] ? img["t259"][0] : 1; + var fo = img["t266"] ? img["t266"][0] : 1; + if (img["t284"] && img["t284"][0] == 2) log("PlanarConfiguration 2 should not be used!"); + if (cmpr == 7 && img["t258"] && img["t258"].length > 3) img["t258"] = img["t258"].slice(0, 3); + var spp = img["t277"] ? img["t277"][0] : 1; + var bps = img["t258"] ? img["t258"][0] : 1; + var bipp = bps * spp; + if (cmpr == 1 && img["t279"] != null && img["t278"] && img["t262"][0] == 32803) { + bipp = Math.round(img["t279"][0] * 8 / (img.width * img["t278"][0])); + } + if (img["t50885"] && img["t50885"][0] == 4) bipp = img["t258"][0] * 3; + var bipl = Math.ceil(img.width * bipp / 8) * 8; + var soff = img["t273"]; + if (soff == null || img["t322"]) soff = img["t324"]; + var bcnt = img["t279"]; + if (cmpr == 1 && soff.length == 1) bcnt = [img.height * (bipl >>> 3)]; + if (bcnt == null || img["t322"]) bcnt = img["t325"]; + var bytes = new Uint8Array(img.height * (bipl >>> 3)), bilen = 0; + if (img["t322"] != null) { + var tw = img["t322"][0], th = img["t323"][0]; + var tx = Math.floor((img.width + tw - 1) / tw); + var ty = Math.floor((img.height + th - 1) / th); + var tbuff = new Uint8Array(Math.ceil(tw * th * bipp / 8) | 0); + console.log("====", tx, ty); + for (var y2 = 0; y2 < ty; y2++) + for (var x2 = 0; x2 < tx; x2++) { + var i = y2 * tx + x2; + tbuff.fill(0); + UTIF2.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, tbuff, 0, fo, tw, th); + if (cmpr == 6) bytes = tbuff; + else UTIF2._copyTile(tbuff, Math.ceil(tw * bipp / 8) | 0, th, bytes, Math.ceil(img.width * bipp / 8) | 0, img.height, Math.ceil(x2 * tw * bipp / 8) | 0, y2 * th); + } + bilen = bytes.length * 8; + } else { + if (soff == null) return; + var rps = img["t278"] ? img["t278"][0] : img.height; + rps = Math.min(rps, img.height); + for (var i = 0; i < soff.length; i++) { + UTIF2.decode._decompress(img, ifds, data2, soff[i], bcnt[i], cmpr, bytes, Math.ceil(bilen / 8) | 0, fo, img.width, rps); + bilen += bipl * rps; + } + bilen = Math.min(bilen, bytes.length * 8); + } + img.data = new Uint8Array(bytes.buffer, 0, Math.ceil(bilen / 8) | 0); +}; +UTIF2.decode._decompress = function(img, ifds, data2, off, len, cmpr, tgt, toff, fo, w, h) { + if (img["t271"] && img["t271"][0] == "Panasonic" && img["t45"] && img["t45"][0] == 6) cmpr = 34316; + if (false) { + } else if (cmpr == 1) for (var j = 0; j < len; j++) tgt[toff + j] = data2[off + j]; + else if (cmpr == 2) UTIF2.decode._decodeG2(data2, off, len, tgt, toff, w, fo); + else if (cmpr == 3) UTIF2.decode._decodeG3(data2, off, len, tgt, toff, w, fo, img["t292"] ? (img["t292"][0] & 1) == 1 : false); + else if (cmpr == 4) UTIF2.decode._decodeG4(data2, off, len, tgt, toff, w, fo); + else if (cmpr == 5) UTIF2.decode._decodeLZW(data2, off, len, tgt, toff, 8); + else if (cmpr == 6) UTIF2.decode._decodeOldJPEG(img, data2, off, len, tgt, toff); + else if (cmpr == 7 || cmpr == 34892) UTIF2.decode._decodeNewJPEG(img, data2, off, len, tgt, toff); + else if (cmpr == 8 || cmpr == 32946) { + var src = new Uint8Array(data2.buffer, off + 2, len - 6); + var bin = UTIF2._inflateRaw(src); + if (toff + bin.length <= tgt.length) tgt.set(bin, toff); + } else if (cmpr == 9) UTIF2.decode._decodeVC5(data2, off, len, tgt, toff, img["t33422"]); + else if (cmpr == 32767) UTIF2.decode._decodeARW(img, data2, off, len, tgt, toff); + else if (cmpr == 32773) UTIF2.decode._decodePackBits(data2, off, len, tgt, toff); + else if (cmpr == 32809) UTIF2.decode._decodeThunder(data2, off, len, tgt, toff); + else if (cmpr == 34316) UTIF2.decode._decodePanasonic(img, data2, off, len, tgt, toff); + else if (cmpr == 34713) + UTIF2.decode._decodeNikon(img, ifds, data2, off, len, tgt, toff); + else if (cmpr == 34676) UTIF2.decode._decodeLogLuv32(img, data2, off, len, tgt, toff); + else log("Unknown compression", cmpr); + var bps = img["t258"] ? Math.min(32, img["t258"][0]) : 1; + var noc = img["t277"] ? img["t277"][0] : 1, bpp = bps * noc >>> 3, bpl = Math.ceil(bps * noc * w / 8); + if (bps == 16 && !img.isLE && img["t33422"] == null) + for (var y2 = 0; y2 < h; y2++) { + var roff = toff + y2 * bpl; + for (var x2 = 1; x2 < bpl; x2 += 2) { + var t3 = tgt[roff + x2]; + tgt[roff + x2] = tgt[roff + x2 - 1]; + tgt[roff + x2 - 1] = t3; + } + } + if (img["t317"] && img["t317"][0] == 2) { + for (var y2 = 0; y2 < h; y2++) { + var ntoff = toff + y2 * bpl; + if (bps == 16) for (var j = bpp; j < bpl; j += 2) { + var nv = (tgt[ntoff + j + 1] << 8 | tgt[ntoff + j]) + (tgt[ntoff + j - bpp + 1] << 8 | tgt[ntoff + j - bpp]); + tgt[ntoff + j] = nv & 255; + tgt[ntoff + j + 1] = nv >>> 8 & 255; + } + else if (noc == 3) for (var j = 3; j < bpl; j += 3) { + tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - 3] & 255; + tgt[ntoff + j + 1] = tgt[ntoff + j + 1] + tgt[ntoff + j - 2] & 255; + tgt[ntoff + j + 2] = tgt[ntoff + j + 2] + tgt[ntoff + j - 1] & 255; + } + else for (var j = bpp; j < bpl; j++) tgt[ntoff + j] = tgt[ntoff + j] + tgt[ntoff + j - bpp] & 255; + } + } +}; +UTIF2.decode._decodePanasonic = function(img, data2, off, len, tgt, toff) { + var img_buffer = data2.buffer; + var rawWidth = img["t2"][0]; + var rawHeight = img["t3"][0]; + var bitsPerSample = img["t10"][0]; + var RW2_Format = img["t45"][0]; + var bidx = 0; + var imageIndex = 0; + var vpos = 0; + var byte = 0; + var arr_a, arr_b; + var bytes = RW2_Format == 6 ? new Uint32Array(18) : new Uint8Array(16); + var i, j, sh, pred = [0, 0], nonz = [0, 0], isOdd, idx = 0, pixel_base; + var row, col, crow; + var buffer = new Uint8Array(16384); + var result = new Uint16Array(tgt.buffer); + function getDataRaw(bits2) { + if (vpos == 0) { + var arr_a2 = new Uint8Array(img_buffer, off + imageIndex + 8184, 16384 - 8184); + var arr_b2 = new Uint8Array(img_buffer, off + imageIndex, 8184); + buffer.set(arr_a2); + buffer.set(arr_b2, arr_a2.length); + imageIndex += 16384; + } + if (RW2_Format == 5) { + for (i = 0; i < 16; i++) { + bytes[i] = buffer[vpos++]; + vpos &= 16383; + } + } else { + vpos = vpos - bits2 & 131071; + byte = vpos >> 3 ^ 16368; + return (buffer[byte] | buffer[byte + 1] << 8) >> (vpos & 7) & ~(-1 << bits2); + } + } + function getBufferDataRW6(i2) { + return buffer[vpos + 15 - i2]; + } + function readPageRW6() { + bytes[0] = getBufferDataRW6(0) << 6 | getBufferDataRW6(1) >> 2; + bytes[1] = ((getBufferDataRW6(1) & 3) << 12 | getBufferDataRW6(2) << 4 | getBufferDataRW6(3) >> 4) & 16383; + bytes[2] = getBufferDataRW6(3) >> 2 & 3; + bytes[3] = (getBufferDataRW6(3) & 3) << 8 | getBufferDataRW6(4); + bytes[4] = getBufferDataRW6(5) << 2 | getBufferDataRW6(6) >> 6; + bytes[5] = (getBufferDataRW6(6) & 63) << 4 | getBufferDataRW6(7) >> 4; + bytes[6] = getBufferDataRW6(7) >> 2 & 3; + bytes[7] = (getBufferDataRW6(7) & 3) << 8 | getBufferDataRW6(8); + bytes[8] = getBufferDataRW6(9) << 2 & 1020 | getBufferDataRW6(10) >> 6; + bytes[9] = (getBufferDataRW6(10) << 4 | getBufferDataRW6(11) >> 4) & 1023; + bytes[10] = getBufferDataRW6(11) >> 2 & 3; + bytes[11] = (getBufferDataRW6(11) & 3) << 8 | getBufferDataRW6(12); + bytes[12] = (getBufferDataRW6(13) << 2 & 1020 | getBufferDataRW6(14) >> 6) & 1023; + bytes[13] = (getBufferDataRW6(14) << 4 | getBufferDataRW6(15) >> 4) & 1023; + vpos += 16; + byte = 0; + } + function readPageRw6_bps12() { + bytes[0] = getBufferDataRW6(0) << 4 | getBufferDataRW6(1) >> 4; + bytes[1] = ((getBufferDataRW6(1) & 15) << 8 | getBufferDataRW6(2)) & 4095; + bytes[2] = getBufferDataRW6(3) >> 6 & 3; + bytes[3] = (getBufferDataRW6(3) & 63) << 2 | getBufferDataRW6(4) >> 6; + bytes[4] = (getBufferDataRW6(4) & 63) << 2 | getBufferDataRW6(5) >> 6; + bytes[5] = (getBufferDataRW6(5) & 63) << 2 | getBufferDataRW6(6) >> 6; + bytes[6] = getBufferDataRW6(6) >> 4 & 3; + bytes[7] = (getBufferDataRW6(6) & 15) << 4 | getBufferDataRW6(7) >> 4; + bytes[8] = (getBufferDataRW6(7) & 15) << 4 | getBufferDataRW6(8) >> 4; + bytes[9] = (getBufferDataRW6(8) & 15) << 4 | getBufferDataRW6(9) >> 4; + bytes[10] = getBufferDataRW6(9) >> 2 & 3; + bytes[11] = (getBufferDataRW6(9) & 3) << 6 | getBufferDataRW6(10) >> 2; + bytes[12] = (getBufferDataRW6(10) & 3) << 6 | getBufferDataRW6(11) >> 2; + bytes[13] = (getBufferDataRW6(11) & 3) << 6 | getBufferDataRW6(12) >> 2; + bytes[14] = getBufferDataRW6(12) & 3; + bytes[15] = getBufferDataRW6(13); + bytes[16] = getBufferDataRW6(14); + bytes[17] = getBufferDataRW6(15); + vpos += 16; + byte = 0; + } + function resetPredNonzeros() { + pred[0] = 0; + pred[1] = 0; + nonz[0] = 0; + nonz[1] = 0; + } + if (RW2_Format == 7) { + throw RW2_Format; + } else if (RW2_Format == 6) { + var is12bit = bitsPerSample == 12, readPageRw6Fn = is12bit ? readPageRw6_bps12 : readPageRW6, pixelsPerBlock = is12bit ? 14 : 11, pixelbase0 = is12bit ? 128 : 512, pixelbase_compare = is12bit ? 2048 : 8192, spix_compare = is12bit ? 16383 : 65535, pixel_mask = is12bit ? 4095 : 16383, blocksperrow = rawWidth / pixelsPerBlock, rowbytes = blocksperrow * 16, bufferSize = is12bit ? 18 : 14; + for (row = 0; row < rawHeight - 15; row += 16) { + var rowstoread = Math.min(16, rawHeight - row); + var readlen = rowbytes * rowstoread; + buffer = new Uint8Array(img_buffer, off + bidx, readlen); + vpos = 0; + bidx += readlen; + for (crow = 0, col = 0; crow < rowstoread; crow++, col = 0) { + idx = (row + crow) * rawWidth; + for (var rblock = 0; rblock < blocksperrow; rblock++) { + readPageRw6Fn(); + resetPredNonzeros(); + sh = 0; + pixel_base = 0; + for (i = 0; i < pixelsPerBlock; i++) { + isOdd = i & 1; + if (i % 3 == 2) { + var base = byte < bufferSize ? bytes[byte++] : 0; + if (base == 3) base = 4; + pixel_base = pixelbase0 << base; + sh = 1 << base; + } + var epixel = byte < bufferSize ? bytes[byte++] : 0; + if (pred[isOdd]) { + epixel *= sh; + if (pixel_base < pixelbase_compare && nonz[isOdd] > pixel_base) + epixel += nonz[isOdd] - pixel_base; + nonz[isOdd] = epixel; + } else { + pred[isOdd] = epixel; + if (epixel) + nonz[isOdd] = epixel; + else + epixel = nonz[isOdd]; + } + result[idx + col++] = epixel - 15 <= spix_compare ? epixel - 15 & spix_compare : epixel + 2147483633 >> 31 & pixel_mask; + } + } + } + } + } else if (RW2_Format == 5) { + var blockSize = bitsPerSample == 12 ? 10 : 9; + for (row = 0; row < rawHeight; row++) { + for (col = 0; col < rawWidth; col += blockSize) { + getDataRaw(0); + if (bitsPerSample == 12) { + result[idx++] = ((bytes[1] & 15) << 8) + bytes[0]; + result[idx++] = 16 * bytes[2] + (bytes[1] >> 4); + result[idx++] = ((bytes[4] & 15) << 8) + bytes[3]; + result[idx++] = 16 * bytes[5] + (bytes[4] >> 4); + result[idx++] = ((bytes[7] & 15) << 8) + bytes[6]; + result[idx++] = 16 * bytes[8] + (bytes[7] >> 4); + result[idx++] = ((bytes[10] & 15) << 8) + bytes[9]; + result[idx++] = 16 * bytes[11] + (bytes[10] >> 4); + result[idx++] = ((bytes[13] & 15) << 8) + bytes[12]; + result[idx++] = 16 * bytes[14] + (bytes[13] >> 4); + } else if (bitsPerSample == 14) { + result[idx++] = bytes[0] + ((bytes[1] & 63) << 8); + result[idx++] = (bytes[1] >> 6) + 4 * bytes[2] + ((bytes[3] & 15) << 10); + result[idx++] = (bytes[3] >> 4) + 16 * bytes[4] + ((bytes[5] & 3) << 12); + result[idx++] = ((bytes[5] & 252) >> 2) + (bytes[6] << 6); + result[idx++] = bytes[7] + ((bytes[8] & 63) << 8); + result[idx++] = (bytes[8] >> 6) + 4 * bytes[9] + ((bytes[10] & 15) << 10); + result[idx++] = (bytes[10] >> 4) + 16 * bytes[11] + ((bytes[12] & 3) << 12); + result[idx++] = ((bytes[12] & 252) >> 2) + (bytes[13] << 6); + result[idx++] = bytes[14] + ((bytes[15] & 63) << 8); + } + } + } + } else if (RW2_Format == 4) { + for (row = 0; row < rawHeight; row++) { + for (col = 0; col < rawWidth; col++) { + i = col % 14; + isOdd = i & 1; + if (i == 0) resetPredNonzeros(); + if (i % 3 == 2) + sh = 4 >> 3 - getDataRaw(2); + if (nonz[isOdd]) { + j = getDataRaw(8); + if (j != 0) { + pred[isOdd] -= 128 << sh; + if (pred[isOdd] < 0 || sh == 4) + pred[isOdd] &= ~(-1 << sh); + pred[isOdd] += j << sh; + } + } else { + nonz[isOdd] = getDataRaw(8); + if (nonz[isOdd] || i > 11) + pred[isOdd] = nonz[isOdd] << 4 | getDataRaw(4); + } + result[idx++] = pred[col & 1]; + } + } + } else throw RW2_Format; +}; +UTIF2.decode._decodeVC5 = function() { + var x2 = [1, 0, 1, 0, 2, 2, 1, 1, 3, 7, 1, 2, 5, 25, 1, 3, 6, 48, 1, 4, 6, 54, 1, 5, 7, 111, 1, 8, 7, 99, 1, 6, 7, 105, 12, 0, 7, 107, 1, 7, 8, 209, 20, 0, 8, 212, 1, 9, 8, 220, 1, 10, 9, 393, 1, 11, 9, 394, 32, 0, 9, 416, 1, 12, 9, 427, 1, 13, 10, 887, 1, 18, 10, 784, 1, 14, 10, 790, 1, 15, 10, 835, 60, 0, 10, 852, 1, 16, 10, 885, 1, 17, 11, 1571, 1, 19, 11, 1668, 1, 20, 11, 1669, 100, 0, 11, 1707, 1, 21, 11, 1772, 1, 22, 12, 3547, 1, 29, 12, 3164, 1, 24, 12, 3166, 1, 25, 12, 3140, 1, 23, 12, 3413, 1, 26, 12, 3537, 1, 27, 12, 3539, 1, 28, 13, 7093, 1, 35, 13, 6283, 1, 30, 13, 6331, 1, 31, 13, 6335, 180, 0, 13, 6824, 1, 32, 13, 7072, 1, 33, 13, 7077, 320, 0, 13, 7076, 1, 34, 14, 12565, 1, 36, 14, 12661, 1, 37, 14, 12669, 1, 38, 14, 13651, 1, 39, 14, 14184, 1, 40, 15, 28295, 1, 46, 15, 28371, 1, 47, 15, 25320, 1, 42, 15, 25336, 1, 43, 15, 25128, 1, 41, 15, 27300, 1, 44, 15, 28293, 1, 45, 16, 50259, 1, 48, 16, 50643, 1, 49, 16, 50675, 1, 50, 16, 56740, 1, 53, 16, 56584, 1, 51, 16, 56588, 1, 52, 17, 113483, 1, 61, 17, 113482, 1, 60, 17, 101285, 1, 55, 17, 101349, 1, 56, 17, 109205, 1, 57, 17, 109207, 1, 58, 17, 100516, 1, 54, 17, 113171, 1, 59, 18, 202568, 1, 62, 18, 202696, 1, 63, 18, 218408, 1, 64, 18, 218412, 1, 65, 18, 226340, 1, 66, 18, 226356, 1, 67, 18, 226358, 1, 68, 19, 402068, 1, 69, 19, 405138, 1, 70, 19, 405394, 1, 71, 19, 436818, 1, 72, 19, 436826, 1, 73, 19, 452714, 1, 75, 19, 452718, 1, 76, 19, 452682, 1, 74, 20, 804138, 1, 77, 20, 810279, 1, 78, 20, 810790, 1, 79, 20, 873638, 1, 80, 20, 873654, 1, 81, 20, 905366, 1, 82, 20, 905430, 1, 83, 20, 905438, 1, 84, 21, 1608278, 1, 85, 21, 1620557, 1, 86, 21, 1621582, 1, 87, 21, 1621583, 1, 88, 21, 1747310, 1, 89, 21, 1810734, 1, 90, 21, 1810735, 1, 91, 21, 1810863, 1, 92, 21, 1810879, 1, 93, 22, 3621725, 1, 99, 22, 3621757, 1, 100, 22, 3241112, 1, 94, 22, 3494556, 1, 95, 22, 3494557, 1, 96, 22, 3494622, 1, 97, 22, 3494623, 1, 98, 23, 6482227, 1, 102, 23, 6433117, 1, 101, 23, 6989117, 1, 103, 23, 6989119, 1, 105, 23, 6989118, 1, 104, 23, 7243449, 1, 106, 23, 7243512, 1, 107, 24, 13978233, 1, 111, 24, 12964453, 1, 109, 24, 12866232, 1, 108, 24, 14486897, 1, 113, 24, 13978232, 1, 110, 24, 14486896, 1, 112, 24, 14487026, 1, 114, 24, 14487027, 1, 115, 25, 25732598, 1, 225, 25, 25732597, 1, 189, 25, 25732596, 1, 188, 25, 25732595, 1, 203, 25, 25732594, 1, 202, 25, 25732593, 1, 197, 25, 25732592, 1, 207, 25, 25732591, 1, 169, 25, 25732590, 1, 223, 25, 25732589, 1, 159, 25, 25732522, 1, 235, 25, 25732579, 1, 152, 25, 25732575, 1, 192, 25, 25732489, 1, 179, 25, 25732573, 1, 201, 25, 25732472, 1, 172, 25, 25732576, 1, 149, 25, 25732488, 1, 178, 25, 25732566, 1, 120, 25, 25732571, 1, 219, 25, 25732577, 1, 150, 25, 25732487, 1, 127, 25, 25732506, 1, 211, 25, 25732548, 1, 125, 25, 25732588, 1, 158, 25, 25732486, 1, 247, 25, 25732467, 1, 238, 25, 25732508, 1, 163, 25, 25732552, 1, 228, 25, 25732603, 1, 183, 25, 25732513, 1, 217, 25, 25732587, 1, 168, 25, 25732520, 1, 122, 25, 25732484, 1, 128, 25, 25732562, 1, 249, 25, 25732505, 1, 187, 25, 25732504, 1, 186, 25, 25732483, 1, 136, 25, 25928905, 1, 181, 25, 25732560, 1, 255, 25, 25732500, 1, 230, 25, 25732482, 1, 135, 25, 25732555, 1, 233, 25, 25732568, 1, 222, 25, 25732583, 1, 145, 25, 25732481, 1, 134, 25, 25732586, 1, 167, 25, 25732521, 1, 248, 25, 25732518, 1, 209, 25, 25732480, 1, 243, 25, 25732512, 1, 216, 25, 25732509, 1, 164, 25, 25732547, 1, 140, 25, 25732479, 1, 157, 25, 25732544, 1, 239, 25, 25732574, 1, 191, 25, 25732564, 1, 251, 25, 25732478, 1, 156, 25, 25732546, 1, 139, 25, 25732498, 1, 242, 25, 25732557, 1, 133, 25, 25732477, 1, 162, 25, 25732515, 1, 213, 25, 25732584, 1, 165, 25, 25732514, 1, 212, 25, 25732476, 1, 227, 25, 25732494, 1, 198, 25, 25732531, 1, 236, 25, 25732530, 1, 234, 25, 25732529, 1, 117, 25, 25732528, 1, 215, 25, 25732527, 1, 124, 25, 25732526, 1, 123, 25, 25732525, 1, 254, 25, 25732524, 1, 253, 25, 25732523, 1, 148, 25, 25732570, 1, 218, 25, 25732580, 1, 146, 25, 25732581, 1, 147, 25, 25732569, 1, 224, 25, 25732533, 1, 143, 25, 25732540, 1, 184, 25, 25732541, 1, 185, 25, 25732585, 1, 166, 25, 25732556, 1, 132, 25, 25732485, 1, 129, 25, 25732563, 1, 250, 25, 25732578, 1, 151, 25, 25732501, 1, 119, 25, 25732502, 1, 193, 25, 25732536, 1, 176, 25, 25732496, 1, 245, 25, 25732553, 1, 229, 25, 25732516, 1, 206, 25, 25732582, 1, 144, 25, 25732517, 1, 208, 25, 25732558, 1, 137, 25, 25732543, 1, 241, 25, 25732466, 1, 237, 25, 25732507, 1, 190, 25, 25732542, 1, 240, 25, 25732551, 1, 131, 25, 25732554, 1, 232, 25, 25732565, 1, 252, 25, 25732475, 1, 171, 25, 25732493, 1, 205, 25, 25732492, 1, 204, 25, 25732491, 1, 118, 25, 25732490, 1, 214, 25, 25928904, 1, 180, 25, 25732549, 1, 126, 25, 25732602, 1, 182, 25, 25732539, 1, 175, 25, 25732545, 1, 141, 25, 25732559, 1, 138, 25, 25732537, 1, 177, 25, 25732534, 1, 153, 25, 25732503, 1, 194, 25, 25732606, 1, 160, 25, 25732567, 1, 121, 25, 25732538, 1, 174, 25, 25732497, 1, 246, 25, 25732550, 1, 130, 25, 25732572, 1, 200, 25, 25732474, 1, 170, 25, 25732511, 1, 221, 25, 25732601, 1, 196, 25, 25732532, 1, 142, 25, 25732519, 1, 210, 25, 25732495, 1, 199, 25, 25732605, 1, 155, 25, 25732535, 1, 154, 25, 25732499, 1, 244, 25, 25732510, 1, 220, 25, 25732600, 1, 195, 25, 25732607, 1, 161, 25, 25732604, 1, 231, 25, 25732473, 1, 173, 25, 25732599, 1, 226, 26, 51465122, 1, 116, 26, 51465123, 0, 1], o, C2, k2, P = [3, 3, 3, 3, 2, 2, 2, 1, 1, 1], V = 24576, ar = 16384, H = 8192, az = ar | H; + function d(t3) { + var E2 = t3[1], h = t3[0][E2 >>> 3] >>> 7 - (E2 & 7) & 1; + t3[1]++; + return h; + } + function ag(t3, E2) { + if (o == null) { + o = {}; + for (var h = 0; h < x2.length; h += 4) o[x2[h + 1]] = x2.slice(h, h + 4); + } + var L = d(t3), g2 = o[L]; + while (g2 == null) { + L = L << 1 | d(t3); + g2 = o[L]; + } + var n2 = g2[3]; + if (n2 != 0) n2 = d(t3) == 0 ? n2 : -n2; + E2[0] = g2[2]; + E2[1] = n2; + } + function m(t3, E2) { + for (var h = 0; h < E2; h++) { + if ((t3 & 1) == 1) t3++; + t3 = t3 >>> 1; + } + return t3; + } + function A2(t3, E2) { + return t3 >> E2; + } + function O(t3, E2, h, L, g2, n2) { + E2[h] = A2(A2(11 * t3[g2] - 4 * t3[g2 + n2] + t3[g2 + n2 + n2] + 4, 3) + t3[L], 1); + E2[h + n2] = A2(A2(5 * t3[g2] + 4 * t3[g2 + n2] - t3[g2 + n2 + n2] + 4, 3) - t3[L], 1); + } + function J(t3, E2, h, L, g2, n2) { + var W = t3[g2 - n2] - t3[g2 + n2], j = t3[g2], $2 = t3[L]; + E2[h] = A2(A2(W + 4, 3) + j + $2, 1); + E2[h + n2] = A2(A2(-W + 4, 3) + j - $2, 1); + } + function y2(t3, E2, h, L, g2, n2) { + E2[h] = A2(A2(5 * t3[g2] + 4 * t3[g2 - n2] - t3[g2 - n2 - n2] + 4, 3) + t3[L], 1); + E2[h + n2] = A2(A2(11 * t3[g2] - 4 * t3[g2 - n2] + t3[g2 - n2 - n2] + 4, 3) - t3[L], 1); + } + function q2(t3) { + t3 = t3 < 0 ? 0 : t3 > 4095 ? 4095 : t3; + t3 = k2[t3] >>> 2; + return t3; + } + function av(t3, E2, h, L, g2, n2) { + L = new Uint16Array(L.buffer); + var W = Date.now(), j = UTIF2._binBE, $2 = E2 + h, r, u, X2, I2, ax, a3, R4, ai, aa, ap, ah, ae, aD, al, i, aE, T, B2; + E2 += 4; + var a5 = n2[0] == 1; + while (E2 < $2) { + var S = j.readShort(t3, E2), s = j.readUshort(t3, E2 + 2); + E2 += 4; + if (S == 12) r = s; + else if (S == 20) u = s; + else if (S == 21) X2 = s; + else if (S == 48) I2 = s; + else if (S == 53) ax = s; + else if (S == 35) a3 = s; + else if (S == 62) R4 = s; + else if (S == 101) ai = s; + else if (S == 109) aa = s; + else if (S == 84) ap = s; + else if (S == 106) ah = s; + else if (S == 107) ae = s; + else if (S == 108) aD = s; + else if (S == 102) al = s; + else if (S == 104) i = s; + else if (S == 105) aE = s; + else { + var F2 = S < 0 ? -S : S, D = F2 & 65280, _ = 0; + if (F2 & az) { + if (F2 & H) { + _ = s & 65535; + _ += (F2 & 255) << 16; + } else { + _ = s & 65535; + } + } + if ((F2 & V) == V) { + if (T == null) { + T = []; + for (var M = 0; M < 4; M++) T[M] = new Int16Array((u >>> 1) * (X2 >>> 1)); + B2 = new Int16Array((u >>> 1) * (X2 >>> 1)); + C2 = new Int16Array(1024); + for (var M = 0; M < 1024; M++) { + var aG = M - 512, p2 = Math.abs(aG), r = Math.floor(768 * p2 * p2 * p2 / (255 * 255 * 255)) + p2; + C2[M] = Math.sign(aG) * r; + } + k2 = new Uint16Array(4096); + var aA = (1 << 16) - 1; + for (var M = 0; M < 4096; M++) { + var at = M, a1 = aA * (Math.pow(113, at / 4095) - 1) / 112; + k2[M] = Math.min(a1, aA); + } + } + var w = T[R4], v = m(u, 1 + P[I2]), N = m(X2, 1 + P[I2]); + if (I2 == 0) { + for (var b3 = 0; b3 < N; b3++) for (var G = 0; G < v; G++) { + var c2 = E2 + (b3 * v + G) * 2; + w[b3 * (u >>> 1) + G] = t3[c2] << 8 | t3[c2 + 1]; + } + } else { + var a7 = [t3, E2 * 8], a4 = [], ay = 0, aw = v * N, f = [0, 0], Q3 = 0, s = 0; + while (ay < aw) { + ag(a7, f); + Q3 = f[0]; + s = f[1]; + while (Q3 > 0) { + a4[ay++] = s; + Q3--; + } + } + var l2 = (I2 - 1) % 3, aF = l2 != 1 ? v : 0, a2 = l2 != 0 ? N : 0; + for (var b3 = 0; b3 < N; b3++) { + var af = (b3 + a2) * (u >>> 1) + aF, au = b3 * v; + for (var G = 0; G < v; G++) w[af + G] = C2[a4[au + G] + 512] * ax; + } + if (l2 == 2) { + var i = u >>> 1, an = v * 2, a9 = N * 2; + for (var b3 = 0; b3 < N; b3++) { + for (var G = 0; G < an; G++) { + var M = b3 * 2 * i + G, a6 = b3 * i + G, e = N * i + a6; + if (b3 == 0) O(w, B2, M, e, a6, i); + else if (b3 == N - 1) y2(w, B2, M, e, a6, i); + else J(w, B2, M, e, a6, i); + } + } + var Z2 = w; + w = B2; + B2 = Z2; + for (var b3 = 0; b3 < a9; b3++) { + for (var G = 0; G < v; G++) { + var M = b3 * i + 2 * G, a6 = b3 * i + G, e = v + a6; + if (G == 0) O(w, B2, M, e, a6, 1); + else if (G == v - 1) y2(w, B2, M, e, a6, 1); + else J(w, B2, M, e, a6, 1); + } + } + var Z2 = w; + w = B2; + B2 = Z2; + var aC = [], aB = 2 - ~~((I2 - 1) / 3); + for (var K = 0; K < 3; K++) aC[K] = aa >> 14 - K * 2 & 3; + var a62 = aC[aB]; + if (a62 != 0) for (var b3 = 0; b3 < a9; b3++) for (var G = 0; G < an; G++) { + var M = b3 * i + G; + w[M] = w[M] << a62; + } + } + } + if (I2 == 9 && R4 == 3) { + var a8 = T[0], ab = T[1], aq = T[2], as = T[3]; + for (var b3 = 0; b3 < X2; b3 += 2) for (var G = 0; G < u; G += 2) { + var U = b3 * u + G, c2 = (b3 >>> 1) * (u >>> 1) + (G >>> 1), z = a8[c2], ao = ab[c2] - 2048, ak = aq[c2] - 2048, ad = as[c2] - 2048, aj = (ao << 1) + z, a0 = (ak << 1) + z, aH = z + ad, am = z - ad; + if (a5) { + L[U] = q2(aH); + L[U + 1] = q2(a0); + L[U + u] = q2(aj); + L[U + u + 1] = q2(am); + } else { + L[U] = q2(aj); + L[U + 1] = q2(aH); + L[U + u] = q2(am); + L[U + u + 1] = q2(a0); + } + } + } + E2 += _ * 4; + } else if (F2 == 16388) { + E2 += _ * 4; + } else if (D == 8192 || D == 8448 || D == 9216) { + } else throw F2.toString(16); + } + } + console.log(Date.now() - W); + } + return av; +}(); +UTIF2.decode._decodeLogLuv32 = function(img, data2, off, len, tgt, toff) { + var w = img.width, qw = w * 4; + var io = 0, out = new Uint8Array(qw); + while (io < len) { + var oo = 0; + while (oo < qw) { + var c2 = data2[off + io]; + io++; + if (c2 < 128) { + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io + j]; + oo += c2; + io += c2; + } else { + c2 = c2 - 126; + for (var j = 0; j < c2; j++) out[oo + j] = data2[off + io]; + oo += c2; + io++; + } + } + for (var x2 = 0; x2 < w; x2++) { + tgt[toff + 0] = out[x2]; + tgt[toff + 1] = out[x2 + w]; + tgt[toff + 2] = out[x2 + w * 2]; + tgt[toff + 4] = out[x2 + w * 3]; + toff += 6; + } + } +}; +UTIF2.decode._ljpeg_diff = function(data2, prm, huff) { + var getbithuff = UTIF2.decode._getbithuff; + var len, diff; + len = getbithuff(data2, prm, huff[0], huff); + diff = getbithuff(data2, prm, len, 0); + if ((diff & 1 << len - 1) == 0) diff -= (1 << len) - 1; + return diff; +}; +UTIF2.decode._decodeARW = function(img, inp, off, src_length, tgt, toff) { + var raw_width = img["t256"][0], height2 = img["t257"][0], tiff_bps = img["t258"][0]; + var bin = img.isLE ? UTIF2._binLE : UTIF2._binBE; + var arw2 = raw_width * height2 == src_length || raw_width * height2 * 1.5 == src_length; + if (!arw2) { + height2 += 8; + var prm = [off, 0, 0, 0]; + var huff = new Uint16Array(32770); + var tab = [ + 3857, + 3856, + 3599, + 3342, + 3085, + 2828, + 2571, + 2314, + 2057, + 1800, + 1543, + 1286, + 1029, + 772, + 771, + 768, + 514, + 513 + ]; + var i, c2, n2, col, row, sum2 = 0; + var ljpeg_diff = UTIF2.decode._ljpeg_diff; + huff[0] = 15; + for (n2 = i = 0; i < 18; i++) { + var lim = 32768 >>> (tab[i] >>> 8); + for (var c2 = 0; c2 < lim; c2++) huff[++n2] = tab[i]; + } + for (col = raw_width; col--; ) + for (row = 0; row < height2 + 1; row += 2) { + if (row == height2) row = 1; + sum2 += ljpeg_diff(inp, prm, huff); + if (row < height2) { + var clr = sum2 & 4095; + UTIF2.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << 16 - tiff_bps); + } + } + return; + } + if (raw_width * height2 * 1.5 == src_length) { + for (var i = 0; i < src_length; i += 3) { + var b0 = inp[off + i + 0], b1 = inp[off + i + 1], b22 = inp[off + i + 2]; + tgt[toff + i] = b1 << 4 | b0 >>> 4; + tgt[toff + i + 1] = b0 << 4 | b22 >>> 4; + tgt[toff + i + 2] = b22 << 4 | b1 >>> 4; + } + return; + } + var pix = new Uint16Array(16); + var row, col, val2, max2, min, imax, imin, sh, bit, i, dp; + var data2 = new Uint8Array(raw_width + 1); + for (row = 0; row < height2; row++) { + for (var j = 0; j < raw_width; j++) data2[j] = inp[off++]; + for (dp = 0, col = 0; col < raw_width - 30; dp += 16) { + max2 = 2047 & (val2 = bin.readUint(data2, dp)); + min = 2047 & val2 >>> 11; + imax = 15 & val2 >>> 22; + imin = 15 & val2 >>> 26; + for (sh = 0; sh < 4 && 128 << sh <= max2 - min; sh++) ; + for (bit = 30, i = 0; i < 16; i++) + if (i == imax) pix[i] = max2; + else if (i == imin) pix[i] = min; + else { + pix[i] = ((bin.readUshort(data2, dp + (bit >> 3)) >>> (bit & 7) & 127) << sh) + min; + if (pix[i] > 2047) pix[i] = 2047; + bit += 7; + } + for (i = 0; i < 16; i++, col += 2) { + var clr = pix[i] << 1; + UTIF2.decode._putsF(tgt, (row * raw_width + col) * tiff_bps, clr << 16 - tiff_bps); + } + col -= col & 1 ? 1 : 31; + } + } +}; +UTIF2.decode._decodeNikon = function(img, imgs, data2, off, src_length, tgt, toff) { + var nikon_tree = [ + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossy */ + 5, + 4, + 3, + 6, + 2, + 7, + 1, + 0, + 8, + 9, + 11, + 10, + 12 + ], + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossy after split */ + 57, + 90, + 56, + 39, + 22, + 5, + 4, + 3, + 2, + 1, + 0, + 11, + 12, + 12 + ], + [ + 0, + 0, + 1, + 4, + 2, + 3, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 12-bit lossless */ + 5, + 4, + 6, + 3, + 7, + 2, + 8, + 1, + 9, + 0, + 10, + 11, + 12 + ], + [ + 0, + 0, + 1, + 4, + 3, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossy */ + 5, + 6, + 4, + 7, + 8, + 3, + 9, + 2, + 1, + 0, + 10, + 11, + 12, + 13, + 14 + ], + [ + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossy after split */ + 8, + 92, + 75, + 58, + 41, + 7, + 6, + 5, + 4, + 3, + 2, + 1, + 0, + 13, + 14 + ], + [ + 0, + 0, + 1, + 4, + 2, + 2, + 3, + 1, + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + /* 14-bit lossless */ + 7, + 6, + 8, + 5, + 9, + 4, + 10, + 3, + 11, + 12, + 2, + 0, + 1, + 13, + 14 + ] + ]; + var raw_width = img["t256"][0], height2 = img["t257"][0], tiff_bps = img["t258"][0]; + var tree = 0, split = 0; + var make_decoder = UTIF2.decode._make_decoder; + var getbithuff = UTIF2.decode._getbithuff; + var mn = imgs[0].exifIFD.makerNote, md = mn["t150"] ? mn["t150"] : mn["t140"], mdo = 0; + var ver0 = md[mdo++], ver1 = md[mdo++]; + if (ver0 == 73 || ver1 == 88) mdo += 2110; + if (ver0 == 70) tree = 2; + if (tiff_bps == 14) tree += 3; + var vpred = [[0, 0], [0, 0]], bin = img.isLE ? UTIF2._binLE : UTIF2._binBE; + for (var i = 0; i < 2; i++) for (var j = 0; j < 2; j++) { + vpred[i][j] = bin.readShort(md, mdo); + mdo += 2; + } + var max2 = 1 << tiff_bps & 32767, step = 0; + var csize = bin.readShort(md, mdo); + mdo += 2; + if (csize > 1) step = Math.floor(max2 / (csize - 1)); + if (ver0 == 68 && ver1 == 32 && step > 0) split = bin.readShort(md, 562); + var i; + var row, col; + var len, shl, diff; + var min_v = 0; + var hpred = [0, 0]; + var huff = make_decoder(nikon_tree[tree]); + var prm = [off, 0, 0, 0]; + for (min_v = row = 0; row < height2; row++) { + if (split && row == split) { + huff = make_decoder(nikon_tree[tree + 1]); + } + for (col = 0; col < raw_width; col++) { + i = getbithuff(data2, prm, huff[0], huff); + len = i & 15; + shl = i >>> 4; + diff = (getbithuff(data2, prm, len - shl, 0) << 1) + 1 << shl >>> 1; + if ((diff & 1 << len - 1) == 0) + diff -= (1 << len) - (shl == 0 ? 1 : 0); + if (col < 2) hpred[col] = vpred[row & 1][col] += diff; + else hpred[col & 1] += diff; + var clr = Math.min(Math.max(hpred[col & 1], 0), (1 << tiff_bps) - 1); + var bti = (row * raw_width + col) * tiff_bps; + UTIF2.decode._putsF(tgt, bti, clr << 16 - tiff_bps); + } + } +}; +UTIF2.decode._putsF = function(dt2, pos, val2) { + val2 = val2 << 8 - (pos & 7); + var o = pos >>> 3; + dt2[o] |= val2 >>> 16; + dt2[o + 1] |= val2 >>> 8; + dt2[o + 2] |= val2; +}; +UTIF2.decode._getbithuff = function(data2, prm, nbits, huff) { + var zero_after_ff = 0; + var get_byte = UTIF2.decode._get_byte; + var c2; + var off = prm[0], bitbuf = prm[1], vbits = prm[2], reset = prm[3]; + if (nbits == 0 || vbits < 0) return 0; + while (!reset && vbits < nbits && (c2 = data2[off++]) != -1 && !(reset = zero_after_ff && c2 == 255 && data2[off++])) { + bitbuf = (bitbuf << 8) + c2; + vbits += 8; + } + c2 = bitbuf << 32 - vbits >>> 32 - nbits; + if (huff) { + vbits -= huff[c2 + 1] >>> 8; + c2 = huff[c2 + 1] & 255; + } else + vbits -= nbits; + if (vbits < 0) throw "e"; + prm[0] = off; + prm[1] = bitbuf; + prm[2] = vbits; + prm[3] = reset; + return c2; +}; +UTIF2.decode._make_decoder = function(source) { + var max2, len, h, i, j; + var huff = []; + for (max2 = 16; max2 != 0 && !source[max2]; max2--) ; + var si = 17; + huff[0] = max2; + for (h = len = 1; len <= max2; len++) + for (i = 0; i < source[len]; i++, ++si) + for (j = 0; j < 1 << max2 - len; j++) + if (h <= 1 << max2) + huff[h++] = len << 8 | source[si]; + return huff; +}; +UTIF2.decode._decodeNewJPEG = function(img, data2, off, len, tgt, toff) { + len = Math.min(len, data2.length - off); + var tables = img["t347"], tlen = tables ? tables.length : 0, buff = new Uint8Array(tlen + len); + if (tables) { + var SOI = 216, EOI2 = 217, boff = 0; + for (var i = 0; i < tlen - 1; i++) { + if (tables[i] == 255 && tables[i + 1] == EOI2) break; + buff[boff++] = tables[i]; + } + var byte1 = data2[off], byte2 = data2[off + 1]; + if (byte1 != 255 || byte2 != SOI) { + buff[boff++] = byte1; + buff[boff++] = byte2; + } + for (var i = 2; i < len; i++) buff[boff++] = data2[off + i]; + } else for (var i = 0; i < len; i++) buff[i] = data2[off + i]; + if (img["t262"][0] == 32803 || img["t259"][0] == 7 && img["t262"][0] == 34892) { + var bps = img["t258"][0]; + var out = UTIF2.LosslessJpegDecode(buff), olen = out.length; + if (false) { + } else if (bps == 16) { + if (img.isLE) for (var i = 0; i < olen; i++) { + tgt[toff + (i << 1)] = out[i] & 255; + tgt[toff + (i << 1) + 1] = out[i] >>> 8; + } + else for (var i = 0; i < olen; i++) { + tgt[toff + (i << 1)] = out[i] >>> 8; + tgt[toff + (i << 1) + 1] = out[i] & 255; + } + } else if (bps == 14 || bps == 12 || bps == 10) { + var rst = 16 - bps; + for (var i = 0; i < olen; i++) UTIF2.decode._putsF(tgt, i * bps, out[i] << rst); + } else if (bps == 8) { + for (var i = 0; i < olen; i++) tgt[toff + i] = out[i]; + } else throw new Error("unsupported bit depth " + bps); + } else { + var parser = new UTIF2.JpegDecoder(); + parser.parse(buff); + var decoded = parser.getData({ "width": parser.width, "height": parser.height, "forceRGB": true, "isSourcePDF": false }); + for (var i = 0; i < decoded.length; i++) tgt[toff + i] = decoded[i]; + } + if (img["t262"][0] == 6) img["t262"][0] = 2; +}; +UTIF2.decode._decodeOldJPEGInit = function(img, data2, off, len) { + var SOI = 216, EOI2 = 217, DQT = 219, DHT = 196, DRI = 221, SOF0 = 192, SOS2 = 218; + var joff = 0, soff = 0, tables, sosMarker2, isTiled = false, i, j, k2; + var jpgIchgFmt = img["t513"], jifoff = jpgIchgFmt ? jpgIchgFmt[0] : 0; + var jpgIchgFmtLen = img["t514"], jiflen = jpgIchgFmtLen ? jpgIchgFmtLen[0] : 0; + var soffTag = img["t324"] || img["t273"] || jpgIchgFmt; + var ycbcrss = img["t530"], ssx = 0, ssy = 0; + var spp = img["t277"] ? img["t277"][0] : 1; + var jpgresint = img["t515"]; + if (soffTag) { + soff = soffTag[0]; + isTiled = soffTag.length > 1; + } + if (!isTiled) { + if (data2[off] == 255 && data2[off + 1] == SOI) return { jpegOffset: off }; + if (jpgIchgFmt != null) { + if (data2[off + jifoff] == 255 && data2[off + jifoff + 1] == SOI) joff = off + jifoff; + else log("JPEGInterchangeFormat does not point to SOI"); + if (jpgIchgFmtLen == null) log("JPEGInterchangeFormatLength field is missing"); + else if (jifoff >= soff || jifoff + jiflen <= soff) log("JPEGInterchangeFormatLength field value is invalid"); + if (joff != null) return { jpegOffset: joff }; + } + } + if (ycbcrss != null) { + ssx = ycbcrss[0]; + ssy = ycbcrss[1]; + } + if (jpgIchgFmt != null) { + if (jpgIchgFmtLen != null) + if (jiflen >= 2 && jifoff + jiflen <= soff) { + if (data2[off + jifoff + jiflen - 2] == 255 && data2[off + jifoff + jiflen - 1] == SOI) tables = new Uint8Array(jiflen - 2); + else tables = new Uint8Array(jiflen); + for (i = 0; i < tables.length; i++) tables[i] = data2[off + jifoff + i]; + log("Incorrect JPEG interchange format: using JPEGInterchangeFormat offset to derive tables"); + } else log("JPEGInterchangeFormat+JPEGInterchangeFormatLength > offset to first strip or tile"); + } + if (tables == null) { + var ooff = 0, out = []; + out[ooff++] = 255; + out[ooff++] = SOI; + var qtables = img["t519"]; + if (qtables == null) throw new Error("JPEGQTables tag is missing"); + for (i = 0; i < qtables.length; i++) { + out[ooff++] = 255; + out[ooff++] = DQT; + out[ooff++] = 0; + out[ooff++] = 67; + out[ooff++] = i; + for (j = 0; j < 64; j++) out[ooff++] = data2[off + qtables[i] + j]; + } + for (k2 = 0; k2 < 2; k2++) { + var htables = img[k2 == 0 ? "t520" : "t521"]; + if (htables == null) throw new Error((k2 == 0 ? "JPEGDCTables" : "JPEGACTables") + " tag is missing"); + for (i = 0; i < htables.length; i++) { + out[ooff++] = 255; + out[ooff++] = DHT; + var nc = 19; + for (j = 0; j < 16; j++) nc += data2[off + htables[i] + j]; + out[ooff++] = nc >>> 8; + out[ooff++] = nc & 255; + out[ooff++] = i | k2 << 4; + for (j = 0; j < 16; j++) out[ooff++] = data2[off + htables[i] + j]; + for (j = 0; j < nc; j++) out[ooff++] = data2[off + htables[i] + 16 + j]; + } + } + out[ooff++] = 255; + out[ooff++] = SOF0; + out[ooff++] = 0; + out[ooff++] = 8 + 3 * spp; + out[ooff++] = 8; + out[ooff++] = img.height >>> 8 & 255; + out[ooff++] = img.height & 255; + out[ooff++] = img.width >>> 8 & 255; + out[ooff++] = img.width & 255; + out[ooff++] = spp; + if (spp == 1) { + out[ooff++] = 1; + out[ooff++] = 17; + out[ooff++] = 0; + } else for (i = 0; i < 3; i++) { + out[ooff++] = i + 1; + out[ooff++] = i != 0 ? 17 : (ssx & 15) << 4 | ssy & 15; + out[ooff++] = i; + } + if (jpgresint != null && jpgresint[0] != 0) { + out[ooff++] = 255; + out[ooff++] = DRI; + out[ooff++] = 0; + out[ooff++] = 4; + out[ooff++] = jpgresint[0] >>> 8 & 255; + out[ooff++] = jpgresint[0] & 255; + } + tables = new Uint8Array(out); + } + var sofpos = -1; + i = 0; + while (i < tables.length - 1) { + if (tables[i] == 255 && tables[i + 1] == SOF0) { + sofpos = i; + break; + } + i++; + } + if (sofpos == -1) { + var tmptab = new Uint8Array(tables.length + 10 + 3 * spp); + tmptab.set(tables); + var tmpoff = tables.length; + sofpos = tables.length; + tables = tmptab; + tables[tmpoff++] = 255; + tables[tmpoff++] = SOF0; + tables[tmpoff++] = 0; + tables[tmpoff++] = 8 + 3 * spp; + tables[tmpoff++] = 8; + tables[tmpoff++] = img.height >>> 8 & 255; + tables[tmpoff++] = img.height & 255; + tables[tmpoff++] = img.width >>> 8 & 255; + tables[tmpoff++] = img.width & 255; + tables[tmpoff++] = spp; + if (spp == 1) { + tables[tmpoff++] = 1; + tables[tmpoff++] = 17; + tables[tmpoff++] = 0; + } else for (i = 0; i < 3; i++) { + tables[tmpoff++] = i + 1; + tables[tmpoff++] = i != 0 ? 17 : (ssx & 15) << 4 | ssy & 15; + tables[tmpoff++] = i; + } + } + if (data2[soff] == 255 && data2[soff + 1] == SOS2) { + var soslen = data2[soff + 2] << 8 | data2[soff + 3]; + sosMarker2 = new Uint8Array(soslen + 2); + sosMarker2[0] = data2[soff]; + sosMarker2[1] = data2[soff + 1]; + sosMarker2[2] = data2[soff + 2]; + sosMarker2[3] = data2[soff + 3]; + for (i = 0; i < soslen - 2; i++) sosMarker2[i + 4] = data2[soff + i + 4]; + } else { + sosMarker2 = new Uint8Array(2 + 6 + 2 * spp); + var sosoff = 0; + sosMarker2[sosoff++] = 255; + sosMarker2[sosoff++] = SOS2; + sosMarker2[sosoff++] = 0; + sosMarker2[sosoff++] = 6 + 2 * spp; + sosMarker2[sosoff++] = spp; + if (spp == 1) { + sosMarker2[sosoff++] = 1; + sosMarker2[sosoff++] = 0; + } else for (i = 0; i < 3; i++) { + sosMarker2[sosoff++] = i + 1; + sosMarker2[sosoff++] = i << 4 | i; + } + sosMarker2[sosoff++] = 0; + sosMarker2[sosoff++] = 63; + sosMarker2[sosoff++] = 0; + } + return { jpegOffset: off, tables, sosMarker: sosMarker2, sofPosition: sofpos }; +}; +UTIF2.decode._decodeOldJPEG = function(img, data2, off, len, tgt, toff) { + var i, dlen, tlen, buff, buffoff; + var jpegData = UTIF2.decode._decodeOldJPEGInit(img, data2, off, len); + if (jpegData.jpegOffset != null) { + dlen = off + len - jpegData.jpegOffset; + buff = new Uint8Array(dlen); + for (i = 0; i < dlen; i++) buff[i] = data2[jpegData.jpegOffset + i]; + } else { + tlen = jpegData.tables.length; + buff = new Uint8Array(tlen + jpegData.sosMarker.length + len + 2); + buff.set(jpegData.tables); + buffoff = tlen; + buff[jpegData.sofPosition + 5] = img.height >>> 8 & 255; + buff[jpegData.sofPosition + 6] = img.height & 255; + buff[jpegData.sofPosition + 7] = img.width >>> 8 & 255; + buff[jpegData.sofPosition + 8] = img.width & 255; + if (data2[off] != 255 || data2[off + 1] != SOS) { + buff.set(jpegData.sosMarker, buffoff); + buffoff += sosMarker.length; + } + for (i = 0; i < len; i++) buff[buffoff++] = data2[off + i]; + buff[buffoff++] = 255; + buff[buffoff++] = EOI; + } + var parser = new UTIF2.JpegDecoder(); + parser.parse(buff); + var decoded = parser.getData({ "width": parser.width, "height": parser.height, "forceRGB": true, "isSourcePDF": false }); + for (var i = 0; i < decoded.length; i++) tgt[toff + i] = decoded[i]; + if (img["t262"] && img["t262"][0] == 6) img["t262"][0] = 2; +}; +UTIF2.decode._decodePackBits = function(data2, off, len, tgt, toff) { + var sa = new Int8Array(data2.buffer), ta = new Int8Array(tgt.buffer), lim = off + len; + while (off < lim) { + var n2 = sa[off]; + off++; + if (n2 >= 0 && n2 < 128) for (var i = 0; i < n2 + 1; i++) { + ta[toff] = sa[off]; + toff++; + off++; + } + if (n2 >= -127 && n2 < 0) { + for (var i = 0; i < -n2 + 1; i++) { + ta[toff] = sa[off]; + toff++; + } + off++; + } + } + return toff; +}; +UTIF2.decode._decodeThunder = function(data2, off, len, tgt, toff) { + var d2 = [0, 1, 0, -1], d3 = [0, 1, 2, 3, 0, -3, -2, -1]; + var lim = off + len, qoff = toff * 2, px = 0; + while (off < lim) { + var b3 = data2[off], msk = b3 >>> 6, n2 = b3 & 63; + off++; + if (msk == 3) { + px = n2 & 15; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + if (msk == 0) for (var i = 0; i < n2; i++) { + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + if (msk == 2) for (var i = 0; i < 2; i++) { + var d = n2 >>> 3 * (1 - i) & 7; + if (d != 4) { + px += d3[d]; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + } + if (msk == 1) for (var i = 0; i < 3; i++) { + var d = n2 >>> 2 * (2 - i) & 3; + if (d != 2) { + px += d2[d]; + tgt[qoff >>> 1] |= px << 4 * (1 - qoff & 1); + qoff++; + } + } + } +}; +UTIF2.decode._dmap = { "1": 0, "011": 1, "000011": 2, "0000011": 3, "010": -1, "000010": -2, "0000010": -3 }; +UTIF2.decode._lens = function() { + var addKeys = function(lens, arr, i0, inc) { + for (var i = 0; i < arr.length; i++) lens[arr[i]] = i0 + i * inc; + }; + var termW = "00110101,000111,0111,1000,1011,1100,1110,1111,10011,10100,00111,01000,001000,000011,110100,110101,101010,101011,0100111,0001100,0001000,0010111,0000011,0000100,0101000,0101011,0010011,0100100,0011000,00000010,00000011,00011010,00011011,00010010,00010011,00010100,00010101,00010110,00010111,00101000,00101001,00101010,00101011,00101100,00101101,00000100,00000101,00001010,00001011,01010010,01010011,01010100,01010101,00100100,00100101,01011000,01011001,01011010,01011011,01001010,01001011,00110010,00110011,00110100"; + var termB = "0000110111,010,11,10,011,0011,0010,00011,000101,000100,0000100,0000101,0000111,00000100,00000111,000011000,0000010111,0000011000,0000001000,00001100111,00001101000,00001101100,00000110111,00000101000,00000010111,00000011000,000011001010,000011001011,000011001100,000011001101,000001101000,000001101001,000001101010,000001101011,000011010010,000011010011,000011010100,000011010101,000011010110,000011010111,000001101100,000001101101,000011011010,000011011011,000001010100,000001010101,000001010110,000001010111,000001100100,000001100101,000001010010,000001010011,000000100100,000000110111,000000111000,000000100111,000000101000,000001011000,000001011001,000000101011,000000101100,000001011010,000001100110,000001100111"; + var makeW = "11011,10010,010111,0110111,00110110,00110111,01100100,01100101,01101000,01100111,011001100,011001101,011010010,011010011,011010100,011010101,011010110,011010111,011011000,011011001,011011010,011011011,010011000,010011001,010011010,011000,010011011"; + var makeB = "0000001111,000011001000,000011001001,000001011011,000000110011,000000110100,000000110101,0000001101100,0000001101101,0000001001010,0000001001011,0000001001100,0000001001101,0000001110010,0000001110011,0000001110100,0000001110101,0000001110110,0000001110111,0000001010010,0000001010011,0000001010100,0000001010101,0000001011010,0000001011011,0000001100100,0000001100101"; + var makeA = "00000001000,00000001100,00000001101,000000010010,000000010011,000000010100,000000010101,000000010110,000000010111,000000011100,000000011101,000000011110,000000011111"; + termW = termW.split(","); + termB = termB.split(","); + makeW = makeW.split(","); + makeB = makeB.split(","); + makeA = makeA.split(","); + var lensW = {}, lensB = {}; + addKeys(lensW, termW, 0, 1); + addKeys(lensW, makeW, 64, 64); + addKeys(lensW, makeA, 1792, 64); + addKeys(lensB, termB, 0, 1); + addKeys(lensB, makeB, 64, 64); + addKeys(lensB, makeA, 1792, 64); + return [lensW, lensB]; +}(); +UTIF2.decode._decodeG4 = function(data2, off, slen, tgt, toff, w, fo) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = [], pline = []; + for (var i = 0; i < w; i++) pline.push(0); + pline = U._makeDiff(pline); + var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b22 = 0, clr = 0; + var y2 = 0, mode = "", toRead = 0; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b22 = U._findDiff(pline, b1, clr); + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + if (mode == "H") { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + a0 += len; + clr = 1 - clr; + len = 0; + toRead--; + if (toRead == 0) mode = ""; + } + } + } else { + if (wrd == "0001") { + wrd = ""; + U._addNtimes(line2, b22 - a0, clr); + a0 = b22; + } + if (wrd == "001") { + wrd = ""; + mode = "H"; + toRead = 2; + } + if (U._dmap[wrd] != null) { + a1 = b1 + U._dmap[wrd]; + U._addNtimes(line2, a1 - a0, clr); + a0 = a1; + wrd = ""; + clr = 1 - clr; + } + } + if (line2.length == w && mode == "") { + U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + clr = 0; + y2++; + a0 = 0; + pline = U._makeDiff(line2); + line2 = []; + } + } +}; +UTIF2.decode._findDiff = function(line2, x2, clr) { + for (var i = 0; i < line2.length; i += 2) if (line2[i] >= x2 && line2[i + 1] == clr) return line2[i]; +}; +UTIF2.decode._makeDiff = function(line2) { + var out = []; + if (line2[0] == 1) out.push(0, 1); + for (var i = 1; i < line2.length; i++) if (line2[i - 1] != line2[i]) out.push(i, line2[i]); + out.push(line2.length, 0, line2.length, 1); + return out; +}; +UTIF2.decode._decodeG2 = function(data2, off, slen, tgt, toff, w, fo) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = []; + var clr = 0; + var y2 = 0; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + len = U._lens[clr][wrd]; + if (len != null) { + U._addNtimes(line2, len, clr); + wrd = ""; + if (len < 64) clr = 1 - clr; + if (line2.length == w) { + U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + line2 = []; + y2++; + clr = 0; + if ((boff & 7) != 0) boff += 8 - (boff & 7); + if (len >= 64) boff += 8; + } + } + } +}; +UTIF2.decode._decodeG3 = function(data2, off, slen, tgt, toff, w, fo, twoDim) { + var U = UTIF2.decode, boff = off << 3, len = 0, wrd = ""; + var line2 = [], pline = []; + for (var i = 0; i < w; i++) line2.push(0); + var a0 = 0, a1 = 0, a2 = 0, b1 = 0, b22 = 0, clr = 0; + var y2 = -1, mode = "", toRead = 0, is1D = true; + var bipl = Math.ceil(w / 8) * 8; + while (boff >>> 3 < off + slen) { + b1 = U._findDiff(pline, a0 + (a0 == 0 ? 0 : 1), 1 - clr), b22 = U._findDiff(pline, b1, clr); + var bit = 0; + if (fo == 1) bit = data2[boff >>> 3] >>> 7 - (boff & 7) & 1; + if (fo == 2) bit = data2[boff >>> 3] >>> (boff & 7) & 1; + boff++; + wrd += bit; + if (is1D) { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + clr = 1 - clr; + len = 0; + } + } + } else { + if (mode == "H") { + if (U._lens[clr][wrd] != null) { + var dl = U._lens[clr][wrd]; + wrd = ""; + len += dl; + if (dl < 64) { + U._addNtimes(line2, len, clr); + a0 += len; + clr = 1 - clr; + len = 0; + toRead--; + if (toRead == 0) mode = ""; + } + } + } else { + if (wrd == "0001") { + wrd = ""; + U._addNtimes(line2, b22 - a0, clr); + a0 = b22; + } + if (wrd == "001") { + wrd = ""; + mode = "H"; + toRead = 2; + } + if (U._dmap[wrd] != null) { + a1 = b1 + U._dmap[wrd]; + U._addNtimes(line2, a1 - a0, clr); + a0 = a1; + wrd = ""; + clr = 1 - clr; + } + } + } + if (wrd.endsWith("000000000001")) { + if (y2 >= 0) U._writeBits(line2, tgt, toff * 8 + y2 * bipl); + if (twoDim) { + if (fo == 1) is1D = (data2[boff >>> 3] >>> 7 - (boff & 7) & 1) == 1; + if (fo == 2) is1D = (data2[boff >>> 3] >>> (boff & 7) & 1) == 1; + boff++; + } + wrd = ""; + clr = 0; + y2++; + a0 = 0; + pline = U._makeDiff(line2); + line2 = []; + } + } + if (line2.length == w) U._writeBits(line2, tgt, toff * 8 + y2 * bipl); +}; +UTIF2.decode._addNtimes = function(arr, n2, val2) { + for (var i = 0; i < n2; i++) arr.push(val2); +}; +UTIF2.decode._writeBits = function(bits2, tgt, boff) { + for (var i = 0; i < bits2.length; i++) tgt[boff + i >>> 3] |= bits2[i] << 7 - (boff + i & 7); +}; +UTIF2.decode._decodeLZW = UTIF2.decode._decodeLZW = function() { + var e, U, Z2, u, K = 0, V = 0, g2 = 0, N = 0, O = function() { + var S = e >>> 3, A2 = U[S] << 16 | U[S + 1] << 8 | U[S + 2], j = A2 >>> 24 - (e & 7) - V & (1 << V) - 1; + e += V; + return j; + }, h = new Uint32Array(4096 * 4), w = 0, m = function(S) { + if (S == w) return; + w = S; + g2 = 1 << S; + N = g2 + 1; + for (var A2 = 0; A2 < N + 1; A2++) { + h[4 * A2] = h[4 * A2 + 3] = A2; + h[4 * A2 + 1] = 65535; + h[4 * A2 + 2] = 1; + } + }, i = function(S) { + V = S + 1; + K = N + 1; + }, D = function(S) { + var A2 = S << 2, j = h[A2 + 2], a2 = u + j - 1; + while (A2 != 65535) { + Z2[a2--] = h[A2]; + A2 = h[A2 + 1]; + } + u += j; + }, L = function(S, A2) { + var j = K << 2, a2 = S << 2; + h[j] = h[(A2 << 2) + 3]; + h[j + 1] = a2; + h[j + 2] = h[a2 + 2] + 1; + h[j + 3] = h[a2 + 3]; + K++; + if (K + 1 == 1 << V && V != 12) V++; + }, T = function(S, A2, j, a2, n2, q2) { + e = A2 << 3; + U = S; + Z2 = a2; + u = n2; + var B2 = A2 + j << 3, _ = 0, t3 = 0; + m(q2); + i(q2); + while (e < B2 && (_ = O()) != N) { + if (_ == g2) { + i(q2); + _ = O(); + if (_ == N) break; + D(_); + } else { + if (_ < K) { + D(_); + L(t3, _); + } else { + L(t3, t3); + D(K - 1); + } + } + t3 = _; + } + return u; + }; + return T; +}(); +UTIF2.tags = {}; +UTIF2._types = function() { + var main = new Array(250); + main.fill(0); + main = 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]); + var 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 }; + return { + basic: { + main, + rest + }, + gps: { + main: [1, 2, 5, 2, 5, 1, 5, 5, 0, 9], + rest: { 18: 2, 29: 2 } + } + }; +}(); +UTIF2._readIFD = function(bin, data2, offset, ifds, depth, prm) { + var cnt = bin.readUshort(data2, offset); + offset += 2; + var ifd = {}; + if (prm.debug) log(" ".repeat(depth), ifds.length - 1, ">>>----------------"); + for (var i = 0; i < cnt; i++) { + var tag = bin.readUshort(data2, offset); + offset += 2; + var type = bin.readUshort(data2, offset); + offset += 2; + var num = bin.readUint(data2, offset); + offset += 4; + var voff = bin.readUint(data2, offset); + offset += 4; + var arr = []; + if (type == 1 || type == 7) { + var no = num < 5 ? offset - 4 : voff; + if (no + num > data2.buffer.byteLength) num = data2.buffer.byteLength - no; + arr = new Uint8Array(data2.buffer, no, num); + } + if (type == 2) { + var o0 = num < 5 ? offset - 4 : voff, c2 = data2[o0], len = Math.max(0, Math.min(num - 1, data2.length - o0)); + if (c2 < 128 || len == 0) arr.push(bin.readASCII(data2, o0, len)); + else arr = new Uint8Array(data2.buffer, o0, len); + } + if (type == 3) { + for (var j = 0; j < num; j++) arr.push(bin.readUshort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 4 || type == 13) { + for (var j = 0; j < num; j++) arr.push(bin.readUint(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 5 || type == 10) { + var ri = type == 5 ? bin.readUint : bin.readInt; + for (var j = 0; j < num; j++) arr.push([ri(data2, voff + j * 8), ri(data2, voff + j * 8 + 4)]); + } + if (type == 8) { + for (var j = 0; j < num; j++) arr.push(bin.readShort(data2, (num < 3 ? offset - 4 : voff) + 2 * j)); + } + if (type == 9) { + for (var j = 0; j < num; j++) arr.push(bin.readInt(data2, (num < 2 ? offset - 4 : voff) + 4 * j)); + } + if (type == 11) { + for (var j = 0; j < num; j++) arr.push(bin.readFloat(data2, voff + j * 4)); + } + if (type == 12) { + for (var j = 0; j < num; j++) arr.push(bin.readDouble(data2, voff + j * 8)); + } + if (num != 0 && arr.length == 0) { + log(tag, "unknown TIFF tag type: ", type, "num:", num); + if (i == 0) return; + continue; + } + if (prm.debug) log(" ".repeat(depth), tag, type, UTIF2.tags[tag], arr); + ifd["t" + tag] = arr; + if (tag == 330 && ifd["t272"] && ifd["t272"][0] == "DSLR-A100") { + } else if (tag == 330 || tag == 34665 || tag == 34853 || tag == 50740 && bin.readUshort(data2, bin.readUint(arr, 0)) < 300 || tag == 61440) { + var oarr = tag == 50740 ? [bin.readUint(arr, 0)] : arr; + var subfd = []; + for (var j = 0; j < oarr.length; j++) UTIF2._readIFD(bin, data2, oarr[j], subfd, depth + 1, prm); + if (tag == 330) ifd.subIFD = subfd; + if (tag == 34665) ifd.exifIFD = subfd[0]; + if (tag == 34853) ifd.gpsiIFD = subfd[0]; + if (tag == 50740) ifd.dngPrvt = subfd[0]; + if (tag == 61440) ifd.fujiIFD = subfd[0]; + } + if (tag == 37500 && prm.parseMN) { + var mn = arr; + if (bin.readASCII(mn, 0, 5) == "Nikon") ifd.makerNote = UTIF2["decode"](mn.slice(10).buffer)[0]; + else if (bin.readASCII(mn, 0, 5) == "OLYMP" || bin.readASCII(mn, 0, 9) == "OM SYSTEM") { + var inds = [8208, 8224, 8240, 8256, 8272]; + var subsub = []; + UTIF2._readIFD(bin, mn, mn[1] == 77 ? 16 : mn[5] == 85 ? 12 : 8, subsub, depth + 1, prm); + var obj = ifd.makerNote = subsub.pop(); + for (var j = 0; j < inds.length; j++) { + var k2 = "t" + inds[j]; + if (obj[k2] == null) continue; + UTIF2._readIFD(bin, mn, obj[k2][0], subsub, depth + 1, prm); + obj[k2] = subsub.pop(); + } + if (obj["t12288"]) { + UTIF2._readIFD(bin, obj["t12288"], 0, subsub, depth + 1, prm); + obj["t12288"] = subsub.pop(); + } + } else if (bin.readUshort(data2, voff) < 300 && bin.readUshort(data2, voff + 4) <= 12) { + var subsub = []; + UTIF2._readIFD(bin, data2, voff, subsub, depth + 1, prm); + ifd.makerNote = subsub[0]; + } + } + } + ifds.push(ifd); + if (prm.debug) log(" ".repeat(depth), "<<<---------------"); + return offset; +}; +UTIF2._writeIFD = function(bin, types, data2, offset, ifd) { + var keys2 = Object.keys(ifd), knum = keys2.length; + if (ifd["exifIFD"]) knum--; + if (ifd["gpsiIFD"]) knum--; + bin.writeUshort(data2, offset, knum); + offset += 2; + var eoff = offset + knum * 12 + 4; + for (var ki = 0; ki < keys2.length; ki++) { + var key2 = keys2[ki]; + if (key2 == "t34665" || key2 == "t34853") continue; + if (key2 == "exifIFD") key2 = "t34665"; + if (key2 == "gpsiIFD") key2 = "t34853"; + var tag = parseInt(key2.slice(1)), type = types.main[tag]; + if (type == null) type = types.rest[tag]; + if (type == null || type == 0) throw new Error("unknown type of tag: " + tag); + var val2 = ifd[key2]; + if (tag == 34665) { + var outp = UTIF2._writeIFD(bin, types, data2, eoff, ifd["exifIFD"]); + val2 = [eoff]; + eoff = outp[1]; + } + if (tag == 34853) { + var outp = UTIF2._writeIFD(bin, UTIF2._types.gps, data2, eoff, ifd["gpsiIFD"]); + val2 = [eoff]; + eoff = outp[1]; + } + if (type == 2) val2 = val2[0] + "\0"; + var num = val2.length; + bin.writeUshort(data2, offset, tag); + offset += 2; + bin.writeUshort(data2, offset, type); + offset += 2; + bin.writeUint(data2, offset, num); + offset += 4; + var dlen = [-1, 1, 1, 2, 4, 8, 0, 1, 0, 4, 8, 0, 8][type] * num; + var toff = offset; + if (dlen > 4) { + bin.writeUint(data2, offset, eoff); + toff = eoff; + } + if (type == 1 || type == 7) { + for (var i = 0; i < num; i++) data2[toff + i] = val2[i]; + } else if (type == 2) { + bin.writeASCII(data2, toff, val2); + } else if (type == 3) { + for (var i = 0; i < num; i++) bin.writeUshort(data2, toff + 2 * i, val2[i]); + } else if (type == 4) { + for (var i = 0; i < num; i++) bin.writeUint(data2, toff + 4 * i, val2[i]); + } else if (type == 5 || type == 10) { + var wr = type == 5 ? bin.writeUint : bin.writeInt; + for (var i = 0; i < num; i++) { + var v = val2[i], nu = v[0], de2 = v[1]; + if (nu == null) throw "e"; + wr(data2, toff + 8 * i, nu); + wr(data2, toff + 8 * i + 4, de2); + } + } else if (type == 9) { + for (var i = 0; i < num; i++) bin.writeInt(data2, toff + 4 * i, val2[i]); + } else if (type == 12) { + for (var i = 0; i < num; i++) bin.writeDouble(data2, toff + 8 * i, val2[i]); + } else throw type; + if (dlen > 4) { + dlen += dlen & 1; + eoff += dlen; + } + offset += 4; + } + return [offset, eoff]; +}; +UTIF2.toRGBA8 = function(out, scl) { + function gamma(x3) { + return x3 < 31308e-7 ? 12.92 * x3 : 1.055 * Math.pow(x3, 1 / 2.4) - 0.055; + } + var w = out.width, h = out.height, area = w * h, qarea = area * 4, data2 = out.data; + var img = new Uint8Array(area * 4); + var intp = out["t262"] ? out["t262"][0] : 2, bps = out["t258"] ? Math.min(32, out["t258"][0]) : 1; + if (out["t262"] == null && bps == 1) intp = 0; + var smpls = out["t277"] ? out["t277"][0] : out["t258"] ? out["t258"].length : [1, 1, 3, 1, 1, 4, 3][intp]; + var sfmt = out["t339"] ? out["t339"][0] : null; + if (intp == 1 && bps == 32 && sfmt != 3) throw "e"; + var bpl = Math.ceil(smpls * bps * w / 8); + if (false) { + } else if (intp == 0) { + scl = 1 / 256; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, io = y2 * w; + if (bps == 1) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 3)] >> 7 - (i & 7) & 1; + img[qi] = img[qi + 1] = img[qi + 2] = (1 - px) * 255; + img[qi + 3] = 255; + } + if (bps == 4) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 1)] >> 4 - 4 * (i & 1) & 15; + img[qi] = img[qi + 1] = img[qi + 2] = (15 - px) * 17; + img[qi + 3] = 255; + } + if (bps == 8) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + i]; + img[qi] = img[qi + 1] = img[qi + 2] = 255 - px; + img[qi + 3] = 255; + } + if (bps == 16) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = off + 2 * i, px = data2[o + 1] << 8 | data2[o]; + img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, 255 - ~~(px * scl)); + img[qi + 3] = 255; + } + } + } else if (intp == 1) { + if (scl == null) scl = 1 / 256; + var f32 = (data2.length & 3) == 0 ? new Float32Array(data2.buffer) : null; + for (var y2 = 0; y2 < h; y2++) { + var off = y2 * bpl, io = y2 * w; + if (bps == 1) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 3)] >> 7 - (i & 7) & 1; + img[qi] = img[qi + 1] = img[qi + 2] = px * 255; + img[qi + 3] = 255; + } + if (bps == 2) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + (i >> 2)] >> 6 - 2 * (i & 3) & 3; + img[qi] = img[qi + 1] = img[qi + 2] = px * 85; + img[qi + 3] = 255; + } + if (bps == 8) for (var i = 0; i < w; i++) { + var qi = io + i << 2, px = data2[off + i * smpls]; + img[qi] = img[qi + 1] = img[qi + 2] = px; + img[qi + 3] = 255; + } + if (bps == 16) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = off + 2 * i, px = data2[o + 1] << 8 | data2[o]; + img[qi] = img[qi + 1] = img[qi + 2] = Math.min(255, ~~(px * scl)); + img[qi + 3] = 255; + } + if (bps == 32) for (var i = 0; i < w; i++) { + var qi = io + i << 2, o = (off >>> 2) + i, px = f32[o]; + img[qi] = img[qi + 1] = img[qi + 2] = ~~(0.5 + 255 * px); + img[qi + 3] = 255; + } + } + } else if (intp == 2) { + if (bps == 8) { + if (smpls == 1) for (var i = 0; i < area; i++) { + img[4 * i] = img[4 * i + 1] = img[4 * i + 2] = data2[i]; + img[4 * i + 3] = 255; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 1]; + img[qi + 2] = data2[ti + 2]; + img[qi + 3] = 255; + } + if (smpls >= 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * smpls; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 1]; + img[qi + 2] = data2[ti + 2]; + img[qi + 3] = data2[ti + 3]; + } + } else if (bps == 16) { + if (smpls == 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 8 + 1; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 2]; + img[qi + 2] = data2[ti + 4]; + img[qi + 3] = data2[ti + 6]; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 6 + 1; + img[qi] = data2[ti]; + img[qi + 1] = data2[ti + 2]; + img[qi + 2] = data2[ti + 4]; + img[qi + 3] = 255; + } + } else if (bps == 32) { + var ndt = new Float32Array(data2.buffer); + var min = 0; + for (var i = 0; i < ndt.length; i++) min = Math.min(min, ndt[i]); + if (min < 0) for (var i = 0; i < data2.length; i += 4) { + var t3 = data2[i]; + data2[i] = data2[i + 3]; + data2[i + 3] = t3; + t3 = data2[i + 1]; + data2[i + 1] = data2[i + 2]; + data2[i + 2] = t3; + } + var pmap = []; + for (var i = 0; i < 65536; i++) pmap.push(gamma(i / 65535)); + for (var i = 0; i < ndt.length; i++) { + var cv = Math.max(0, Math.min(1, ndt[i])); + ndt[i] = pmap[~~(0.5 + cv * 65535)]; + } + if (smpls == 3) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 3; + img[qi] = ~~(0.5 + ndt[ti] * 255); + img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255); + img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255); + img[qi + 3] = 255; + } + else if (smpls == 4) for (var i = 0; i < area; i++) { + var qi = i << 2, ti = i * 4; + img[qi] = ~~(0.5 + ndt[ti] * 255); + img[qi + 1] = ~~(0.5 + ndt[ti + 1] * 255); + img[qi + 2] = ~~(0.5 + ndt[ti + 2] * 255); + img[qi + 3] = ~~(0.5 + ndt[ti + 3] * 255); + } + else throw smpls; + } else throw bps; + } else if (intp == 3) { + var map2 = out["t320"]; + var cn = 1 << bps; + var nexta = bps == 8 && smpls > 1 && out["t338"] && out["t338"][0] != 0; + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + var i = y2 * w + x2; + var qi = i << 2, mi2 = 0; + var dof = y2 * bpl; + if (false) { + } else if (bps == 1) mi2 = data2[dof + (x2 >>> 3)] >>> 7 - (x2 & 7) & 1; + else if (bps == 2) mi2 = data2[dof + (x2 >>> 2)] >>> 6 - 2 * (x2 & 3) & 3; + else if (bps == 4) mi2 = data2[dof + (x2 >>> 1)] >>> 4 - 4 * (x2 & 1) & 15; + else if (bps == 8) mi2 = data2[dof + x2 * smpls]; + else throw bps; + img[qi] = map2[mi2] >> 8; + img[qi + 1] = map2[cn + mi2] >> 8; + img[qi + 2] = map2[cn + cn + mi2] >> 8; + img[qi + 3] = nexta ? data2[dof + x2 * smpls + 1] : 255; + } + } else if (intp == 5) { + var gotAlpha = smpls > 4 ? 1 : 0; + for (var i = 0; i < area; i++) { + var qi = i << 2, si = i * smpls; + if (window.UDOC) { + var C2 = data2[si], M = data2[si + 1], Y2 = data2[si + 2], K = data2[si + 3]; + var c2 = UDOC.C.cmykToRgb([C2 * (1 / 255), M * (1 / 255), Y2 * (1 / 255), K * (1 / 255)]); + img[qi] = ~~(0.5 + 255 * c2[0]); + img[qi + 1] = ~~(0.5 + 255 * c2[1]); + img[qi + 2] = ~~(0.5 + 255 * c2[2]); + } else { + var C2 = 255 - data2[si], M = 255 - data2[si + 1], Y2 = 255 - data2[si + 2], K = (255 - data2[si + 3]) * (1 / 255); + img[qi] = ~~(C2 * K + 0.5); + img[qi + 1] = ~~(M * K + 0.5); + img[qi + 2] = ~~(Y2 * K + 0.5); + } + img[qi + 3] = 255 * (1 - gotAlpha) + data2[si + 4] * gotAlpha; + } + } else if (intp == 6 && out["t278"]) { + var rps = out["t278"][0]; + for (var y2 = 0; y2 < h; y2 += rps) { + var i = y2 * w, len = rps * w; + for (var j = 0; j < len; j++) { + var qi = 4 * (i + j), si = 3 * i + 4 * (j >>> 1); + var Y2 = data2[si + (j & 1)], Cb = data2[si + 2] - 128, Cr = data2[si + 3] - 128; + var r = Y2 + ((Cr >> 2) + (Cr >> 3) + (Cr >> 5)); + var g2 = Y2 - ((Cb >> 2) + (Cb >> 4) + (Cb >> 5)) - ((Cr >> 1) + (Cr >> 3) + (Cr >> 4) + (Cr >> 5)); + var b3 = Y2 + (Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6)); + img[qi] = Math.max(0, Math.min(255, r)); + img[qi + 1] = Math.max(0, Math.min(255, g2)); + img[qi + 2] = Math.max(0, Math.min(255, b3)); + img[qi + 3] = 255; + } + } + } else if (intp == 32845) { + for (var y2 = 0; y2 < h; y2++) + for (var x2 = 0; x2 < w; x2++) { + var si = (y2 * w + x2) * 6, qi = (y2 * w + x2) * 4; + var L = data2[si + 1] << 8 | data2[si]; + var L = Math.pow(2, (L + 0.5) / 256 - 64); + var u = (data2[si + 3] + 0.5) / 410; + var v = (data2[si + 5] + 0.5) / 410; + var sX = 9 * u / (6 * u - 16 * v + 12); + var sY = 4 * v / (6 * u - 16 * v + 12); + var bY = L; + var X2 = sX * bY / sY, Y2 = bY, Z2 = (1 - sX - sY) * bY / sY; + var r = 2.69 * X2 - 1.276 * Y2 - 0.414 * Z2; + var g2 = -1.022 * X2 + 1.978 * Y2 + 0.044 * Z2; + var b3 = 0.061 * X2 - 0.224 * Y2 + 1.163 * Z2; + img[qi] = gamma(Math.min(r, 1)) * 255; + img[qi + 1] = gamma(Math.min(g2, 1)) * 255; + img[qi + 2] = gamma(Math.min(b3, 1)) * 255; + img[qi + 3] = 255; + } + } else log("Unknown Photometric interpretation: " + intp); + return img; +}; +UTIF2.replaceIMG = function(imgs) { + if (imgs == null) imgs = document.getElementsByTagName("img"); + var sufs = ["tif", "tiff", "dng", "cr2", "nef"]; + for (var i = 0; i < imgs.length; i++) { + var img = imgs[i], src = img.getAttribute("src"); + if (src == null) continue; + var suff = src.split(".").pop().toLowerCase(); + if (sufs.indexOf(suff) == -1) continue; + var xhr = new XMLHttpRequest(); + UTIF2._xhrs.push(xhr); + UTIF2._imgs.push(img); + xhr.open("GET", src); + xhr.responseType = "arraybuffer"; + xhr.onload = UTIF2._imgLoaded; + xhr.send(); + } +}; +UTIF2._xhrs = []; +UTIF2._imgs = []; +UTIF2._imgLoaded = function(e) { + var ind = UTIF2._xhrs.indexOf(e.target), img = UTIF2._imgs[ind]; + UTIF2._xhrs.splice(ind, 1); + UTIF2._imgs.splice(ind, 1); + img.setAttribute("src", UTIF2.bufferToURI(e.target.response)); +}; +UTIF2.bufferToURI = function(buff) { + var ifds = UTIF2.decode(buff); + var vsns = ifds, ma = 0, page = vsns[0]; + if (ifds[0].subIFD) vsns = vsns.concat(ifds[0].subIFD); + for (var i = 0; i < vsns.length; i++) { + var img = vsns[i]; + if (img["t258"] == null || img["t258"].length < 3) continue; + var ar = img["t256"] * img["t257"]; + if (ar > ma) { + ma = ar; + page = img; + } + } + UTIF2.decodeImage(buff, page, ifds); + var rgba = UTIF2.toRGBA8(page), w = page.width, h = page.height; + var cnv = document.createElement("canvas"); + cnv.width = w; + cnv.height = h; + var ctx = cnv.getContext("2d"); + var imgd = new ImageData(new Uint8ClampedArray(rgba.buffer), w, h); + ctx.putImageData(imgd, 0, 0); + return cnv.toDataURL(); +}; +UTIF2._binBE = { + nextZero: function(data2, o) { + while (data2[o] != 0) o++; + return o; + }, + readUshort: function(buff, p2) { + return buff[p2] << 8 | buff[p2 + 1]; + }, + readShort: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 1]; + a2[1] = buff[p2 + 0]; + return UTIF2._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF2._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 3]; + a2[1] = buff[p2 + 2]; + a2[2] = buff[p2 + 1]; + a2[3] = buff[p2 + 0]; + return UTIF2._binBE.ui32[0]; + }, + readASCII: function(buff, p2, l2) { + var s = ""; + for (var i = 0; i < l2; i++) s += String.fromCharCode(buff[p2 + i]); + return s; + }, + readFloat: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + 3 - i]; + return UTIF2._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + 7 - i]; + return UTIF2._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 >> 8 & 255; + buff[p2 + 1] = n2 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF2._binBE.ui8; + UTIF2._binBE.i32[0] = n2; + buff[p2 + 3] = a2[0]; + buff[p2 + 2] = a2[1]; + buff[p2 + 1] = a2[2]; + buff[p2 + 0] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >> 24 & 255; + buff[p2 + 1] = n2 >> 16 & 255; + buff[p2 + 2] = n2 >> 8 & 255; + buff[p2 + 3] = n2 >> 0 & 255; + }, + writeASCII: function(buff, p2, s) { + for (var i = 0; i < s.length; i++) buff[p2 + i] = s.charCodeAt(i); + }, + writeDouble: function(buff, p2, n2) { + UTIF2._binBE.fl64[0] = n2; + for (var i = 0; i < 8; i++) buff[p2 + i] = UTIF2._binBE.ui8[7 - i]; + } +}; +UTIF2._binBE.ui8 = new Uint8Array(8); +UTIF2._binBE.i16 = new Int16Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.i32 = new Int32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.ui32 = new Uint32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.fl32 = new Float32Array(UTIF2._binBE.ui8.buffer); +UTIF2._binBE.fl64 = new Float64Array(UTIF2._binBE.ui8.buffer); +UTIF2._binLE = { + nextZero: UTIF2._binBE.nextZero, + readUshort: function(buff, p2) { + return buff[p2 + 1] << 8 | buff[p2]; + }, + readShort: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + return UTIF2._binBE.i16[0]; + }, + readInt: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF2._binBE.i32[0]; + }, + readUint: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + a2[0] = buff[p2 + 0]; + a2[1] = buff[p2 + 1]; + a2[2] = buff[p2 + 2]; + a2[3] = buff[p2 + 3]; + return UTIF2._binBE.ui32[0]; + }, + readASCII: UTIF2._binBE.readASCII, + readFloat: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 4; i++) a2[i] = buff[p2 + i]; + return UTIF2._binBE.fl32[0]; + }, + readDouble: function(buff, p2) { + var a2 = UTIF2._binBE.ui8; + for (var i = 0; i < 8; i++) a2[i] = buff[p2 + i]; + return UTIF2._binBE.fl64[0]; + }, + writeUshort: function(buff, p2, n2) { + buff[p2] = n2 & 255; + buff[p2 + 1] = n2 >> 8 & 255; + }, + writeInt: function(buff, p2, n2) { + var a2 = UTIF2._binBE.ui8; + UTIF2._binBE.i32[0] = n2; + buff[p2 + 0] = a2[0]; + buff[p2 + 1] = a2[1]; + buff[p2 + 2] = a2[2]; + buff[p2 + 3] = a2[3]; + }, + writeUint: function(buff, p2, n2) { + buff[p2] = n2 >>> 0 & 255; + buff[p2 + 1] = n2 >>> 8 & 255; + buff[p2 + 2] = n2 >>> 16 & 255; + buff[p2 + 3] = n2 >>> 24 & 255; + }, + writeASCII: UTIF2._binBE.writeASCII +}; +UTIF2._copyTile = function(tb, tw, th, b3, w, h, xoff, yoff) { + var xlim = Math.min(tw, w - xoff); + var ylim = Math.min(th, h - yoff); + for (var y2 = 0; y2 < ylim; y2++) { + var tof = (yoff + y2) * w + xoff; + var sof = y2 * tw; + for (var x2 = 0; x2 < xlim; x2++) b3[tof + x2] = tb[sof + x2]; + } +}; +UTIF2._inflateRaw = function() { + var H = {}; + H.H = {}; + H.H.N = function(N, W) { + var R4 = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q3 = 0, X2 = 0, u = 0, w = 0, d = 0, v, C2; + if (N[0] == 3 && N[1] == 0) return W ? W : new R4(0); + var V = H.H, n2 = V.b, A2 = V.e, l2 = V.R, M = V.n, I2 = V.A, e = V.Z, b3 = V.m, Z2 = W == null; + if (Z2) W = new R4(N.length >>> 2 << 5); + while (i == 0) { + i = n2(N, d, 1); + m = n2(N, d + 1, 2); + d += 3; + if (m == 0) { + if ((d & 7) != 0) d += 8 - (d & 7); + var D = (d >>> 3) + 4, q2 = N[D - 4] | N[D - 3] << 8; + if (Z2) W = H.H.W(W, w + q2); + W.set(new R4(N.buffer, N.byteOffset + D, q2), w); + d = D + q2 << 3; + w += q2; + continue; + } + if (Z2) W = H.H.W(W, w + (1 << 17)); + if (m == 1) { + v = b3.J; + C2 = b3.h; + X2 = (1 << 9) - 1; + u = (1 << 5) - 1; + } + if (m == 2) { + J = A2(N, d, 5) + 257; + h = A2(N, d + 5, 5) + 1; + Q3 = A2(N, d + 10, 4) + 4; + d += 14; + var E2 = d, j = 1; + for (var c2 = 0; c2 < 38; c2 += 2) { + b3.Q[c2] = 0; + b3.Q[c2 + 1] = 0; + } + for (var c2 = 0; c2 < Q3; c2++) { + var K = A2(N, d + c2 * 3, 3); + b3.Q[(b3.X[c2] << 1) + 1] = K; + if (K > j) j = K; + } + d += 3 * Q3; + M(b3.Q, j); + I2(b3.Q, j, b3.u); + v = b3.w; + C2 = b3.d; + d = l2(b3.u, (1 << j) - 1, J + h, N, d, b3.v); + var r = V.V(b3.v, 0, J, b3.C); + X2 = (1 << r) - 1; + var S = V.V(b3.v, J, h, b3.D); + u = (1 << S) - 1; + M(b3.C, r); + I2(b3.C, r, v); + M(b3.D, S); + I2(b3.D, S, C2); + } + while (true) { + var T = v[e(N, d) & X2]; + d += T & 15; + var p2 = T >>> 4; + if (p2 >>> 8 == 0) { + W[w++] = p2; + } else if (p2 == 256) { + break; + } else { + var z = w + p2 - 254; + if (p2 > 264) { + var _ = b3.q[p2 - 257]; + z = w + (_ >>> 3) + A2(N, d, _ & 7); + d += _ & 7; + } + var $2 = C2[e(N, d) & u]; + d += $2 & 15; + var s = $2 >>> 4, Y2 = b3.c[s], a2 = (Y2 >>> 4) + n2(N, d, Y2 & 15); + d += Y2 & 15; + while (w < z) { + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + W[w] = W[w++ - a2]; + } + w = z; + } + } + } + return W.length == w ? W : W.slice(0, w); + }; + H.H.W = function(N, W) { + var R4 = N.length; + if (W <= R4) return N; + var V = new Uint8Array(R4 << 1); + V.set(N, 0); + return V; + }; + H.H.R = function(N, W, R4, V, n2, A2) { + var l2 = H.H.e, M = H.H.Z, I2 = 0; + while (I2 < R4) { + var e = N[M(V, n2) & W]; + n2 += e & 15; + var b3 = e >>> 4; + if (b3 <= 15) { + A2[I2] = b3; + I2++; + } else { + var Z2 = 0, m = 0; + if (b3 == 16) { + m = 3 + l2(V, n2, 2); + n2 += 2; + Z2 = A2[I2 - 1]; + } else if (b3 == 17) { + m = 3 + l2(V, n2, 3); + n2 += 3; + } else if (b3 == 18) { + m = 11 + l2(V, n2, 7); + n2 += 7; + } + var J = I2 + m; + while (I2 < J) { + A2[I2] = Z2; + I2++; + } + } + } + return n2; + }; + H.H.V = function(N, W, R4, V) { + var n2 = 0, A2 = 0, l2 = V.length >>> 1; + while (A2 < R4) { + var M = N[A2 + W]; + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = M; + if (M > n2) n2 = M; + A2++; + } + while (A2 < l2) { + V[A2 << 1] = 0; + V[(A2 << 1) + 1] = 0; + A2++; + } + return n2; + }; + H.H.n = function(N, W) { + var R4 = H.H.m, V = N.length, n2, A2, l2, M, I2, e = R4.j; + for (var M = 0; M <= W; M++) e[M] = 0; + for (M = 1; M < V; M += 2) e[N[M]]++; + var b3 = R4.K; + n2 = 0; + e[0] = 0; + for (A2 = 1; A2 <= W; A2++) { + n2 = n2 + e[A2 - 1] << 1; + b3[A2] = n2; + } + for (l2 = 0; l2 < V; l2 += 2) { + I2 = N[l2 + 1]; + if (I2 != 0) { + N[l2] = b3[I2]; + b3[I2]++; + } + } + }; + H.H.A = function(N, W, R4) { + var V = N.length, n2 = H.H.m, A2 = n2.r; + for (var l2 = 0; l2 < V; l2 += 2) if (N[l2 + 1] != 0) { + var M = l2 >> 1, I2 = N[l2 + 1], e = M << 4 | I2, b3 = W - I2, Z2 = N[l2] << b3, m = Z2 + (1 << b3); + while (Z2 != m) { + var J = A2[Z2] >>> 15 - W; + R4[J] = e; + Z2++; + } + } + }; + H.H.l = function(N, W) { + var R4 = H.H.m.r, V = 15 - W; + for (var n2 = 0; n2 < N.length; n2 += 2) { + var A2 = N[n2] << W - N[n2 + 1]; + N[n2] = R4[A2] >>> V; + } + }; + H.H.M = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + }; + H.H.I = function(N, W, R4) { + R4 = R4 << (W & 7); + var V = W >>> 3; + N[V] |= R4; + N[V + 1] |= R4 >>> 8; + N[V + 2] |= R4 >>> 16; + }; + H.H.e = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.b = function(N, W, R4) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R4) - 1; + }; + H.H.Z = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); + }; + H.H.i = function(N, W) { + return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); + }; + H.H.m = function() { + var N = Uint16Array, W = Uint32Array; + return { 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) }; + }(); + (function() { + var N = H.H.m, W = 1 << 15; + for (var R4 = 0; R4 < W; R4++) { + var V = R4; + V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; + V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; + V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; + V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; + N.r[R4] = (V >>> 16 | V << 16) >>> 17; + } + function n2(A2, l2, M) { + while (l2-- != 0) A2.push(0, M); + } + for (var R4 = 0; R4 < 32; R4++) { + N.q[R4] = N.S[R4] << 3 | N.T[R4]; + N.c[R4] = N.p[R4] << 4 | N.z[R4]; + } + n2(N._, 144, 8); + n2(N._, 255 - 143, 9); + n2(N._, 279 - 255, 7); + n2(N._, 287 - 279, 8); + H.H.n(N._, 9); + H.H.A(N._, 9, N.J); + H.H.l(N._, 9); + n2(N.$, 32, 5); + H.H.n(N.$, 5); + H.H.A(N.$, 5, N.h); + H.H.l(N.$, 5); + n2(N.Q, 19, 0); + n2(N.C, 286, 0); + n2(N.D, 30, 0); + n2(N.v, 320, 0); + })(); + return H.H.N; +}(); +UTIF2.LosslessJpegDecode = /* @__PURE__ */ function() { + var b3, O; + function l2() { + return b3[O++]; + } + function m() { + return b3[O++] << 8 | b3[O++]; + } + function a0(h) { + var V = l2(), I2 = [0, 0, 0, 255], f = [], G = 8; + for (var w = 0; w < 16; w++) f[w] = l2(); + for (var w = 0; w < 16; w++) { + for (var x2 = 0; x2 < f[w]; x2++) { + var T = z(I2, 0, w + 1, 1); + I2[T + 3] = l2(); + } + } + var E2 = new Uint8Array(1 << G); + h[V] = [new Uint8Array(I2), E2]; + for (var w = 0; w < 1 << G; w++) { + var s = G, _ = w, Y2 = 0, F2 = 0; + while (I2[Y2 + 3] == 255 && s != 0) { + F2 = _ >> --s & 1; + Y2 = I2[Y2 + F2]; + } + E2[w] = Y2; + } + } + function z(h, V, I2, f) { + if (h[V + 3] != 255) return 0; + if (I2 == 0) return V; + for (var w = 0; w < 2; w++) { + if (h[V + w] == 0) { + h[V + w] = h.length; + h.push(0, 0, f, 255); + } + var x2 = z(h, h[V + w], I2 - 1, f + 1); + if (x2 != 0) return x2; + } + return 0; + } + function i(h) { + var V = h.b, I2 = h.f; + while (V < 25 && h.a < h.d) { + var f = h.data[h.a++]; + if (f == 255 && !h.c) h.a++; + I2 = I2 << 8 | f; + V += 8; + } + if (V < 0) throw "e"; + h.b = V; + h.f = I2; + } + function H(h, V) { + if (V.b < h) i(V); + return V.f >> (V.b -= h) & 65535 >> 16 - h; + } + function g2(h, V) { + var I2 = h[0], f = 0, w = 255, x2 = 0; + if (V.b < 16) i(V); + var T = V.f >> V.b - 8 & 255; + f = h[1][T]; + w = I2[f + 3]; + V.b -= I2[f + 2]; + while (w == 255) { + x2 = V.f >> --V.b & 1; + f = I2[f + x2]; + w = I2[f + 3]; + } + return w; + } + function P(h, V) { + if (h < 32768 >> 16 - V) h += -(1 << V) + 1; + return h; + } + function a2(h, V) { + var I2 = g2(h, V); + if (I2 == 0) return 0; + if (I2 == 16) return -32768; + var f = H(I2, V); + return P(f, I2); + } + function X2(h, V, I2, f, w, x2) { + var T = 0; + for (var G = 0; G < x2; G++) { + var s = G * V; + for (var _ = 0; _ < V; _ += w) { + T++; + for (var Y2 = 0; Y2 < w; Y2++) h[s + _ + Y2] = a2(f[Y2], I2); + } + if (I2.e != 0 && T % I2.e == 0 && G != 0) { + var F2 = I2.a, t3 = I2.data; + while (t3[F2] != 255 || !(208 <= t3[F2 + 1] && t3[F2 + 1] <= 215)) F2--; + I2.a = F2 + 2; + I2.f = 0; + I2.b = 0; + } + } + } + function o(h, V) { + return P(H(h, V), h); + } + function a1(h, V, I2, f, w) { + var x2 = b3.length - O; + for (var T = 0; T < x2; T += 4) { + var G = b3[O + T]; + b3[O + T] = b3[O + T + 3]; + b3[O + T + 3] = G; + var G = b3[O + T + 1]; + b3[O + T + 1] = b3[O + T + 2]; + b3[O + T + 2] = G; + } + for (var E2 = 0; E2 < w; E2++) { + var s = 32768, _ = 32768; + for (var Y2 = 0; Y2 < V; Y2 += 2) { + var F2 = g2(f, I2), t3 = g2(f, I2); + if (F2 != 0) s += o(F2, I2); + if (t3 != 0) _ += o(t3, I2); + h[E2 * V + Y2] = s & 65535; + h[E2 * V + Y2 + 1] = _ & 65535; + } + } + } + function C2(h) { + b3 = h; + O = 0; + if (m() != 65496) throw "e"; + var V = [], I2 = 0, f = 0, w = 0, x2 = [], T = [], G = [], E2 = 0, s = 0, _ = 0; + while (true) { + var Y2 = m(); + if (Y2 == 65535) { + O--; + continue; + } + var F2 = m(); + if (Y2 == 65475) { + f = l2(); + s = m(); + _ = m(); + E2 = l2(); + for (var t3 = 0; t3 < E2; t3++) { + var a3 = l2(), J = l2(), r = l2(); + if (r != 0) throw "e"; + V[a3] = [t3, J >> 4, J & 15]; + } + } else if (Y2 == 65476) { + var a32 = O + F2 - 2; + while (O < a32) a0(T); + } else if (Y2 == 65498) { + O++; + for (var t3 = 0; t3 < E2; t3++) { + var a5 = l2(), v = V[a5]; + G[v[0]] = T[l2() >>> 4]; + x2[v[0]] = v.slice(1); + } + I2 = l2(); + O += 2; + break; + } else if (Y2 == 65501) { + w = m(); + } else { + O += F2 - 2; + } + } + var a4 = f > 8 ? Uint16Array : Uint8Array, $2 = new a4(s * _ * E2), M = { b: 0, f: 0, c: I2 == 8, a: O, data: b3, d: b3.length, e: w }; + if (M.c) a1($2, _ * E2, M, G[0], s); + else { + var c2 = [], p2 = 0, D = 0; + for (var t3 = 0; t3 < E2; t3++) { + var N = x2[t3], S = N[0], K = N[1]; + if (S > p2) p2 = S; + if (K > D) D = K; + c2.push(S * K); + } + if (p2 != 1 || D != 1) { + if (E2 != 3 || c2[1] != 1 || c2[2] != 1) throw "e"; + if (p2 != 2 || D != 1 && D != 2) throw "e"; + var u = [], Z2 = 0; + for (var t3 = 0; t3 < E2; t3++) { + for (var R4 = 0; R4 < c2[t3]; R4++) u.push(G[t3]); + Z2 += c2[t3]; + } + var B2 = _ / p2, e = s / D, d = B2 * e; + X2($2, B2 * Z2, M, u, Z2, e); + j($2, I2, B2, e, Z2 - 2, Z2, Z2, f); + var A2 = new Uint16Array(d * c2[0]); + if (p2 == 2 && D == 2) { + for (var t3 = 0; t3 < d; t3++) { + A2[4 * t3] = $2[6 * t3]; + A2[4 * t3 + 1] = $2[6 * t3 + 1]; + A2[4 * t3 + 2] = $2[6 * t3 + 2]; + A2[4 * t3 + 3] = $2[6 * t3 + 3]; + } + j(A2, I2, B2 * 4, e, 0, 1, 1, f); + for (var t3 = 0; t3 < d; t3++) { + $2[6 * t3] = A2[4 * t3]; + $2[6 * t3 + 1] = A2[4 * t3 + 1]; + $2[6 * t3 + 2] = A2[4 * t3 + 2]; + $2[6 * t3 + 3] = A2[4 * t3 + 3]; + } + } + if (p2 == 2 && D == 1) { + for (var t3 = 0; t3 < d; t3++) { + A2[2 * t3] = $2[4 * t3]; + A2[2 * t3 + 1] = $2[4 * t3 + 1]; + } + j(A2, I2, B2 * 2, e, 0, 1, 1, f); + for (var t3 = 0; t3 < d; t3++) { + $2[4 * t3] = A2[2 * t3]; + $2[4 * t3 + 1] = A2[2 * t3 + 1]; + } + } + var n2 = $2.slice(0); + for (var K = 0; K < s; K++) { + if (D == 2) for (var S = 0; S < _; S++) { + var q2 = (K * _ + S) * E2, k2 = ((K >>> 1) * B2 + (S >>> 1)) * Z2, y2 = (K & 1) * 2 + (S & 1); + $2[q2] = n2[k2 + y2]; + $2[q2 + 1] = n2[k2 + 4]; + $2[q2 + 2] = n2[k2 + 5]; + } + else for (var S = 0; S < _; S++) { + var q2 = (K * _ + S) * E2, k2 = (K * B2 + (S >>> 1)) * Z2, y2 = S & 1; + $2[q2] = n2[k2 + y2]; + $2[q2 + 1] = n2[k2 + 2]; + $2[q2 + 2] = n2[k2 + 3]; + } + } + } else { + X2($2, _ * E2, M, G, E2, s); + if (w == 0) j($2, I2, _, s, 0, E2, E2, f); + else { + var U = Math.floor(w / _); + for (var K = 0; K < s; K += U) { + var L = $2.slice(K * _ * E2, (K + U) * _ * E2); + j(L, I2, _, U, 0, E2, E2, f); + $2.set(L, K * _ * E2); + } + } + } + } + return $2; + } + function j(h, V, I2, f, w, x2, G, E2) { + var s = I2 * G; + for (var _ = w; _ < x2; _++) h[_] += 1 << E2 - 1; + for (var Y2 = G; Y2 < s; Y2 += G) for (var _ = w; _ < x2; _++) h[Y2 + _] += h[Y2 + _ - G]; + for (var F2 = 1; F2 < f; F2++) { + var t3 = F2 * s; + for (var _ = w; _ < x2; _++) h[t3 + _] += h[t3 + _ - s]; + for (var Y2 = G; Y2 < s; Y2 += G) { + for (var _ = w; _ < x2; _++) { + var a3 = t3 + Y2 + _, J = a3 - s, r = h[a3 - G], Q3 = 0; + if (V == 0) Q3 = 0; + else if (V == 1) Q3 = r; + else if (V == 2) Q3 = h[J]; + else if (V == 3) Q3 = h[J - G]; + else if (V == 4) Q3 = r + (h[J] - h[J - G]); + else if (V == 5) Q3 = r + (h[J] - h[J - G] >>> 1); + else if (V == 6) Q3 = h[J] + (r - h[J - G] >>> 1); + else if (V == 7) Q3 = r + h[J] >>> 1; + else throw V; + h[a3] += Q3; + } + } + } + } + return C2; +}(); +(function() { + var G = 0, F2 = 1, i = 2, b3 = 3, J = 4, N = 5, E2 = 6, s = 7, c2 = 8, T = 9, a3 = 10, f = 11, q2 = 12, M = 13, m = 14, x2 = 15, L = 16, $2 = 17, p2 = 18; + function a5(t3) { + var Z2 = UTIF2._binBE.readUshort, u = { b: Z2(t3, 0), i: t3[2], C: t3[3], u: t3[4], q: Z2(t3, 5), k: Z2(t3, 7), e: Z2(t3, 9), l: Z2(t3, 11), s: t3[13], d: Z2(t3, 14) }; + if (u.b != 18771 || u.i > 1 || u.q < 6 || u.q % 6 || u.e < 768 || u.e % 24 || u.l != 768 || u.k < u.l || u.k % u.l || u.k - u.e >= u.l || u.s > 16 || u.s != u.k / u.l || u.s != Math.ceil(u.e / u.l) || u.d != u.q / 6 || u.u != 12 && u.u != 14 && u.u != 16 || u.C != 16 && u.C != 0) { + throw "Invalid data"; + } + if (u.i == 0) { + throw "Not implemented. We need this file!"; + } + u.h = u.C == 16; + u.m = (u.h ? u.l * 2 / 3 : u.l >>> 1) | 0; + u.A = u.m + 2; + u.f = 64; + u.g = (1 << u.u) - 1; + u.n = 4 * u.u; + return u; + } + function a7(t3, Z2) { + var u = new Array(Z2.s), e = 4 * Z2.s, Q3 = 16 + e; + if (e & 12) Q3 += 16 - (e & 12); + for (var V = 0, O = 16; V < Z2.s; O += 4) { + var o = UTIF2._binBE.readUint(t3, O); + u[V] = t3.slice(Q3, Q3 + o); + u[V].j = 0; + u[V].a = 0; + Q3 += o; + V++; + } + if (Q3 != t3.length) throw "Invalid data"; + return u; + } + function a6(t3, Z2) { + for (var u = -Z2[4], e = 0; u <= Z2[4]; e++, u++) { + t3[e] = u <= -Z2[3] ? -4 : u <= -Z2[2] ? -3 : u <= -Z2[1] ? -2 : u < -Z2[0] ? -1 : u <= Z2[0] ? 0 : u < Z2[1] ? 1 : u < Z2[2] ? 2 : u < Z2[3] ? 3 : 4; + } + } + function a1(t3, Z2, u) { + var e = [Z2, 3 * Z2 + 18, 5 * Z2 + 67, 7 * Z2 + 276, u]; + t3.o = Z2; + t3.w = (e[4] + 2 * Z2) / (2 * Z2 + 1) + 1 | 0; + t3.v = Math.ceil(Math.log2(t3.w)); + t3.t = 9; + a6(t3.c, e); + } + function a2(t3) { + var Z2 = { c: new Int8Array(2 << t3.u) }; + a1(Z2, 0, t3.g); + return Z2; + } + function D(t3) { + var Z2 = [[], [], []], u = Math.max(2, t3.w + 32 >>> 6); + for (var e = 0; e < 3; e++) { + for (var Q3 = 0; Q3 < 41; Q3++) { + Z2[e][Q3] = [u, 1]; + } + } + return Z2; + } + function a4(t3) { + for (var Z2 = -1, u = 0; !u; Z2++) { + u = t3[t3.j] >>> 7 - t3.a & 1; + t3.a++; + t3.a &= 7; + if (!t3.a) t3.j++; + } + return Z2; + } + function K(t3, Z2) { + var u = 0, e = 8 - t3.a, Q3 = t3.j, V = t3.a; + if (Z2) { + if (Z2 >= e) { + do { + u <<= e; + Z2 -= e; + u |= t3[t3.j] & (1 << e) - 1; + t3.j++; + e = 8; + } while (Z2 >= 8); + } + if (Z2) { + u <<= Z2; + e -= Z2; + u |= t3[t3.j] >>> e & (1 << Z2) - 1; + } + t3.a = 8 - e; + } + return u; + } + function a0(t3, Z2) { + var u = 0; + if (Z2 < t3) { + while (u <= 14 && Z2 << ++u < t3) ; + } + return u; + } + function r(t3, Z2, u, e, Q3, V, O, o) { + if (o == null) o = 0; + var X2 = V + 1, k2 = X2 % 2, j = 0, I2 = 0, a10 = 0, l2, R4, w = e[Q3], S = e[Q3 - 1], H = e[Q3 - 2][X2], g2 = S[X2 - 1], Y2 = S[X2], P = S[X2 + 1], A2 = w[X2 - 1], v = w[X2 + 1], y2 = Math.abs, d, C2, n2, h; + if (k2) { + d = y2(P - Y2); + C2 = y2(H - Y2); + n2 = y2(g2 - Y2); + } + if (k2) { + h = d > n2 && C2 < d ? H + g2 : d < n2 && C2 < n2 ? H + P : P + g2; + h = h + 2 * Y2 >>> 2; + if (o) { + w[X2] = h; + return; + } + l2 = Z2.t * Z2.c[t3.g + Y2 - H] + Z2.c[t3.g + g2 - Y2]; + } else { + h = Y2 > g2 && Y2 > P || Y2 < g2 && Y2 < P ? v + A2 + 2 * Y2 >>> 2 : A2 + v >>> 1; + l2 = Z2.t * Z2.c[t3.g + Y2 - g2] + Z2.c[t3.g + g2 - A2]; + } + R4 = y2(l2); + var W = a4(u); + if (W < t3.n - Z2.v - 1) { + var z = a0(O[R4][0], O[R4][1]); + a10 = K(u, z) + (W << z); + } else { + a10 = K(u, Z2.v) + 1; + } + a10 = a10 & 1 ? -1 - (a10 >>> 1) : a10 >>> 1; + O[R4][0] += y2(a10); + if (O[R4][1] == t3.f) { + O[R4][0] >>>= 1; + O[R4][1] >>>= 1; + } + O[R4][1]++; + h = l2 < 0 ? h - a10 : h + a10; + if (t3.i) { + if (h < 0) h += Z2.w; + else if (h > t3.g) h -= Z2.w; + } + w[X2] = h >= 0 ? Math.min(h, t3.g) : 0; + } + function U(t3, Z2, u) { + var e = t3[0].length; + for (var Q3 = Z2; Q3 <= u; Q3++) { + t3[Q3][0] = t3[Q3 - 1][1]; + t3[Q3][e - 1] = t3[Q3 - 1][e - 2]; + } + } + function B2(t3) { + U(t3, s, q2); + U(t3, i, J); + U(t3, x2, $2); + } + function _(t3, Z2, u, e, Q3, V, O, o, X2, k2, j, I2, a10) { + var l2 = 0, R4 = 1, w = Q3 < M && Q3 > J; + while (R4 < t3.m) { + if (l2 < t3.m) { + r(t3, Z2, u, e, Q3, l2, O[X2], t3.h && (w && k2 || !w && (j || (l2 & I2) == a10))); + r(t3, Z2, u, e, V, l2, O[X2], t3.h && (!w && k2 || w && (j || (l2 & I2) == a10))); + l2 += 2; + } + if (l2 > 8) { + r(t3, Z2, u, e, Q3, R4, o[X2]); + r(t3, Z2, u, e, V, R4, o[X2]); + R4 += 2; + } + } + B2(e); + } + function a8(t3, Z2, u, e, Q3, V) { + _(t3, Z2, u, e, i, s, Q3, V, 0, 0, 1, 0, 8); + _(t3, Z2, u, e, c2, x2, Q3, V, 1, 0, 1, 0, 8); + _(t3, Z2, u, e, b3, T, Q3, V, 2, 1, 0, 3, 0); + _(t3, Z2, u, e, a3, L, Q3, V, 0, 0, 0, 3, 2); + _(t3, Z2, u, e, J, f, Q3, V, 1, 0, 0, 3, 2); + _(t3, Z2, u, e, q2, $2, Q3, V, 2, 1, 0, 3, 0); + } + function a9(t3, Z2, u, e, Q3, V) { + var O = V.length, o = t3.l; + if (Q3 + 1 == t3.s) o = t3.e - Q3 * t3.l; + var X2 = 6 * t3.e * e + Q3 * t3.l; + for (var k2 = 0; k2 < 6; k2++) { + for (var j = 0; j < o; j++) { + var I2 = V[k2 % O][j % O], a10; + if (I2 == 0) { + a10 = i + (k2 >>> 1); + } else if (I2 == 2) { + a10 = x2 + (k2 >>> 1); + } else { + a10 = s + k2; + } + var l2 = t3.h ? (j * 2 / 3 & 2147483646 | j % 3 & 1) + (j % 3 >>> 1) : j >>> 1; + Z2[X2 + j] = u[a10][l2 + 1]; + } + X2 += t3.e; + } + } + UTIF2._decompressRAF = function(t3, Z2) { + var u = a5(t3), e = a7(t3, u), Q3 = a2(u), V = new Int16Array(u.e * u.q); + if (Z2 == null) { + Z2 = u.h ? [[1, 1, 0, 1, 1, 2], [1, 1, 2, 1, 1, 0], [2, 0, 1, 0, 2, 1], [1, 1, 2, 1, 1, 0], [1, 1, 0, 1, 1, 2], [0, 2, 1, 2, 0, 1]] : [[0, 1], [3, 2]]; + } + var O = [[G, b3], [F2, J], [N, f], [E2, q2], [M, L], [m, $2]], o = []; + for (var X2 = 0; X2 < p2; X2++) { + o[X2] = new Uint16Array(u.A); + } + for (var k2 = 0; k2 < u.s; k2++) { + var j = D(Q3), I2 = D(Q3); + for (var X2 = 0; X2 < p2; X2++) { + for (var a10 = 0; a10 < u.A; a10++) { + o[X2][a10] = 0; + } + } + for (var l2 = 0; l2 < u.d; l2++) { + a8(u, Q3, e[k2], o, j, I2); + for (var X2 = 0; X2 < 6; X2++) { + for (var a10 = 0; a10 < u.A; a10++) { + o[O[X2][0]][a10] = o[O[X2][1]][a10]; + } + } + a9(u, V, o, l2, k2, Z2); + for (var X2 = i; X2 < p2; X2++) { + if ([N, E2, M, m].indexOf(X2) == -1) { + for (var a10 = 0; a10 < u.A; a10++) { + o[X2][a10] = 0; + } + } + } + B2(o); + } + } + return V; + }; +})(); +var utif_module_default = UTIF2; + +// node_modules/three/examples/jsm/loaders/TIFFLoader.js +var TIFFLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + } + parse(buffer) { + const ifds = utif_module_default.decode(buffer); + utif_module_default.decodeImage(buffer, ifds[0]); + const rgba = utif_module_default.toRGBA8(ifds[0]); + return { + width: ifds[0].width, + height: ifds[0].height, + data: rgba, + flipY: true, + magFilter: LinearFilter, + minFilter: LinearMipmapLinearFilter + }; + } +}; + +// node_modules/three/examples/jsm/libs/opentype.module.js +if (!String.prototype.codePointAt) { + (function() { + var defineProperty = function() { + try { + var object = {}; + var $defineProperty = Object.defineProperty; + var result = $defineProperty(object, object, object) && $defineProperty; + } catch (error) { + } + return result; + }(); + var codePointAt = function(position2) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size2 = string.length; + var index2 = position2 ? Number(position2) : 0; + if (index2 != index2) { + index2 = 0; + } + if (index2 < 0 || index2 >= size2) { + return void 0; + } + var first2 = string.charCodeAt(index2); + var second; + if ( + // check if it’s the start of a surrogate pair + first2 >= 55296 && first2 <= 56319 && // high surrogate + size2 > index2 + 1 + ) { + second = string.charCodeAt(index2 + 1); + if (second >= 56320 && second <= 57343) { + return (first2 - 55296) * 1024 + second - 56320 + 65536; + } + } + return first2; + }; + if (defineProperty) { + defineProperty(String.prototype, "codePointAt", { + "value": codePointAt, + "configurable": true, + "writable": true + }); + } else { + String.prototype.codePointAt = codePointAt; + } + })(); +} +var TINF_OK = 0; +var TINF_DATA_ERROR = -3; +function Tree() { + this.table = new Uint16Array(16); + this.trans = new Uint16Array(288); +} +function Data(source, dest) { + this.source = source; + this.sourceIndex = 0; + this.tag = 0; + this.bitcount = 0; + this.dest = dest; + this.destLen = 0; + this.ltree = new Tree(); + this.dtree = new Tree(); +} +var sltree = new Tree(); +var sdtree = new Tree(); +var length_bits = new Uint8Array(30); +var length_base = new Uint16Array(30); +var dist_bits = new Uint8Array(30); +var dist_base = new Uint16Array(30); +var clcidx = new Uint8Array([ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 +]); +var code_tree = new Tree(); +var lengths = new Uint8Array(288 + 32); +function tinf_build_bits_base(bits2, base, delta, first2) { + var i, sum2; + for (i = 0; i < delta; ++i) { + bits2[i] = 0; + } + for (i = 0; i < 30 - delta; ++i) { + bits2[i + delta] = i / delta | 0; + } + for (sum2 = first2, i = 0; i < 30; ++i) { + base[i] = sum2; + sum2 += 1 << bits2[i]; + } +} +function tinf_build_fixed_trees(lt, dt2) { + var i; + for (i = 0; i < 7; ++i) { + lt.table[i] = 0; + } + lt.table[7] = 24; + lt.table[8] = 152; + lt.table[9] = 112; + for (i = 0; i < 24; ++i) { + lt.trans[i] = 256 + i; + } + for (i = 0; i < 144; ++i) { + lt.trans[24 + i] = i; + } + for (i = 0; i < 8; ++i) { + lt.trans[24 + 144 + i] = 280 + i; + } + for (i = 0; i < 112; ++i) { + lt.trans[24 + 144 + 8 + i] = 144 + i; + } + for (i = 0; i < 5; ++i) { + dt2.table[i] = 0; + } + dt2.table[5] = 32; + for (i = 0; i < 32; ++i) { + dt2.trans[i] = i; + } +} +var offs = new Uint16Array(16); +function tinf_build_tree(t3, lengths2, off, num) { + var i, sum2; + for (i = 0; i < 16; ++i) { + t3.table[i] = 0; + } + for (i = 0; i < num; ++i) { + t3.table[lengths2[off + i]]++; + } + t3.table[0] = 0; + for (sum2 = 0, i = 0; i < 16; ++i) { + offs[i] = sum2; + sum2 += t3.table[i]; + } + for (i = 0; i < num; ++i) { + if (lengths2[off + i]) { + t3.trans[offs[lengths2[off + i]]++] = i; + } + } +} +function tinf_getbit(d) { + if (!d.bitcount--) { + d.tag = d.source[d.sourceIndex++]; + d.bitcount = 7; + } + var bit = d.tag & 1; + d.tag >>>= 1; + return bit; +} +function tinf_read_bits(d, num, base) { + if (!num) { + return base; + } + while (d.bitcount < 24) { + d.tag |= d.source[d.sourceIndex++] << d.bitcount; + d.bitcount += 8; + } + var val2 = d.tag & 65535 >>> 16 - num; + d.tag >>>= num; + d.bitcount -= num; + return val2 + base; +} +function tinf_decode_symbol(d, t3) { + while (d.bitcount < 24) { + d.tag |= d.source[d.sourceIndex++] << d.bitcount; + d.bitcount += 8; + } + var sum2 = 0, cur = 0, len = 0; + var tag = d.tag; + do { + cur = 2 * cur + (tag & 1); + tag >>>= 1; + ++len; + sum2 += t3.table[len]; + cur -= t3.table[len]; + } while (cur >= 0); + d.tag = tag; + d.bitcount -= len; + return t3.trans[sum2 + cur]; +} +function tinf_decode_trees(d, lt, dt2) { + var hlit, hdist, hclen; + var i, num, length2; + hlit = tinf_read_bits(d, 5, 257); + hdist = tinf_read_bits(d, 5, 1); + hclen = tinf_read_bits(d, 4, 4); + for (i = 0; i < 19; ++i) { + lengths[i] = 0; + } + for (i = 0; i < hclen; ++i) { + var clen2 = tinf_read_bits(d, 3, 0); + lengths[clcidx[i]] = clen2; + } + tinf_build_tree(code_tree, lengths, 0, 19); + for (num = 0; num < hlit + hdist; ) { + var sym = tinf_decode_symbol(d, code_tree); + switch (sym) { + case 16: + var prev = lengths[num - 1]; + for (length2 = tinf_read_bits(d, 2, 3); length2; --length2) { + lengths[num++] = prev; + } + break; + case 17: + for (length2 = tinf_read_bits(d, 3, 3); length2; --length2) { + lengths[num++] = 0; + } + break; + case 18: + for (length2 = tinf_read_bits(d, 7, 11); length2; --length2) { + lengths[num++] = 0; + } + break; + default: + lengths[num++] = sym; + break; + } + } + tinf_build_tree(lt, lengths, 0, hlit); + tinf_build_tree(dt2, lengths, hlit, hdist); +} +function tinf_inflate_block_data(d, lt, dt2) { + while (1) { + var sym = tinf_decode_symbol(d, lt); + if (sym === 256) { + return TINF_OK; + } + if (sym < 256) { + d.dest[d.destLen++] = sym; + } else { + var length2, dist, offs2; + var i; + sym -= 257; + length2 = tinf_read_bits(d, length_bits[sym], length_base[sym]); + dist = tinf_decode_symbol(d, dt2); + offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); + for (i = offs2; i < offs2 + length2; ++i) { + d.dest[d.destLen++] = d.dest[i]; + } + } + } +} +function tinf_inflate_uncompressed_block(d) { + var length2, invlength; + var i; + while (d.bitcount > 8) { + d.sourceIndex--; + d.bitcount -= 8; + } + length2 = d.source[d.sourceIndex + 1]; + length2 = 256 * length2 + d.source[d.sourceIndex]; + invlength = d.source[d.sourceIndex + 3]; + invlength = 256 * invlength + d.source[d.sourceIndex + 2]; + if (length2 !== (~invlength & 65535)) { + return TINF_DATA_ERROR; + } + d.sourceIndex += 4; + for (i = length2; i; --i) { + d.dest[d.destLen++] = d.source[d.sourceIndex++]; + } + d.bitcount = 0; + return TINF_OK; +} +function tinf_uncompress(source, dest) { + var d = new Data(source, dest); + var bfinal, btype, res; + do { + bfinal = tinf_getbit(d); + btype = tinf_read_bits(d, 2, 0); + switch (btype) { + case 0: + res = tinf_inflate_uncompressed_block(d); + break; + case 1: + res = tinf_inflate_block_data(d, sltree, sdtree); + break; + case 2: + tinf_decode_trees(d, d.ltree, d.dtree); + res = tinf_inflate_block_data(d, d.ltree, d.dtree); + break; + default: + res = TINF_DATA_ERROR; + } + if (res !== TINF_OK) { + throw new Error("Data error"); + } + } while (!bfinal); + if (d.destLen < d.dest.length) { + if (typeof d.dest.slice === "function") { + return d.dest.slice(0, d.destLen); + } else { + return d.dest.subarray(0, d.destLen); + } + } + return d.dest; +} +tinf_build_fixed_trees(sltree, sdtree); +tinf_build_bits_base(length_bits, length_base, 4, 3); +tinf_build_bits_base(dist_bits, dist_base, 2, 1); +length_bits[28] = 0; +length_base[28] = 258; +var tinyInflate = tinf_uncompress; +function derive(v0, v12, v2, v3, t3) { + return Math.pow(1 - t3, 3) * v0 + 3 * Math.pow(1 - t3, 2) * t3 * v12 + 3 * (1 - t3) * Math.pow(t3, 2) * v2 + Math.pow(t3, 3) * v3; +} +function BoundingBox() { + this.x1 = Number.NaN; + this.y1 = Number.NaN; + this.x2 = Number.NaN; + this.y2 = Number.NaN; +} +BoundingBox.prototype.isEmpty = function() { + return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2); +}; +BoundingBox.prototype.addPoint = function(x2, y2) { + if (typeof x2 === "number") { + if (isNaN(this.x1) || isNaN(this.x2)) { + this.x1 = x2; + this.x2 = x2; + } + if (x2 < this.x1) { + this.x1 = x2; + } + if (x2 > this.x2) { + this.x2 = x2; + } + } + if (typeof y2 === "number") { + if (isNaN(this.y1) || isNaN(this.y2)) { + this.y1 = y2; + this.y2 = y2; + } + if (y2 < this.y1) { + this.y1 = y2; + } + if (y2 > this.y2) { + this.y2 = y2; + } + } +}; +BoundingBox.prototype.addX = function(x2) { + this.addPoint(x2, null); +}; +BoundingBox.prototype.addY = function(y2) { + this.addPoint(null, y2); +}; +BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x3, y3) { + var p0 = [x0, y0]; + var p1 = [x1, y1]; + var p2 = [x2, y2]; + var p3 = [x3, y3]; + this.addPoint(x0, y0); + this.addPoint(x3, y3); + for (var i = 0; i <= 1; i++) { + var b3 = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; + var a2 = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; + var c2 = 3 * p1[i] - 3 * p0[i]; + if (a2 === 0) { + if (b3 === 0) { + continue; + } + var t3 = -c2 / b3; + if (0 < t3 && t3 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t3)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t3)); + } + } + continue; + } + var b2ac = Math.pow(b3, 2) - 4 * c2 * a2; + if (b2ac < 0) { + continue; + } + var t1 = (-b3 + Math.sqrt(b2ac)) / (2 * a2); + if (0 < t1 && t1 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1)); + } + } + var t22 = (-b3 - Math.sqrt(b2ac)) / (2 * a2); + if (0 < t22 && t22 < 1) { + if (i === 0) { + this.addX(derive(p0[i], p1[i], p2[i], p3[i], t22)); + } + if (i === 1) { + this.addY(derive(p0[i], p1[i], p2[i], p3[i], t22)); + } + } + } +}; +BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x2, y2) { + var cp1x = x0 + 2 / 3 * (x1 - x0); + var cp1y = y0 + 2 / 3 * (y1 - y0); + var cp2x = cp1x + 1 / 3 * (x2 - x0); + var cp2y = cp1y + 1 / 3 * (y2 - y0); + this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x2, y2); +}; +function Path2() { + this.commands = []; + this.fill = "black"; + this.stroke = null; + this.strokeWidth = 1; +} +Path2.prototype.moveTo = function(x2, y2) { + this.commands.push({ + type: "M", + x: x2, + y: y2 + }); +}; +Path2.prototype.lineTo = function(x2, y2) { + this.commands.push({ + type: "L", + x: x2, + y: y2 + }); +}; +Path2.prototype.curveTo = Path2.prototype.bezierCurveTo = function(x1, y1, x2, y2, x3, y3) { + this.commands.push({ + type: "C", + x1, + y1, + x2, + y2, + x: x3, + y: y3 + }); +}; +Path2.prototype.quadTo = Path2.prototype.quadraticCurveTo = function(x1, y1, x2, y2) { + this.commands.push({ + type: "Q", + x1, + y1, + x: x2, + y: y2 + }); +}; +Path2.prototype.close = Path2.prototype.closePath = function() { + this.commands.push({ + type: "Z" + }); +}; +Path2.prototype.extend = function(pathOrCommands) { + if (pathOrCommands.commands) { + pathOrCommands = pathOrCommands.commands; + } else if (pathOrCommands instanceof BoundingBox) { + var box = pathOrCommands; + this.moveTo(box.x1, box.y1); + this.lineTo(box.x2, box.y1); + this.lineTo(box.x2, box.y2); + this.lineTo(box.x1, box.y2); + this.close(); + return; + } + Array.prototype.push.apply(this.commands, pathOrCommands); +}; +Path2.prototype.getBoundingBox = function() { + var box = new BoundingBox(); + var startX = 0; + var startY = 0; + var prevX = 0; + var prevY = 0; + for (var i = 0; i < this.commands.length; i++) { + var cmd = this.commands[i]; + switch (cmd.type) { + case "M": + box.addPoint(cmd.x, cmd.y); + startX = prevX = cmd.x; + startY = prevY = cmd.y; + break; + case "L": + box.addPoint(cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "Q": + box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "C": + box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + prevX = cmd.x; + prevY = cmd.y; + break; + case "Z": + prevX = startX; + prevY = startY; + break; + default: + throw new Error("Unexpected path command " + cmd.type); + } + } + if (box.isEmpty()) { + box.addPoint(0, 0); + } + return box; +}; +Path2.prototype.draw = function(ctx) { + ctx.beginPath(); + for (var i = 0; i < this.commands.length; i += 1) { + var cmd = this.commands[i]; + if (cmd.type === "M") { + ctx.moveTo(cmd.x, cmd.y); + } else if (cmd.type === "L") { + ctx.lineTo(cmd.x, cmd.y); + } else if (cmd.type === "C") { + ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + } else if (cmd.type === "Q") { + ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y); + } else if (cmd.type === "Z") { + ctx.closePath(); + } + } + if (this.fill) { + ctx.fillStyle = this.fill; + ctx.fill(); + } + if (this.stroke) { + ctx.strokeStyle = this.stroke; + ctx.lineWidth = this.strokeWidth; + ctx.stroke(); + } +}; +Path2.prototype.toPathData = function(decimalPlaces) { + decimalPlaces = decimalPlaces !== void 0 ? decimalPlaces : 2; + function floatToString(v) { + if (Math.round(v) === v) { + return "" + Math.round(v); + } else { + return v.toFixed(decimalPlaces); + } + } + function packValues() { + var arguments$1 = arguments; + var s = ""; + for (var i2 = 0; i2 < arguments.length; i2 += 1) { + var v = arguments$1[i2]; + if (v >= 0 && i2 > 0) { + s += " "; + } + s += floatToString(v); + } + return s; + } + var d = ""; + for (var i = 0; i < this.commands.length; i += 1) { + var cmd = this.commands[i]; + if (cmd.type === "M") { + d += "M" + packValues(cmd.x, cmd.y); + } else if (cmd.type === "L") { + d += "L" + packValues(cmd.x, cmd.y); + } else if (cmd.type === "C") { + d += "C" + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); + } else if (cmd.type === "Q") { + d += "Q" + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y); + } else if (cmd.type === "Z") { + d += "Z"; + } + } + return d; +}; +Path2.prototype.toSVG = function(decimalPlaces) { + var svg = '= 0 && v <= 255, "Byte value should be between 0 and 255."); + return [v]; +}; +sizeOf.BYTE = constant(1); +encode.CHAR = function(v) { + return [v.charCodeAt(0)]; +}; +sizeOf.CHAR = constant(1); +encode.CHARARRAY = function(v) { + if (typeof v === "undefined") { + v = ""; + console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."); + } + var b3 = []; + for (var i = 0; i < v.length; i += 1) { + b3[i] = v.charCodeAt(i); + } + return b3; +}; +sizeOf.CHARARRAY = function(v) { + if (typeof v === "undefined") { + return 0; + } + return v.length; +}; +encode.USHORT = function(v) { + return [v >> 8 & 255, v & 255]; +}; +sizeOf.USHORT = constant(2); +encode.SHORT = function(v) { + if (v >= LIMIT16) { + v = -(2 * LIMIT16 - v); + } + return [v >> 8 & 255, v & 255]; +}; +sizeOf.SHORT = constant(2); +encode.UINT24 = function(v) { + return [v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.UINT24 = constant(3); +encode.ULONG = function(v) { + return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.ULONG = constant(4); +encode.LONG = function(v) { + if (v >= LIMIT32) { + v = -(2 * LIMIT32 - v); + } + return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.LONG = constant(4); +encode.FIXED = encode.ULONG; +sizeOf.FIXED = sizeOf.ULONG; +encode.FWORD = encode.SHORT; +sizeOf.FWORD = sizeOf.SHORT; +encode.UFWORD = encode.USHORT; +sizeOf.UFWORD = sizeOf.USHORT; +encode.LONGDATETIME = function(v) { + return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.LONGDATETIME = constant(8); +encode.TAG = function(v) { + check.argument(v.length === 4, "Tag should be exactly 4 ASCII characters."); + return [ + v.charCodeAt(0), + v.charCodeAt(1), + v.charCodeAt(2), + v.charCodeAt(3) + ]; +}; +sizeOf.TAG = constant(4); +encode.Card8 = encode.BYTE; +sizeOf.Card8 = sizeOf.BYTE; +encode.Card16 = encode.USHORT; +sizeOf.Card16 = sizeOf.USHORT; +encode.OffSize = encode.BYTE; +sizeOf.OffSize = sizeOf.BYTE; +encode.SID = encode.USHORT; +sizeOf.SID = sizeOf.USHORT; +encode.NUMBER = function(v) { + if (v >= -107 && v <= 107) { + return [v + 139]; + } else if (v >= 108 && v <= 1131) { + v = v - 108; + return [(v >> 8) + 247, v & 255]; + } else if (v >= -1131 && v <= -108) { + v = -v - 108; + return [(v >> 8) + 251, v & 255]; + } else if (v >= -32768 && v <= 32767) { + return encode.NUMBER16(v); + } else { + return encode.NUMBER32(v); + } +}; +sizeOf.NUMBER = function(v) { + return encode.NUMBER(v).length; +}; +encode.NUMBER16 = function(v) { + return [28, v >> 8 & 255, v & 255]; +}; +sizeOf.NUMBER16 = constant(3); +encode.NUMBER32 = function(v) { + return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255]; +}; +sizeOf.NUMBER32 = constant(5); +encode.REAL = function(v) { + var value2 = v.toString(); + var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value2); + if (m) { + var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); + value2 = (Math.round(v * epsilon) / epsilon).toString(); + } + var nibbles = ""; + for (var i = 0, ii = value2.length; i < ii; i += 1) { + var c2 = value2[i]; + if (c2 === "e") { + nibbles += value2[++i] === "-" ? "c" : "b"; + } else if (c2 === ".") { + nibbles += "a"; + } else if (c2 === "-") { + nibbles += "e"; + } else { + nibbles += c2; + } + } + nibbles += nibbles.length & 1 ? "f" : "ff"; + var out = [30]; + for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) { + out.push(parseInt(nibbles.substr(i$1, 2), 16)); + } + return out; +}; +sizeOf.REAL = function(v) { + return encode.REAL(v).length; +}; +encode.NAME = encode.CHARARRAY; +sizeOf.NAME = sizeOf.CHARARRAY; +encode.STRING = encode.CHARARRAY; +sizeOf.STRING = sizeOf.CHARARRAY; +decode.UTF8 = function(data2, offset, numBytes) { + var codePoints = []; + var numChars = numBytes; + for (var j = 0; j < numChars; j++, offset += 1) { + codePoints[j] = data2.getUint8(offset); + } + return String.fromCharCode.apply(null, codePoints); +}; +decode.UTF16 = function(data2, offset, numBytes) { + var codePoints = []; + var numChars = numBytes / 2; + for (var j = 0; j < numChars; j++, offset += 2) { + codePoints[j] = data2.getUint16(offset); + } + return String.fromCharCode.apply(null, codePoints); +}; +encode.UTF16 = function(v) { + var b3 = []; + for (var i = 0; i < v.length; i += 1) { + var codepoint = v.charCodeAt(i); + b3[b3.length] = codepoint >> 8 & 255; + b3[b3.length] = codepoint & 255; + } + return b3; +}; +sizeOf.UTF16 = function(v) { + return v.length * 2; +}; +var eightBitMacEncodings = { + "x-mac-croatian": ( + // Python: 'mac_croatian' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" + ), + "x-mac-cyrillic": ( + // Python: 'mac_cyrillic' + "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю" + ), + "x-mac-gaelic": ( + // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ" + ), + "x-mac-greek": ( + // Python: 'mac_greek' + "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­" + ), + "x-mac-icelandic": ( + // Python: 'mac_iceland' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-inuit": ( + // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT + "ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł" + ), + "x-mac-ce": ( + // Python: 'mac_latin2' + "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" + ), + macintosh: ( + // Python: 'mac_roman' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-romanian": ( + // Python: 'mac_romanian' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" + ), + "x-mac-turkish": ( + // Python: 'mac_turkish' + "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ" + ) +}; +decode.MACSTRING = function(dataView, offset, dataLength, encoding) { + var table2 = eightBitMacEncodings[encoding]; + if (table2 === void 0) { + return void 0; + } + var result = ""; + for (var i = 0; i < dataLength; i++) { + var c2 = dataView.getUint8(offset + i); + if (c2 <= 127) { + result += String.fromCharCode(c2); + } else { + result += table2[c2 & 127]; + } + } + return result; +}; +var macEncodingTableCache = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); +var macEncodingCacheKeys; +var getMacEncodingTable = function(encoding) { + if (!macEncodingCacheKeys) { + macEncodingCacheKeys = {}; + for (var e in eightBitMacEncodings) { + macEncodingCacheKeys[e] = new String(e); + } + } + var cacheKey = macEncodingCacheKeys[encoding]; + if (cacheKey === void 0) { + return void 0; + } + if (macEncodingTableCache) { + var cachedTable = macEncodingTableCache.get(cacheKey); + if (cachedTable !== void 0) { + return cachedTable; + } + } + var decodingTable = eightBitMacEncodings[encoding]; + if (decodingTable === void 0) { + return void 0; + } + var encodingTable = {}; + for (var i = 0; i < decodingTable.length; i++) { + encodingTable[decodingTable.charCodeAt(i)] = i + 128; + } + if (macEncodingTableCache) { + macEncodingTableCache.set(cacheKey, encodingTable); + } + return encodingTable; +}; +encode.MACSTRING = function(str, encoding) { + var table2 = getMacEncodingTable(encoding); + if (table2 === void 0) { + return void 0; + } + var result = []; + for (var i = 0; i < str.length; i++) { + var c2 = str.charCodeAt(i); + if (c2 >= 128) { + c2 = table2[c2]; + if (c2 === void 0) { + return void 0; + } + } + result[i] = c2; + } + return result; +}; +sizeOf.MACSTRING = function(str, encoding) { + var b3 = encode.MACSTRING(str, encoding); + if (b3 !== void 0) { + return b3.length; + } else { + return 0; + } +}; +function isByteEncodable(value2) { + return value2 >= -128 && value2 <= 127; +} +function encodeVarDeltaRunAsZeroes(deltas, pos, result) { + var runLength = 0; + var numDeltas = deltas.length; + while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) { + ++pos; + ++runLength; + } + result.push(128 | runLength - 1); + return pos; +} +function encodeVarDeltaRunAsBytes(deltas, offset, result) { + var runLength = 0; + var numDeltas = deltas.length; + var pos = offset; + while (pos < numDeltas && runLength < 64) { + var value2 = deltas[pos]; + if (!isByteEncodable(value2)) { + break; + } + if (value2 === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) { + break; + } + ++pos; + ++runLength; + } + result.push(runLength - 1); + for (var i = offset; i < pos; ++i) { + result.push(deltas[i] + 256 & 255); + } + return pos; +} +function encodeVarDeltaRunAsWords(deltas, offset, result) { + var runLength = 0; + var numDeltas = deltas.length; + var pos = offset; + while (pos < numDeltas && runLength < 64) { + var value2 = deltas[pos]; + if (value2 === 0) { + break; + } + if (isByteEncodable(value2) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) { + break; + } + ++pos; + ++runLength; + } + result.push(64 | runLength - 1); + for (var i = offset; i < pos; ++i) { + var val2 = deltas[i]; + result.push(val2 + 65536 >> 8 & 255, val2 + 256 & 255); + } + return pos; +} +encode.VARDELTAS = function(deltas) { + var pos = 0; + var result = []; + while (pos < deltas.length) { + var value2 = deltas[pos]; + if (value2 === 0) { + pos = encodeVarDeltaRunAsZeroes(deltas, pos, result); + } else if (value2 >= -128 && value2 <= 127) { + pos = encodeVarDeltaRunAsBytes(deltas, pos, result); + } else { + pos = encodeVarDeltaRunAsWords(deltas, pos, result); + } + } + return result; +}; +encode.INDEX = function(l2) { + var offset = 1; + var offsets = [offset]; + var data2 = []; + for (var i = 0; i < l2.length; i += 1) { + var v = encode.OBJECT(l2[i]); + Array.prototype.push.apply(data2, v); + offset += v.length; + offsets.push(offset); + } + if (data2.length === 0) { + return [0, 0]; + } + var encodedOffsets = []; + var offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0; + var offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize]; + for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) { + var encodedOffset = offsetEncoder(offsets[i$1]); + Array.prototype.push.apply(encodedOffsets, encodedOffset); + } + return Array.prototype.concat( + encode.Card16(l2.length), + encode.OffSize(offSize), + encodedOffsets, + data2 + ); +}; +sizeOf.INDEX = function(v) { + return encode.INDEX(v).length; +}; +encode.DICT = function(m) { + var d = []; + var keys2 = Object.keys(m); + var length2 = keys2.length; + for (var i = 0; i < length2; i += 1) { + var k2 = parseInt(keys2[i], 0); + var v = m[k2]; + d = d.concat(encode.OPERAND(v.value, v.type)); + d = d.concat(encode.OPERATOR(k2)); + } + return d; +}; +sizeOf.DICT = function(m) { + return encode.DICT(m).length; +}; +encode.OPERATOR = function(v) { + if (v < 1200) { + return [v]; + } else { + return [12, v - 1200]; + } +}; +encode.OPERAND = function(v, type) { + var d = []; + if (Array.isArray(type)) { + for (var i = 0; i < type.length; i += 1) { + check.argument(v.length === type.length, "Not enough arguments given for type" + type); + d = d.concat(encode.OPERAND(v[i], type[i])); + } + } else { + if (type === "SID") { + d = d.concat(encode.NUMBER(v)); + } else if (type === "offset") { + d = d.concat(encode.NUMBER32(v)); + } else if (type === "number") { + d = d.concat(encode.NUMBER(v)); + } else if (type === "real") { + d = d.concat(encode.REAL(v)); + } else { + throw new Error("Unknown operand type " + type); + } + } + return d; +}; +encode.OP = encode.BYTE; +sizeOf.OP = sizeOf.BYTE; +var wmm = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); +encode.CHARSTRING = function(ops) { + if (wmm) { + var cachedValue = wmm.get(ops); + if (cachedValue !== void 0) { + return cachedValue; + } + } + var d = []; + var length2 = ops.length; + for (var i = 0; i < length2; i += 1) { + var op = ops[i]; + d = d.concat(encode[op.type](op.value)); + } + if (wmm) { + wmm.set(ops, d); + } + return d; +}; +sizeOf.CHARSTRING = function(ops) { + return encode.CHARSTRING(ops).length; +}; +encode.OBJECT = function(v) { + var encodingFunction = encode[v.type]; + check.argument(encodingFunction !== void 0, "No encoding function for type " + v.type); + return encodingFunction(v.value); +}; +sizeOf.OBJECT = function(v) { + var sizeOfFunction = sizeOf[v.type]; + check.argument(sizeOfFunction !== void 0, "No sizeOf function for type " + v.type); + return sizeOfFunction(v.value); +}; +encode.TABLE = function(table2) { + var d = []; + var length2 = table2.fields.length; + var subtables = []; + var subtableOffsets = []; + for (var i = 0; i < length2; i += 1) { + var field = table2.fields[i]; + var encodingFunction = encode[field.type]; + check.argument(encodingFunction !== void 0, "No encoding function for field type " + field.type + " (" + field.name + ")"); + var value2 = table2[field.name]; + if (value2 === void 0) { + value2 = field.value; + } + var bytes = encodingFunction(value2); + if (field.type === "TABLE") { + subtableOffsets.push(d.length); + d = d.concat([0, 0]); + subtables.push(bytes); + } else { + d = d.concat(bytes); + } + } + for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) { + var o = subtableOffsets[i$1]; + var offset = d.length; + check.argument(offset < 65536, "Table " + table2.tableName + " too big."); + d[o] = offset >> 8; + d[o + 1] = offset & 255; + d = d.concat(subtables[i$1]); + } + return d; +}; +sizeOf.TABLE = function(table2) { + var numBytes = 0; + var length2 = table2.fields.length; + for (var i = 0; i < length2; i += 1) { + var field = table2.fields[i]; + var sizeOfFunction = sizeOf[field.type]; + check.argument(sizeOfFunction !== void 0, "No sizeOf function for field type " + field.type + " (" + field.name + ")"); + var value2 = table2[field.name]; + if (value2 === void 0) { + value2 = field.value; + } + numBytes += sizeOfFunction(value2); + if (field.type === "TABLE") { + numBytes += 2; + } + } + return numBytes; +}; +encode.RECORD = encode.TABLE; +sizeOf.RECORD = sizeOf.TABLE; +encode.LITERAL = function(v) { + return v; +}; +sizeOf.LITERAL = function(v) { + return v.length; +}; +function Table(tableName, fields, options) { + if (fields.length && (fields[0].name !== "coverageFormat" || fields[0].value === 1)) { + for (var i = 0; i < fields.length; i += 1) { + var field = fields[i]; + this[field.name] = field.value; + } + } + this.tableName = tableName; + this.fields = fields; + if (options) { + var optionKeys = Object.keys(options); + for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) { + var k2 = optionKeys[i$1]; + var v = options[k2]; + if (this[k2] !== void 0) { + this[k2] = v; + } + } + } +} +Table.prototype.encode = function() { + return encode.TABLE(this); +}; +Table.prototype.sizeOf = function() { + return sizeOf.TABLE(this); +}; +function ushortList(itemName, list, count) { + if (count === void 0) { + count = list.length; + } + var fields = new Array(list.length + 1); + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < list.length; i++) { + fields[i + 1] = { name: itemName + i, type: "USHORT", value: list[i] }; + } + return fields; +} +function tableList(itemName, records, itemCallback) { + var count = records.length; + var fields = new Array(count + 1); + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < count; i++) { + fields[i + 1] = { name: itemName + i, type: "TABLE", value: itemCallback(records[i], i) }; + } + return fields; +} +function recordList(itemName, records, itemCallback) { + var count = records.length; + var fields = []; + fields[0] = { name: itemName + "Count", type: "USHORT", value: count }; + for (var i = 0; i < count; i++) { + fields = fields.concat(itemCallback(records[i], i)); + } + return fields; +} +function Coverage(coverageTable) { + if (coverageTable.format === 1) { + Table.call( + this, + "coverageTable", + [{ name: "coverageFormat", type: "USHORT", value: 1 }].concat(ushortList("glyph", coverageTable.glyphs)) + ); + } else if (coverageTable.format === 2) { + Table.call( + this, + "coverageTable", + [{ name: "coverageFormat", type: "USHORT", value: 2 }].concat(recordList("rangeRecord", coverageTable.ranges, function(RangeRecord) { + return [ + { name: "startGlyphID", type: "USHORT", value: RangeRecord.start }, + { name: "endGlyphID", type: "USHORT", value: RangeRecord.end }, + { name: "startCoverageIndex", type: "USHORT", value: RangeRecord.index } + ]; + })) + ); + } else { + check.assert(false, "Coverage format must be 1 or 2."); + } +} +Coverage.prototype = Object.create(Table.prototype); +Coverage.prototype.constructor = Coverage; +function ScriptList(scriptListTable) { + Table.call( + this, + "scriptListTable", + recordList("scriptRecord", scriptListTable, function(scriptRecord, i) { + var script = scriptRecord.script; + var defaultLangSys = script.defaultLangSys; + check.assert(!!defaultLangSys, "Unable to write GSUB: script " + scriptRecord.tag + " has no default language system."); + return [ + { name: "scriptTag" + i, type: "TAG", value: scriptRecord.tag }, + { name: "script" + i, type: "TABLE", value: new Table("scriptTable", [ + { name: "defaultLangSys", type: "TABLE", value: new Table("defaultLangSys", [ + { name: "lookupOrder", type: "USHORT", value: 0 }, + { name: "reqFeatureIndex", type: "USHORT", value: defaultLangSys.reqFeatureIndex } + ].concat(ushortList("featureIndex", defaultLangSys.featureIndexes))) } + ].concat(recordList("langSys", script.langSysRecords, function(langSysRecord, i2) { + var langSys = langSysRecord.langSys; + return [ + { name: "langSysTag" + i2, type: "TAG", value: langSysRecord.tag }, + { name: "langSys" + i2, type: "TABLE", value: new Table("langSys", [ + { name: "lookupOrder", type: "USHORT", value: 0 }, + { name: "reqFeatureIndex", type: "USHORT", value: langSys.reqFeatureIndex } + ].concat(ushortList("featureIndex", langSys.featureIndexes))) } + ]; + }))) } + ]; + }) + ); +} +ScriptList.prototype = Object.create(Table.prototype); +ScriptList.prototype.constructor = ScriptList; +function FeatureList(featureListTable) { + Table.call( + this, + "featureListTable", + recordList("featureRecord", featureListTable, function(featureRecord, i) { + var feature = featureRecord.feature; + return [ + { name: "featureTag" + i, type: "TAG", value: featureRecord.tag }, + { name: "feature" + i, type: "TABLE", value: new Table("featureTable", [ + { name: "featureParams", type: "USHORT", value: feature.featureParams } + ].concat(ushortList("lookupListIndex", feature.lookupListIndexes))) } + ]; + }) + ); +} +FeatureList.prototype = Object.create(Table.prototype); +FeatureList.prototype.constructor = FeatureList; +function LookupList(lookupListTable, subtableMakers2) { + Table.call(this, "lookupListTable", tableList("lookup", lookupListTable, function(lookupTable) { + var subtableCallback = subtableMakers2[lookupTable.lookupType]; + check.assert(!!subtableCallback, "Unable to write GSUB lookup type " + lookupTable.lookupType + " tables."); + return new Table("lookupTable", [ + { name: "lookupType", type: "USHORT", value: lookupTable.lookupType }, + { name: "lookupFlag", type: "USHORT", value: lookupTable.lookupFlag } + ].concat(tableList("subtable", lookupTable.subtables, subtableCallback))); + })); +} +LookupList.prototype = Object.create(Table.prototype); +LookupList.prototype.constructor = LookupList; +var table = { + Table, + Record: Table, + Coverage, + ScriptList, + FeatureList, + LookupList, + ushortList, + tableList, + recordList +}; +function getByte(dataView, offset) { + return dataView.getUint8(offset); +} +function getUShort(dataView, offset) { + return dataView.getUint16(offset, false); +} +function getShort(dataView, offset) { + return dataView.getInt16(offset, false); +} +function getULong(dataView, offset) { + return dataView.getUint32(offset, false); +} +function getFixed(dataView, offset) { + var decimal = dataView.getInt16(offset, false); + var fraction = dataView.getUint16(offset + 2, false); + return decimal + fraction / 65535; +} +function getTag(dataView, offset) { + var tag = ""; + for (var i = offset; i < offset + 4; i += 1) { + tag += String.fromCharCode(dataView.getInt8(i)); + } + return tag; +} +function getOffset(dataView, offset, offSize) { + var v = 0; + for (var i = 0; i < offSize; i += 1) { + v <<= 8; + v += dataView.getUint8(offset + i); + } + return v; +} +function getBytes(dataView, startOffset, endOffset) { + var bytes = []; + for (var i = startOffset; i < endOffset; i += 1) { + bytes.push(dataView.getUint8(i)); + } + return bytes; +} +function bytesToString(bytes) { + var s = ""; + for (var i = 0; i < bytes.length; i += 1) { + s += String.fromCharCode(bytes[i]); + } + return s; +} +var typeOffsets = { + byte: 1, + uShort: 2, + short: 2, + uLong: 4, + fixed: 4, + longDateTime: 8, + tag: 4 +}; +function Parser2(data2, offset) { + this.data = data2; + this.offset = offset; + this.relativeOffset = 0; +} +Parser2.prototype.parseByte = function() { + var v = this.data.getUint8(this.offset + this.relativeOffset); + this.relativeOffset += 1; + return v; +}; +Parser2.prototype.parseChar = function() { + var v = this.data.getInt8(this.offset + this.relativeOffset); + this.relativeOffset += 1; + return v; +}; +Parser2.prototype.parseCard8 = Parser2.prototype.parseByte; +Parser2.prototype.parseUShort = function() { + var v = this.data.getUint16(this.offset + this.relativeOffset); + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseCard16 = Parser2.prototype.parseUShort; +Parser2.prototype.parseSID = Parser2.prototype.parseUShort; +Parser2.prototype.parseOffset16 = Parser2.prototype.parseUShort; +Parser2.prototype.parseShort = function() { + var v = this.data.getInt16(this.offset + this.relativeOffset); + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseF2Dot14 = function() { + var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384; + this.relativeOffset += 2; + return v; +}; +Parser2.prototype.parseULong = function() { + var v = getULong(this.data, this.offset + this.relativeOffset); + this.relativeOffset += 4; + return v; +}; +Parser2.prototype.parseOffset32 = Parser2.prototype.parseULong; +Parser2.prototype.parseFixed = function() { + var v = getFixed(this.data, this.offset + this.relativeOffset); + this.relativeOffset += 4; + return v; +}; +Parser2.prototype.parseString = function(length2) { + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + var string = ""; + this.relativeOffset += length2; + for (var i = 0; i < length2; i++) { + string += String.fromCharCode(dataView.getUint8(offset + i)); + } + return string; +}; +Parser2.prototype.parseTag = function() { + return this.parseString(4); +}; +Parser2.prototype.parseLongDateTime = function() { + var v = getULong(this.data, this.offset + this.relativeOffset + 4); + v -= 2082844800; + this.relativeOffset += 8; + return v; +}; +Parser2.prototype.parseVersion = function(minorBase) { + var major = getUShort(this.data, this.offset + this.relativeOffset); + var minor = getUShort(this.data, this.offset + this.relativeOffset + 2); + this.relativeOffset += 4; + if (minorBase === void 0) { + minorBase = 4096; + } + return major + minor / minorBase / 10; +}; +Parser2.prototype.skip = function(type, amount) { + if (amount === void 0) { + amount = 1; + } + this.relativeOffset += typeOffsets[type] * amount; +}; +Parser2.prototype.parseULongList = function(count) { + if (count === void 0) { + count = this.parseULong(); + } + var offsets = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + offsets[i] = dataView.getUint32(offset); + offset += 4; + } + this.relativeOffset += count * 4; + return offsets; +}; +Parser2.prototype.parseOffset16List = Parser2.prototype.parseUShortList = function(count) { + if (count === void 0) { + count = this.parseUShort(); + } + var offsets = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + offsets[i] = dataView.getUint16(offset); + offset += 2; + } + this.relativeOffset += count * 2; + return offsets; +}; +Parser2.prototype.parseShortList = function(count) { + var list = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + list[i] = dataView.getInt16(offset); + offset += 2; + } + this.relativeOffset += count * 2; + return list; +}; +Parser2.prototype.parseByteList = function(count) { + var list = new Array(count); + var dataView = this.data; + var offset = this.offset + this.relativeOffset; + for (var i = 0; i < count; i++) { + list[i] = dataView.getUint8(offset++); + } + this.relativeOffset += count; + return list; +}; +Parser2.prototype.parseList = function(count, itemCallback) { + if (!itemCallback) { + itemCallback = count; + count = this.parseUShort(); + } + var list = new Array(count); + for (var i = 0; i < count; i++) { + list[i] = itemCallback.call(this); + } + return list; +}; +Parser2.prototype.parseList32 = function(count, itemCallback) { + if (!itemCallback) { + itemCallback = count; + count = this.parseULong(); + } + var list = new Array(count); + for (var i = 0; i < count; i++) { + list[i] = itemCallback.call(this); + } + return list; +}; +Parser2.prototype.parseRecordList = function(count, recordDescription) { + if (!recordDescription) { + recordDescription = count; + count = this.parseUShort(); + } + var records = new Array(count); + var fields = Object.keys(recordDescription); + for (var i = 0; i < count; i++) { + var rec = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = recordDescription[fieldName]; + rec[fieldName] = fieldType.call(this); + } + records[i] = rec; + } + return records; +}; +Parser2.prototype.parseRecordList32 = function(count, recordDescription) { + if (!recordDescription) { + recordDescription = count; + count = this.parseULong(); + } + var records = new Array(count); + var fields = Object.keys(recordDescription); + for (var i = 0; i < count; i++) { + var rec = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = recordDescription[fieldName]; + rec[fieldName] = fieldType.call(this); + } + records[i] = rec; + } + return records; +}; +Parser2.prototype.parseStruct = function(description) { + if (typeof description === "function") { + return description.call(this); + } else { + var fields = Object.keys(description); + var struct = {}; + for (var j = 0; j < fields.length; j++) { + var fieldName = fields[j]; + var fieldType = description[fieldName]; + struct[fieldName] = fieldType.call(this); + } + return struct; + } +}; +Parser2.prototype.parseValueRecord = function(valueFormat) { + if (valueFormat === void 0) { + valueFormat = this.parseUShort(); + } + if (valueFormat === 0) { + return; + } + var valueRecord = {}; + if (valueFormat & 1) { + valueRecord.xPlacement = this.parseShort(); + } + if (valueFormat & 2) { + valueRecord.yPlacement = this.parseShort(); + } + if (valueFormat & 4) { + valueRecord.xAdvance = this.parseShort(); + } + if (valueFormat & 8) { + valueRecord.yAdvance = this.parseShort(); + } + if (valueFormat & 16) { + valueRecord.xPlaDevice = void 0; + this.parseShort(); + } + if (valueFormat & 32) { + valueRecord.yPlaDevice = void 0; + this.parseShort(); + } + if (valueFormat & 64) { + valueRecord.xAdvDevice = void 0; + this.parseShort(); + } + if (valueFormat & 128) { + valueRecord.yAdvDevice = void 0; + this.parseShort(); + } + return valueRecord; +}; +Parser2.prototype.parseValueRecordList = function() { + var valueFormat = this.parseUShort(); + var valueCount = this.parseUShort(); + var values2 = new Array(valueCount); + for (var i = 0; i < valueCount; i++) { + values2[i] = this.parseValueRecord(valueFormat); + } + return values2; +}; +Parser2.prototype.parsePointer = function(description) { + var structOffset = this.parseOffset16(); + if (structOffset > 0) { + return new Parser2(this.data, this.offset + structOffset).parseStruct(description); + } + return void 0; +}; +Parser2.prototype.parsePointer32 = function(description) { + var structOffset = this.parseOffset32(); + if (structOffset > 0) { + return new Parser2(this.data, this.offset + structOffset).parseStruct(description); + } + return void 0; +}; +Parser2.prototype.parseListOfLists = function(itemCallback) { + var offsets = this.parseOffset16List(); + var count = offsets.length; + var relativeOffset = this.relativeOffset; + var list = new Array(count); + for (var i = 0; i < count; i++) { + var start = offsets[i]; + if (start === 0) { + list[i] = void 0; + continue; + } + this.relativeOffset = start; + if (itemCallback) { + var subOffsets = this.parseOffset16List(); + var subList = new Array(subOffsets.length); + for (var j = 0; j < subOffsets.length; j++) { + this.relativeOffset = start + subOffsets[j]; + subList[j] = itemCallback.call(this); + } + list[i] = subList; + } else { + list[i] = this.parseUShortList(); + } + } + this.relativeOffset = relativeOffset; + return list; +}; +Parser2.prototype.parseCoverage = function() { + var startOffset = this.offset + this.relativeOffset; + var format = this.parseUShort(); + var count = this.parseUShort(); + if (format === 1) { + return { + format: 1, + glyphs: this.parseUShortList(count) + }; + } else if (format === 2) { + var ranges = new Array(count); + for (var i = 0; i < count; i++) { + ranges[i] = { + start: this.parseUShort(), + end: this.parseUShort(), + index: this.parseUShort() + }; + } + return { + format: 2, + ranges + }; + } + throw new Error("0x" + startOffset.toString(16) + ": Coverage format must be 1 or 2."); +}; +Parser2.prototype.parseClassDef = function() { + var startOffset = this.offset + this.relativeOffset; + var format = this.parseUShort(); + if (format === 1) { + return { + format: 1, + startGlyph: this.parseUShort(), + classes: this.parseUShortList() + }; + } else if (format === 2) { + return { + format: 2, + ranges: this.parseRecordList({ + start: Parser2.uShort, + end: Parser2.uShort, + classId: Parser2.uShort + }) + }; + } + throw new Error("0x" + startOffset.toString(16) + ": ClassDef format must be 1 or 2."); +}; +Parser2.list = function(count, itemCallback) { + return function() { + return this.parseList(count, itemCallback); + }; +}; +Parser2.list32 = function(count, itemCallback) { + return function() { + return this.parseList32(count, itemCallback); + }; +}; +Parser2.recordList = function(count, recordDescription) { + return function() { + return this.parseRecordList(count, recordDescription); + }; +}; +Parser2.recordList32 = function(count, recordDescription) { + return function() { + return this.parseRecordList32(count, recordDescription); + }; +}; +Parser2.pointer = function(description) { + return function() { + return this.parsePointer(description); + }; +}; +Parser2.pointer32 = function(description) { + return function() { + return this.parsePointer32(description); + }; +}; +Parser2.tag = Parser2.prototype.parseTag; +Parser2.byte = Parser2.prototype.parseByte; +Parser2.uShort = Parser2.offset16 = Parser2.prototype.parseUShort; +Parser2.uShortList = Parser2.prototype.parseUShortList; +Parser2.uLong = Parser2.offset32 = Parser2.prototype.parseULong; +Parser2.uLongList = Parser2.prototype.parseULongList; +Parser2.struct = Parser2.prototype.parseStruct; +Parser2.coverage = Parser2.prototype.parseCoverage; +Parser2.classDef = Parser2.prototype.parseClassDef; +var langSysTable = { + reserved: Parser2.uShort, + reqFeatureIndex: Parser2.uShort, + featureIndexes: Parser2.uShortList +}; +Parser2.prototype.parseScriptList = function() { + return this.parsePointer(Parser2.recordList({ + tag: Parser2.tag, + script: Parser2.pointer({ + defaultLangSys: Parser2.pointer(langSysTable), + langSysRecords: Parser2.recordList({ + tag: Parser2.tag, + langSys: Parser2.pointer(langSysTable) + }) + }) + })) || []; +}; +Parser2.prototype.parseFeatureList = function() { + return this.parsePointer(Parser2.recordList({ + tag: Parser2.tag, + feature: Parser2.pointer({ + featureParams: Parser2.offset16, + lookupListIndexes: Parser2.uShortList + }) + })) || []; +}; +Parser2.prototype.parseLookupList = function(lookupTableParsers) { + return this.parsePointer(Parser2.list(Parser2.pointer(function() { + var lookupType = this.parseUShort(); + check.argument(1 <= lookupType && lookupType <= 9, "GPOS/GSUB lookup type " + lookupType + " unknown."); + var lookupFlag = this.parseUShort(); + var useMarkFilteringSet = lookupFlag & 16; + return { + lookupType, + lookupFlag, + subtables: this.parseList(Parser2.pointer(lookupTableParsers[lookupType])), + markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0 + }; + }))) || []; +}; +Parser2.prototype.parseFeatureVariationsList = function() { + return this.parsePointer32(function() { + var majorVersion = this.parseUShort(); + var minorVersion = this.parseUShort(); + check.argument(majorVersion === 1 && minorVersion < 1, "GPOS/GSUB feature variations table unknown."); + var featureVariations = this.parseRecordList32({ + conditionSetOffset: Parser2.offset32, + featureTableSubstitutionOffset: Parser2.offset32 + }); + return featureVariations; + }) || []; +}; +var parse = { + getByte, + getCard8: getByte, + getUShort, + getCard16: getUShort, + getShort, + getULong, + getFixed, + getTag, + getOffset, + getBytes, + bytesToString, + Parser: Parser2 +}; +function parseCmapTableFormat12(cmap2, p2) { + p2.parseUShort(); + cmap2.length = p2.parseULong(); + cmap2.language = p2.parseULong(); + var groupCount; + cmap2.groupCount = groupCount = p2.parseULong(); + cmap2.glyphIndexMap = {}; + for (var i = 0; i < groupCount; i += 1) { + var startCharCode = p2.parseULong(); + var endCharCode = p2.parseULong(); + var startGlyphId = p2.parseULong(); + for (var c2 = startCharCode; c2 <= endCharCode; c2 += 1) { + cmap2.glyphIndexMap[c2] = startGlyphId; + startGlyphId++; + } + } +} +function parseCmapTableFormat4(cmap2, p2, data2, start, offset) { + cmap2.length = p2.parseUShort(); + cmap2.language = p2.parseUShort(); + var segCount; + cmap2.segCount = segCount = p2.parseUShort() >> 1; + p2.skip("uShort", 3); + cmap2.glyphIndexMap = {}; + var endCountParser = new parse.Parser(data2, start + offset + 14); + var startCountParser = new parse.Parser(data2, start + offset + 16 + segCount * 2); + var idDeltaParser = new parse.Parser(data2, start + offset + 16 + segCount * 4); + var idRangeOffsetParser = new parse.Parser(data2, start + offset + 16 + segCount * 6); + var glyphIndexOffset = start + offset + 16 + segCount * 8; + for (var i = 0; i < segCount - 1; i += 1) { + var glyphIndex = void 0; + var endCount = endCountParser.parseUShort(); + var startCount = startCountParser.parseUShort(); + var idDelta = idDeltaParser.parseShort(); + var idRangeOffset = idRangeOffsetParser.parseUShort(); + for (var c2 = startCount; c2 <= endCount; c2 += 1) { + if (idRangeOffset !== 0) { + glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2; + glyphIndexOffset += idRangeOffset; + glyphIndexOffset += (c2 - startCount) * 2; + glyphIndex = parse.getUShort(data2, glyphIndexOffset); + if (glyphIndex !== 0) { + glyphIndex = glyphIndex + idDelta & 65535; + } + } else { + glyphIndex = c2 + idDelta & 65535; + } + cmap2.glyphIndexMap[c2] = glyphIndex; + } + } +} +function parseCmapTable(data2, start) { + var cmap2 = {}; + cmap2.version = parse.getUShort(data2, start); + check.argument(cmap2.version === 0, "cmap table version should be 0."); + cmap2.numTables = parse.getUShort(data2, start + 2); + var offset = -1; + for (var i = cmap2.numTables - 1; i >= 0; i -= 1) { + var platformId = parse.getUShort(data2, start + 4 + i * 8); + var encodingId = parse.getUShort(data2, start + 4 + i * 8 + 2); + if (platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10) || platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4)) { + offset = parse.getULong(data2, start + 4 + i * 8 + 4); + break; + } + } + if (offset === -1) { + throw new Error("No valid cmap sub-tables found."); + } + var p2 = new parse.Parser(data2, start + offset); + cmap2.format = p2.parseUShort(); + if (cmap2.format === 12) { + parseCmapTableFormat12(cmap2, p2); + } else if (cmap2.format === 4) { + parseCmapTableFormat4(cmap2, p2, data2, start, offset); + } else { + throw new Error("Only format 4 and 12 cmap tables are supported (found format " + cmap2.format + ")."); + } + return cmap2; +} +function addSegment(t3, code, glyphIndex) { + t3.segments.push({ + end: code, + start: code, + delta: -(code - glyphIndex), + offset: 0, + glyphIndex + }); +} +function addTerminatorSegment(t3) { + t3.segments.push({ + end: 65535, + start: 65535, + delta: 1, + offset: 0 + }); +} +function makeCmapTable(glyphs) { + var isPlan0Only = true; + var i; + for (i = glyphs.length - 1; i > 0; i -= 1) { + var g2 = glyphs.get(i); + if (g2.unicode > 65535) { + console.log("Adding CMAP format 12 (needed!)"); + isPlan0Only = false; + break; + } + } + var cmapTable = [ + { name: "version", type: "USHORT", value: 0 }, + { name: "numTables", type: "USHORT", value: isPlan0Only ? 1 : 2 }, + // CMAP 4 header + { name: "platformID", type: "USHORT", value: 3 }, + { name: "encodingID", type: "USHORT", value: 1 }, + { name: "offset", type: "ULONG", value: isPlan0Only ? 12 : 12 + 8 } + ]; + if (!isPlan0Only) { + cmapTable = cmapTable.concat([ + // CMAP 12 header + { name: "cmap12PlatformID", type: "USHORT", value: 3 }, + // We encode only for PlatformID = 3 (Windows) because it is supported everywhere + { name: "cmap12EncodingID", type: "USHORT", value: 10 }, + { name: "cmap12Offset", type: "ULONG", value: 0 } + ]); + } + cmapTable = cmapTable.concat([ + // CMAP 4 Subtable + { name: "format", type: "USHORT", value: 4 }, + { name: "cmap4Length", type: "USHORT", value: 0 }, + { name: "language", type: "USHORT", value: 0 }, + { name: "segCountX2", type: "USHORT", value: 0 }, + { name: "searchRange", type: "USHORT", value: 0 }, + { name: "entrySelector", type: "USHORT", value: 0 }, + { name: "rangeShift", type: "USHORT", value: 0 } + ]); + var t3 = new table.Table("cmap", cmapTable); + t3.segments = []; + for (i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + for (var j = 0; j < glyph.unicodes.length; j += 1) { + addSegment(t3, glyph.unicodes[j], i); + } + t3.segments = t3.segments.sort(function(a2, b3) { + return a2.start - b3.start; + }); + } + addTerminatorSegment(t3); + var segCount = t3.segments.length; + var segCountToRemove = 0; + var endCounts = []; + var startCounts = []; + var idDeltas = []; + var idRangeOffsets = []; + var glyphIds = []; + var cmap12Groups = []; + for (i = 0; i < segCount; i += 1) { + var segment = t3.segments[i]; + if (segment.end <= 65535 && segment.start <= 65535) { + endCounts = endCounts.concat({ name: "end_" + i, type: "USHORT", value: segment.end }); + startCounts = startCounts.concat({ name: "start_" + i, type: "USHORT", value: segment.start }); + idDeltas = idDeltas.concat({ name: "idDelta_" + i, type: "SHORT", value: segment.delta }); + idRangeOffsets = idRangeOffsets.concat({ name: "idRangeOffset_" + i, type: "USHORT", value: segment.offset }); + if (segment.glyphId !== void 0) { + glyphIds = glyphIds.concat({ name: "glyph_" + i, type: "USHORT", value: segment.glyphId }); + } + } else { + segCountToRemove += 1; + } + if (!isPlan0Only && segment.glyphIndex !== void 0) { + cmap12Groups = cmap12Groups.concat({ name: "cmap12Start_" + i, type: "ULONG", value: segment.start }); + cmap12Groups = cmap12Groups.concat({ name: "cmap12End_" + i, type: "ULONG", value: segment.end }); + cmap12Groups = cmap12Groups.concat({ name: "cmap12Glyph_" + i, type: "ULONG", value: segment.glyphIndex }); + } + } + t3.segCountX2 = (segCount - segCountToRemove) * 2; + t3.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2; + t3.entrySelector = Math.log(t3.searchRange / 2) / Math.log(2); + t3.rangeShift = t3.segCountX2 - t3.searchRange; + t3.fields = t3.fields.concat(endCounts); + t3.fields.push({ name: "reservedPad", type: "USHORT", value: 0 }); + t3.fields = t3.fields.concat(startCounts); + t3.fields = t3.fields.concat(idDeltas); + t3.fields = t3.fields.concat(idRangeOffsets); + t3.fields = t3.fields.concat(glyphIds); + t3.cmap4Length = 14 + // Subtable header + endCounts.length * 2 + 2 + // reservedPad + startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2; + if (!isPlan0Only) { + var cmap12Length = 16 + // Subtable header + cmap12Groups.length * 4; + t3.cmap12Offset = 12 + 2 * 2 + 4 + t3.cmap4Length; + t3.fields = t3.fields.concat([ + { name: "cmap12Format", type: "USHORT", value: 12 }, + { name: "cmap12Reserved", type: "USHORT", value: 0 }, + { name: "cmap12Length", type: "ULONG", value: cmap12Length }, + { name: "cmap12Language", type: "ULONG", value: 0 }, + { name: "cmap12nGroups", type: "ULONG", value: cmap12Groups.length / 3 } + ]); + t3.fields = t3.fields.concat(cmap12Groups); + } + return t3; +} +var cmap = { parse: parseCmapTable, make: makeCmapTable }; +var cffStandardStrings = [ + ".notdef", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "questiondown", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "AE", + "ordfeminine", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "ae", + "dotlessi", + "lslash", + "oslash", + "oe", + "germandbls", + "onesuperior", + "logicalnot", + "mu", + "trademark", + "Eth", + "onehalf", + "plusminus", + "Thorn", + "onequarter", + "divide", + "brokenbar", + "degree", + "thorn", + "threequarters", + "twosuperior", + "registered", + "minus", + "eth", + "multiply", + "threesuperior", + "copyright", + "Aacute", + "Acircumflex", + "Adieresis", + "Agrave", + "Aring", + "Atilde", + "Ccedilla", + "Eacute", + "Ecircumflex", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Ntilde", + "Oacute", + "Ocircumflex", + "Odieresis", + "Ograve", + "Otilde", + "Scaron", + "Uacute", + "Ucircumflex", + "Udieresis", + "Ugrave", + "Yacute", + "Ydieresis", + "Zcaron", + "aacute", + "acircumflex", + "adieresis", + "agrave", + "aring", + "atilde", + "ccedilla", + "eacute", + "ecircumflex", + "edieresis", + "egrave", + "iacute", + "icircumflex", + "idieresis", + "igrave", + "ntilde", + "oacute", + "ocircumflex", + "odieresis", + "ograve", + "otilde", + "scaron", + "uacute", + "ucircumflex", + "udieresis", + "ugrave", + "yacute", + "ydieresis", + "zcaron", + "exclamsmall", + "Hungarumlautsmall", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "266 ff", + "onedotenleader", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "isuperior", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "rsuperior", + "ssuperior", + "tsuperior", + "ff", + "ffi", + "ffl", + "parenleftinferior", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "Dotaccentsmall", + "Macronsmall", + "figuredash", + "hypheninferior", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "zerosuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall", + "001.000", + "001.001", + "001.002", + "001.003", + "Black", + "Bold", + "Book", + "Light", + "Medium", + "Regular", + "Roman", + "Semibold" +]; +var cffStandardEncoding = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quoteright", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "quoteleft", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdown", + "cent", + "sterling", + "fraction", + "yen", + "florin", + "section", + "currency", + "quotesingle", + "quotedblleft", + "guillemotleft", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "", + "endash", + "dagger", + "daggerdbl", + "periodcentered", + "", + "paragraph", + "bullet", + "quotesinglbase", + "quotedblbase", + "quotedblright", + "guillemotright", + "ellipsis", + "perthousand", + "", + "questiondown", + "", + "grave", + "acute", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "dieresis", + "", + "ring", + "cedilla", + "", + "hungarumlaut", + "ogonek", + "caron", + "emdash", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "AE", + "", + "ordfeminine", + "", + "", + "", + "", + "Lslash", + "Oslash", + "OE", + "ordmasculine", + "", + "", + "", + "", + "", + "ae", + "", + "", + "", + "dotlessi", + "", + "", + "lslash", + "oslash", + "oe", + "germandbls" +]; +var cffExpertEncoding = [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "space", + "exclamsmall", + "Hungarumlautsmall", + "", + "dollaroldstyle", + "dollarsuperior", + "ampersandsmall", + "Acutesmall", + "parenleftsuperior", + "parenrightsuperior", + "twodotenleader", + "onedotenleader", + "comma", + "hyphen", + "period", + "fraction", + "zerooldstyle", + "oneoldstyle", + "twooldstyle", + "threeoldstyle", + "fouroldstyle", + "fiveoldstyle", + "sixoldstyle", + "sevenoldstyle", + "eightoldstyle", + "nineoldstyle", + "colon", + "semicolon", + "commasuperior", + "threequartersemdash", + "periodsuperior", + "questionsmall", + "", + "asuperior", + "bsuperior", + "centsuperior", + "dsuperior", + "esuperior", + "", + "", + "isuperior", + "", + "", + "lsuperior", + "msuperior", + "nsuperior", + "osuperior", + "", + "", + "rsuperior", + "ssuperior", + "tsuperior", + "", + "ff", + "fi", + "fl", + "ffi", + "ffl", + "parenleftinferior", + "", + "parenrightinferior", + "Circumflexsmall", + "hyphensuperior", + "Gravesmall", + "Asmall", + "Bsmall", + "Csmall", + "Dsmall", + "Esmall", + "Fsmall", + "Gsmall", + "Hsmall", + "Ismall", + "Jsmall", + "Ksmall", + "Lsmall", + "Msmall", + "Nsmall", + "Osmall", + "Psmall", + "Qsmall", + "Rsmall", + "Ssmall", + "Tsmall", + "Usmall", + "Vsmall", + "Wsmall", + "Xsmall", + "Ysmall", + "Zsmall", + "colonmonetary", + "onefitted", + "rupiah", + "Tildesmall", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "exclamdownsmall", + "centoldstyle", + "Lslashsmall", + "", + "", + "Scaronsmall", + "Zcaronsmall", + "Dieresissmall", + "Brevesmall", + "Caronsmall", + "", + "Dotaccentsmall", + "", + "", + "Macronsmall", + "", + "", + "figuredash", + "hypheninferior", + "", + "", + "Ogoneksmall", + "Ringsmall", + "Cedillasmall", + "", + "", + "", + "onequarter", + "onehalf", + "threequarters", + "questiondownsmall", + "oneeighth", + "threeeighths", + "fiveeighths", + "seveneighths", + "onethird", + "twothirds", + "", + "", + "zerosuperior", + "onesuperior", + "twosuperior", + "threesuperior", + "foursuperior", + "fivesuperior", + "sixsuperior", + "sevensuperior", + "eightsuperior", + "ninesuperior", + "zeroinferior", + "oneinferior", + "twoinferior", + "threeinferior", + "fourinferior", + "fiveinferior", + "sixinferior", + "seveninferior", + "eightinferior", + "nineinferior", + "centinferior", + "dollarinferior", + "periodinferior", + "commainferior", + "Agravesmall", + "Aacutesmall", + "Acircumflexsmall", + "Atildesmall", + "Adieresissmall", + "Aringsmall", + "AEsmall", + "Ccedillasmall", + "Egravesmall", + "Eacutesmall", + "Ecircumflexsmall", + "Edieresissmall", + "Igravesmall", + "Iacutesmall", + "Icircumflexsmall", + "Idieresissmall", + "Ethsmall", + "Ntildesmall", + "Ogravesmall", + "Oacutesmall", + "Ocircumflexsmall", + "Otildesmall", + "Odieresissmall", + "OEsmall", + "Oslashsmall", + "Ugravesmall", + "Uacutesmall", + "Ucircumflexsmall", + "Udieresissmall", + "Yacutesmall", + "Thornsmall", + "Ydieresissmall" +]; +var standardNames = [ + ".notdef", + ".null", + "nonmarkingreturn", + "space", + "exclam", + "quotedbl", + "numbersign", + "dollar", + "percent", + "ampersand", + "quotesingle", + "parenleft", + "parenright", + "asterisk", + "plus", + "comma", + "hyphen", + "period", + "slash", + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine", + "colon", + "semicolon", + "less", + "equal", + "greater", + "question", + "at", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "bracketleft", + "backslash", + "bracketright", + "asciicircum", + "underscore", + "grave", + "a", + "b", + "c", + "d", + "e", + "f", + "g", + "h", + "i", + "j", + "k", + "l", + "m", + "n", + "o", + "p", + "q", + "r", + "s", + "t", + "u", + "v", + "w", + "x", + "y", + "z", + "braceleft", + "bar", + "braceright", + "asciitilde", + "Adieresis", + "Aring", + "Ccedilla", + "Eacute", + "Ntilde", + "Odieresis", + "Udieresis", + "aacute", + "agrave", + "acircumflex", + "adieresis", + "atilde", + "aring", + "ccedilla", + "eacute", + "egrave", + "ecircumflex", + "edieresis", + "iacute", + "igrave", + "icircumflex", + "idieresis", + "ntilde", + "oacute", + "ograve", + "ocircumflex", + "odieresis", + "otilde", + "uacute", + "ugrave", + "ucircumflex", + "udieresis", + "dagger", + "degree", + "cent", + "sterling", + "section", + "bullet", + "paragraph", + "germandbls", + "registered", + "copyright", + "trademark", + "acute", + "dieresis", + "notequal", + "AE", + "Oslash", + "infinity", + "plusminus", + "lessequal", + "greaterequal", + "yen", + "mu", + "partialdiff", + "summation", + "product", + "pi", + "integral", + "ordfeminine", + "ordmasculine", + "Omega", + "ae", + "oslash", + "questiondown", + "exclamdown", + "logicalnot", + "radical", + "florin", + "approxequal", + "Delta", + "guillemotleft", + "guillemotright", + "ellipsis", + "nonbreakingspace", + "Agrave", + "Atilde", + "Otilde", + "OE", + "oe", + "endash", + "emdash", + "quotedblleft", + "quotedblright", + "quoteleft", + "quoteright", + "divide", + "lozenge", + "ydieresis", + "Ydieresis", + "fraction", + "currency", + "guilsinglleft", + "guilsinglright", + "fi", + "fl", + "daggerdbl", + "periodcentered", + "quotesinglbase", + "quotedblbase", + "perthousand", + "Acircumflex", + "Ecircumflex", + "Aacute", + "Edieresis", + "Egrave", + "Iacute", + "Icircumflex", + "Idieresis", + "Igrave", + "Oacute", + "Ocircumflex", + "apple", + "Ograve", + "Uacute", + "Ucircumflex", + "Ugrave", + "dotlessi", + "circumflex", + "tilde", + "macron", + "breve", + "dotaccent", + "ring", + "cedilla", + "hungarumlaut", + "ogonek", + "caron", + "Lslash", + "lslash", + "Scaron", + "scaron", + "Zcaron", + "zcaron", + "brokenbar", + "Eth", + "eth", + "Yacute", + "yacute", + "Thorn", + "thorn", + "minus", + "multiply", + "onesuperior", + "twosuperior", + "threesuperior", + "onehalf", + "onequarter", + "threequarters", + "franc", + "Gbreve", + "gbreve", + "Idotaccent", + "Scedilla", + "scedilla", + "Cacute", + "cacute", + "Ccaron", + "ccaron", + "dcroat" +]; +function DefaultEncoding(font) { + this.font = font; +} +DefaultEncoding.prototype.charToGlyphIndex = function(c2) { + var code = c2.codePointAt(0); + var glyphs = this.font.glyphs; + if (glyphs) { + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + for (var j = 0; j < glyph.unicodes.length; j += 1) { + if (glyph.unicodes[j] === code) { + return i; + } + } + } + } + return null; +}; +function CmapEncoding(cmap2) { + this.cmap = cmap2; +} +CmapEncoding.prototype.charToGlyphIndex = function(c2) { + return this.cmap.glyphIndexMap[c2.codePointAt(0)] || 0; +}; +function CffEncoding(encoding, charset) { + this.encoding = encoding; + this.charset = charset; +} +CffEncoding.prototype.charToGlyphIndex = function(s) { + var code = s.codePointAt(0); + var charName = this.encoding[code]; + return this.charset.indexOf(charName); +}; +function GlyphNames(post2) { + switch (post2.version) { + case 1: + this.names = standardNames.slice(); + break; + case 2: + this.names = new Array(post2.numberOfGlyphs); + for (var i = 0; i < post2.numberOfGlyphs; i++) { + if (post2.glyphNameIndex[i] < standardNames.length) { + this.names[i] = standardNames[post2.glyphNameIndex[i]]; + } else { + this.names[i] = post2.names[post2.glyphNameIndex[i] - standardNames.length]; + } + } + break; + case 2.5: + this.names = new Array(post2.numberOfGlyphs); + for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) { + this.names[i$1] = standardNames[i$1 + post2.glyphNameIndex[i$1]]; + } + break; + case 3: + this.names = []; + break; + default: + this.names = []; + break; + } +} +GlyphNames.prototype.nameToGlyphIndex = function(name2) { + return this.names.indexOf(name2); +}; +GlyphNames.prototype.glyphIndexToName = function(gid) { + return this.names[gid]; +}; +function addGlyphNamesAll(font) { + var glyph; + var glyphIndexMap = font.tables.cmap.glyphIndexMap; + var charCodes = Object.keys(glyphIndexMap); + for (var i = 0; i < charCodes.length; i += 1) { + var c2 = charCodes[i]; + var glyphIndex = glyphIndexMap[c2]; + glyph = font.glyphs.get(glyphIndex); + glyph.addUnicode(parseInt(c2)); + } + for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) { + glyph = font.glyphs.get(i$1); + if (font.cffEncoding) { + if (font.isCIDFont) { + glyph.name = "gid" + i$1; + } else { + glyph.name = font.cffEncoding.charset[i$1]; + } + } else if (font.glyphNames.names) { + glyph.name = font.glyphNames.glyphIndexToName(i$1); + } + } +} +function addGlyphNamesToUnicodeMap(font) { + font._IndexToUnicodeMap = {}; + var glyphIndexMap = font.tables.cmap.glyphIndexMap; + var charCodes = Object.keys(glyphIndexMap); + for (var i = 0; i < charCodes.length; i += 1) { + var c2 = charCodes[i]; + var glyphIndex = glyphIndexMap[c2]; + if (font._IndexToUnicodeMap[glyphIndex] === void 0) { + font._IndexToUnicodeMap[glyphIndex] = { + unicodes: [parseInt(c2)] + }; + } else { + font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c2)); + } + } +} +function addGlyphNames(font, opt) { + if (opt.lowMemory) { + addGlyphNamesToUnicodeMap(font); + } else { + addGlyphNamesAll(font); + } +} +function line(ctx, x1, y1, x2, y2) { + ctx.beginPath(); + ctx.moveTo(x1, y1); + ctx.lineTo(x2, y2); + ctx.stroke(); +} +var draw = { line }; +function getPathDefinition(glyph, path) { + var _path = path || new Path2(); + return { + configurable: true, + get: function() { + if (typeof _path === "function") { + _path = _path(); + } + return _path; + }, + set: function(p2) { + _path = p2; + } + }; +} +function Glyph(options) { + this.bindConstructorValues(options); +} +Glyph.prototype.bindConstructorValues = function(options) { + this.index = options.index || 0; + this.name = options.name || null; + this.unicode = options.unicode || void 0; + this.unicodes = options.unicodes || options.unicode !== void 0 ? [options.unicode] : []; + if ("xMin" in options) { + this.xMin = options.xMin; + } + if ("yMin" in options) { + this.yMin = options.yMin; + } + if ("xMax" in options) { + this.xMax = options.xMax; + } + if ("yMax" in options) { + this.yMax = options.yMax; + } + if ("advanceWidth" in options) { + this.advanceWidth = options.advanceWidth; + } + Object.defineProperty(this, "path", getPathDefinition(this, options.path)); +}; +Glyph.prototype.addUnicode = function(unicode) { + if (this.unicodes.length === 0) { + this.unicode = unicode; + } + this.unicodes.push(unicode); +}; +Glyph.prototype.getBoundingBox = function() { + return this.path.getBoundingBox(); +}; +Glyph.prototype.getPath = function(x2, y2, fontSize, options, font) { + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 72; + var commands; + var hPoints; + if (!options) { + options = {}; + } + var xScale = options.xScale; + var yScale = options.yScale; + if (options.hinting && font && font.hinting) { + hPoints = this.path && font.hinting.exec(this, fontSize); + } + if (hPoints) { + commands = font.hinting.getCommands(hPoints); + x2 = Math.round(x2); + y2 = Math.round(y2); + xScale = yScale = 1; + } else { + commands = this.path.commands; + var scale2 = 1 / (this.path.unitsPerEm || 1e3) * fontSize; + if (xScale === void 0) { + xScale = scale2; + } + if (yScale === void 0) { + yScale = scale2; + } + } + var p2 = new Path2(); + for (var i = 0; i < commands.length; i += 1) { + var cmd = commands[i]; + if (cmd.type === "M") { + p2.moveTo(x2 + cmd.x * xScale, y2 + -cmd.y * yScale); + } else if (cmd.type === "L") { + p2.lineTo(x2 + cmd.x * xScale, y2 + -cmd.y * yScale); + } else if (cmd.type === "Q") { + p2.quadraticCurveTo( + x2 + cmd.x1 * xScale, + y2 + -cmd.y1 * yScale, + x2 + cmd.x * xScale, + y2 + -cmd.y * yScale + ); + } else if (cmd.type === "C") { + p2.curveTo( + x2 + cmd.x1 * xScale, + y2 + -cmd.y1 * yScale, + x2 + cmd.x2 * xScale, + y2 + -cmd.y2 * yScale, + x2 + cmd.x * xScale, + y2 + -cmd.y * yScale + ); + } else if (cmd.type === "Z") { + p2.closePath(); + } + } + return p2; +}; +Glyph.prototype.getContours = function() { + if (this.points === void 0) { + return []; + } + var contours = []; + var currentContour = []; + for (var i = 0; i < this.points.length; i += 1) { + var pt = this.points[i]; + currentContour.push(pt); + if (pt.lastPointOfContour) { + contours.push(currentContour); + currentContour = []; + } + } + check.argument(currentContour.length === 0, "There are still points left in the current contour."); + return contours; +}; +Glyph.prototype.getMetrics = function() { + var commands = this.path.commands; + var xCoords = []; + var yCoords = []; + for (var i = 0; i < commands.length; i += 1) { + var cmd = commands[i]; + if (cmd.type !== "Z") { + xCoords.push(cmd.x); + yCoords.push(cmd.y); + } + if (cmd.type === "Q" || cmd.type === "C") { + xCoords.push(cmd.x1); + yCoords.push(cmd.y1); + } + if (cmd.type === "C") { + xCoords.push(cmd.x2); + yCoords.push(cmd.y2); + } + } + var metrics = { + xMin: Math.min.apply(null, xCoords), + yMin: Math.min.apply(null, yCoords), + xMax: Math.max.apply(null, xCoords), + yMax: Math.max.apply(null, yCoords), + leftSideBearing: this.leftSideBearing + }; + if (!isFinite(metrics.xMin)) { + metrics.xMin = 0; + } + if (!isFinite(metrics.xMax)) { + metrics.xMax = this.advanceWidth; + } + if (!isFinite(metrics.yMin)) { + metrics.yMin = 0; + } + if (!isFinite(metrics.yMax)) { + metrics.yMax = 0; + } + metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin); + return metrics; +}; +Glyph.prototype.draw = function(ctx, x2, y2, fontSize, options) { + this.getPath(x2, y2, fontSize, options).draw(ctx); +}; +Glyph.prototype.drawPoints = function(ctx, x2, y2, fontSize) { + function drawCircles(l2, x3, y3, scale3) { + ctx.beginPath(); + for (var j = 0; j < l2.length; j += 1) { + ctx.moveTo(x3 + l2[j].x * scale3, y3 + l2[j].y * scale3); + ctx.arc(x3 + l2[j].x * scale3, y3 + l2[j].y * scale3, 2, 0, Math.PI * 2, false); + } + ctx.closePath(); + ctx.fill(); + } + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 24; + var scale2 = 1 / this.path.unitsPerEm * fontSize; + var blueCircles = []; + var redCircles = []; + var path = this.path; + for (var i = 0; i < path.commands.length; i += 1) { + var cmd = path.commands[i]; + if (cmd.x !== void 0) { + blueCircles.push({ x: cmd.x, y: -cmd.y }); + } + if (cmd.x1 !== void 0) { + redCircles.push({ x: cmd.x1, y: -cmd.y1 }); + } + if (cmd.x2 !== void 0) { + redCircles.push({ x: cmd.x2, y: -cmd.y2 }); + } + } + ctx.fillStyle = "blue"; + drawCircles(blueCircles, x2, y2, scale2); + ctx.fillStyle = "red"; + drawCircles(redCircles, x2, y2, scale2); +}; +Glyph.prototype.drawMetrics = function(ctx, x2, y2, fontSize) { + var scale2; + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 24; + scale2 = 1 / this.path.unitsPerEm * fontSize; + ctx.lineWidth = 1; + ctx.strokeStyle = "black"; + draw.line(ctx, x2, -1e4, x2, 1e4); + draw.line(ctx, -1e4, y2, 1e4, y2); + var xMin = this.xMin || 0; + var yMin = this.yMin || 0; + var xMax = this.xMax || 0; + var yMax = this.yMax || 0; + var advanceWidth = this.advanceWidth || 0; + ctx.strokeStyle = "blue"; + draw.line(ctx, x2 + xMin * scale2, -1e4, x2 + xMin * scale2, 1e4); + draw.line(ctx, x2 + xMax * scale2, -1e4, x2 + xMax * scale2, 1e4); + draw.line(ctx, -1e4, y2 + -yMin * scale2, 1e4, y2 + -yMin * scale2); + draw.line(ctx, -1e4, y2 + -yMax * scale2, 1e4, y2 + -yMax * scale2); + ctx.strokeStyle = "green"; + draw.line(ctx, x2 + advanceWidth * scale2, -1e4, x2 + advanceWidth * scale2, 1e4); +}; +function defineDependentProperty(glyph, externalName, internalName) { + Object.defineProperty(glyph, externalName, { + get: function() { + glyph.path; + return glyph[internalName]; + }, + set: function(newValue) { + glyph[internalName] = newValue; + }, + enumerable: true, + configurable: true + }); +} +function GlyphSet(font, glyphs) { + this.font = font; + this.glyphs = {}; + if (Array.isArray(glyphs)) { + for (var i = 0; i < glyphs.length; i++) { + var glyph = glyphs[i]; + glyph.path.unitsPerEm = font.unitsPerEm; + this.glyphs[i] = glyph; + } + } + this.length = glyphs && glyphs.length || 0; +} +GlyphSet.prototype.get = function(index2) { + if (this.glyphs[index2] === void 0) { + this.font._push(index2); + if (typeof this.glyphs[index2] === "function") { + this.glyphs[index2] = this.glyphs[index2](); + } + var glyph = this.glyphs[index2]; + var unicodeObj = this.font._IndexToUnicodeMap[index2]; + if (unicodeObj) { + for (var j = 0; j < unicodeObj.unicodes.length; j++) { + glyph.addUnicode(unicodeObj.unicodes[j]); + } + } + if (this.font.cffEncoding) { + if (this.font.isCIDFont) { + glyph.name = "gid" + index2; + } else { + glyph.name = this.font.cffEncoding.charset[index2]; + } + } else if (this.font.glyphNames.names) { + glyph.name = this.font.glyphNames.glyphIndexToName(index2); + } + this.glyphs[index2].advanceWidth = this.font._hmtxTableData[index2].advanceWidth; + this.glyphs[index2].leftSideBearing = this.font._hmtxTableData[index2].leftSideBearing; + } else { + if (typeof this.glyphs[index2] === "function") { + this.glyphs[index2] = this.glyphs[index2](); + } + } + return this.glyphs[index2]; +}; +GlyphSet.prototype.push = function(index2, loader) { + this.glyphs[index2] = loader; + this.length++; +}; +function glyphLoader(font, index2) { + return new Glyph({ index: index2, font }); +} +function ttfGlyphLoader(font, index2, parseGlyph2, data2, position2, buildPath2) { + return function() { + var glyph = new Glyph({ index: index2, font }); + glyph.path = function() { + parseGlyph2(glyph, data2, position2); + var path = buildPath2(font.glyphs, glyph); + path.unitsPerEm = font.unitsPerEm; + return path; + }; + defineDependentProperty(glyph, "xMin", "_xMin"); + defineDependentProperty(glyph, "xMax", "_xMax"); + defineDependentProperty(glyph, "yMin", "_yMin"); + defineDependentProperty(glyph, "yMax", "_yMax"); + return glyph; + }; +} +function cffGlyphLoader(font, index2, parseCFFCharstring2, charstring) { + return function() { + var glyph = new Glyph({ index: index2, font }); + glyph.path = function() { + var path = parseCFFCharstring2(font, glyph, charstring); + path.unitsPerEm = font.unitsPerEm; + return path; + }; + return glyph; + }; +} +var glyphset = { GlyphSet, glyphLoader, ttfGlyphLoader, cffGlyphLoader }; +function equals(a2, b3) { + if (a2 === b3) { + return true; + } else if (Array.isArray(a2) && Array.isArray(b3)) { + if (a2.length !== b3.length) { + return false; + } + for (var i = 0; i < a2.length; i += 1) { + if (!equals(a2[i], b3[i])) { + return false; + } + } + return true; + } else { + return false; + } +} +function calcCFFSubroutineBias(subrs) { + var bias; + if (subrs.length < 1240) { + bias = 107; + } else if (subrs.length < 33900) { + bias = 1131; + } else { + bias = 32768; + } + return bias; +} +function parseCFFIndex(data2, start, conversionFn) { + var offsets = []; + var objects = []; + var count = parse.getCard16(data2, start); + var objectOffset; + var endOffset; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + var pos = start + 3; + for (var i = 0; i < count + 1; i += 1) { + offsets.push(parse.getOffset(data2, pos, offsetSize)); + pos += offsetSize; + } + endOffset = objectOffset + offsets[count]; + } else { + endOffset = start + 2; + } + for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) { + var value2 = parse.getBytes(data2, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]); + if (conversionFn) { + value2 = conversionFn(value2); + } + objects.push(value2); + } + return { objects, startOffset: start, endOffset }; +} +function parseCFFIndexLowMemory(data2, start) { + var offsets = []; + var count = parse.getCard16(data2, start); + var objectOffset; + var endOffset; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + var pos = start + 3; + for (var i = 0; i < count + 1; i += 1) { + offsets.push(parse.getOffset(data2, pos, offsetSize)); + pos += offsetSize; + } + endOffset = objectOffset + offsets[count]; + } else { + endOffset = start + 2; + } + return { offsets, startOffset: start, endOffset }; +} +function getCffIndexObject(i, offsets, data2, start, conversionFn) { + var count = parse.getCard16(data2, start); + var objectOffset = 0; + if (count !== 0) { + var offsetSize = parse.getByte(data2, start + 2); + objectOffset = start + (count + 1) * offsetSize + 2; + } + var value2 = parse.getBytes(data2, objectOffset + offsets[i], objectOffset + offsets[i + 1]); + if (conversionFn) { + value2 = conversionFn(value2); + } + return value2; +} +function parseFloatOperand(parser) { + var s = ""; + var eof = 15; + var lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; + while (true) { + var b3 = parser.parseByte(); + var n1 = b3 >> 4; + var n2 = b3 & 15; + if (n1 === eof) { + break; + } + s += lookup[n1]; + if (n2 === eof) { + break; + } + s += lookup[n2]; + } + return parseFloat(s); +} +function parseOperand(parser, b0) { + var b1; + var b22; + var b3; + var b42; + if (b0 === 28) { + b1 = parser.parseByte(); + b22 = parser.parseByte(); + return b1 << 8 | b22; + } + if (b0 === 29) { + b1 = parser.parseByte(); + b22 = parser.parseByte(); + b3 = parser.parseByte(); + b42 = parser.parseByte(); + return b1 << 24 | b22 << 16 | b3 << 8 | b42; + } + if (b0 === 30) { + return parseFloatOperand(parser); + } + if (b0 >= 32 && b0 <= 246) { + return b0 - 139; + } + if (b0 >= 247 && b0 <= 250) { + b1 = parser.parseByte(); + return (b0 - 247) * 256 + b1 + 108; + } + if (b0 >= 251 && b0 <= 254) { + b1 = parser.parseByte(); + return -(b0 - 251) * 256 - b1 - 108; + } + throw new Error("Invalid b0 " + b0); +} +function entriesToObject(entries) { + var o = {}; + for (var i = 0; i < entries.length; i += 1) { + var key2 = entries[i][0]; + var values2 = entries[i][1]; + var value2 = void 0; + if (values2.length === 1) { + value2 = values2[0]; + } else { + value2 = values2; + } + if (o.hasOwnProperty(key2) && !isNaN(o[key2])) { + throw new Error("Object " + o + " already has key " + key2); + } + o[key2] = value2; + } + return o; +} +function parseCFFDict(data2, start, size2) { + start = start !== void 0 ? start : 0; + var parser = new parse.Parser(data2, start); + var entries = []; + var operands = []; + size2 = size2 !== void 0 ? size2 : data2.length; + while (parser.relativeOffset < size2) { + var op = parser.parseByte(); + if (op <= 21) { + if (op === 12) { + op = 1200 + parser.parseByte(); + } + entries.push([op, operands]); + operands = []; + } else { + operands.push(parseOperand(parser, op)); + } + } + return entriesToObject(entries); +} +function getCFFString(strings, index2) { + if (index2 <= 390) { + index2 = cffStandardStrings[index2]; + } else { + index2 = strings[index2 - 391]; + } + return index2; +} +function interpretDict(dict, meta2, strings) { + var newDict = {}; + var value2; + for (var i = 0; i < meta2.length; i += 1) { + var m = meta2[i]; + if (Array.isArray(m.type)) { + var values2 = []; + values2.length = m.type.length; + for (var j = 0; j < m.type.length; j++) { + value2 = dict[m.op] !== void 0 ? dict[m.op][j] : void 0; + if (value2 === void 0) { + value2 = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null; + } + if (m.type[j] === "SID") { + value2 = getCFFString(strings, value2); + } + values2[j] = value2; + } + newDict[m.name] = values2; + } else { + value2 = dict[m.op]; + if (value2 === void 0) { + value2 = m.value !== void 0 ? m.value : null; + } + if (m.type === "SID") { + value2 = getCFFString(strings, value2); + } + newDict[m.name] = value2; + } + } + return newDict; +} +function parseCFFHeader(data2, start) { + var header = {}; + header.formatMajor = parse.getCard8(data2, start); + header.formatMinor = parse.getCard8(data2, start + 1); + header.size = parse.getCard8(data2, start + 2); + header.offsetSize = parse.getCard8(data2, start + 3); + header.startOffset = start; + header.endOffset = start + 4; + return header; +} +var TOP_DICT_META = [ + { name: "version", op: 0, type: "SID" }, + { name: "notice", op: 1, type: "SID" }, + { name: "copyright", op: 1200, type: "SID" }, + { name: "fullName", op: 2, type: "SID" }, + { name: "familyName", op: 3, type: "SID" }, + { name: "weight", op: 4, type: "SID" }, + { name: "isFixedPitch", op: 1201, type: "number", value: 0 }, + { name: "italicAngle", op: 1202, type: "number", value: 0 }, + { name: "underlinePosition", op: 1203, type: "number", value: -100 }, + { name: "underlineThickness", op: 1204, type: "number", value: 50 }, + { name: "paintType", op: 1205, type: "number", value: 0 }, + { name: "charstringType", op: 1206, type: "number", value: 2 }, + { + name: "fontMatrix", + op: 1207, + type: ["real", "real", "real", "real", "real", "real"], + value: [1e-3, 0, 0, 1e-3, 0, 0] + }, + { name: "uniqueId", op: 13, type: "number" }, + { name: "fontBBox", op: 5, type: ["number", "number", "number", "number"], value: [0, 0, 0, 0] }, + { name: "strokeWidth", op: 1208, type: "number", value: 0 }, + { name: "xuid", op: 14, type: [], value: null }, + { name: "charset", op: 15, type: "offset", value: 0 }, + { name: "encoding", op: 16, type: "offset", value: 0 }, + { name: "charStrings", op: 17, type: "offset", value: 0 }, + { name: "private", op: 18, type: ["number", "offset"], value: [0, 0] }, + { name: "ros", op: 1230, type: ["SID", "SID", "number"] }, + { name: "cidFontVersion", op: 1231, type: "number", value: 0 }, + { name: "cidFontRevision", op: 1232, type: "number", value: 0 }, + { name: "cidFontType", op: 1233, type: "number", value: 0 }, + { name: "cidCount", op: 1234, type: "number", value: 8720 }, + { name: "uidBase", op: 1235, type: "number" }, + { name: "fdArray", op: 1236, type: "offset" }, + { name: "fdSelect", op: 1237, type: "offset" }, + { name: "fontName", op: 1238, type: "SID" } +]; +var PRIVATE_DICT_META = [ + { name: "subrs", op: 19, type: "offset", value: 0 }, + { name: "defaultWidthX", op: 20, type: "number", value: 0 }, + { name: "nominalWidthX", op: 21, type: "number", value: 0 } +]; +function parseCFFTopDict(data2, strings) { + var dict = parseCFFDict(data2, 0, data2.byteLength); + return interpretDict(dict, TOP_DICT_META, strings); +} +function parseCFFPrivateDict(data2, start, size2, strings) { + var dict = parseCFFDict(data2, start, size2); + return interpretDict(dict, PRIVATE_DICT_META, strings); +} +function gatherCFFTopDicts(data2, start, cffIndex, strings) { + var topDictArray = []; + for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) { + var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer); + var topDict = parseCFFTopDict(topDictData, strings); + topDict._subrs = []; + topDict._subrsBias = 0; + topDict._defaultWidthX = 0; + topDict._nominalWidthX = 0; + var privateSize = topDict.private[0]; + var privateOffset = topDict.private[1]; + if (privateSize !== 0 && privateOffset !== 0) { + var privateDict = parseCFFPrivateDict(data2, privateOffset + start, privateSize, strings); + topDict._defaultWidthX = privateDict.defaultWidthX; + topDict._nominalWidthX = privateDict.nominalWidthX; + if (privateDict.subrs !== 0) { + var subrOffset = privateOffset + privateDict.subrs; + var subrIndex = parseCFFIndex(data2, subrOffset + start); + topDict._subrs = subrIndex.objects; + topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs); + } + topDict._privateDict = privateDict; + } + topDictArray.push(topDict); + } + return topDictArray; +} +function parseCFFCharset(data2, start, nGlyphs, strings) { + var sid; + var count; + var parser = new parse.Parser(data2, start); + nGlyphs -= 1; + var charset = [".notdef"]; + var format = parser.parseCard8(); + if (format === 0) { + for (var i = 0; i < nGlyphs; i += 1) { + sid = parser.parseSID(); + charset.push(getCFFString(strings, sid)); + } + } else if (format === 1) { + while (charset.length <= nGlyphs) { + sid = parser.parseSID(); + count = parser.parseCard8(); + for (var i$1 = 0; i$1 <= count; i$1 += 1) { + charset.push(getCFFString(strings, sid)); + sid += 1; + } + } + } else if (format === 2) { + while (charset.length <= nGlyphs) { + sid = parser.parseSID(); + count = parser.parseCard16(); + for (var i$2 = 0; i$2 <= count; i$2 += 1) { + charset.push(getCFFString(strings, sid)); + sid += 1; + } + } + } else { + throw new Error("Unknown charset format " + format); + } + return charset; +} +function parseCFFEncoding(data2, start, charset) { + var code; + var enc = {}; + var parser = new parse.Parser(data2, start); + var format = parser.parseCard8(); + if (format === 0) { + var nCodes = parser.parseCard8(); + for (var i = 0; i < nCodes; i += 1) { + code = parser.parseCard8(); + enc[code] = i; + } + } else if (format === 1) { + var nRanges = parser.parseCard8(); + code = 1; + for (var i$1 = 0; i$1 < nRanges; i$1 += 1) { + var first2 = parser.parseCard8(); + var nLeft = parser.parseCard8(); + for (var j = first2; j <= first2 + nLeft; j += 1) { + enc[j] = code; + code += 1; + } + } + } else { + throw new Error("Unknown encoding format " + format); + } + return new CffEncoding(enc, charset); +} +function parseCFFCharstring(font, glyph, code) { + var c1x; + var c1y; + var c2x; + var c2y; + var p2 = new Path2(); + var stack = []; + var nStems = 0; + var haveWidth = false; + var open = false; + var x2 = 0; + var y2 = 0; + var subrs; + var subrsBias; + var defaultWidthX; + var nominalWidthX; + if (font.isCIDFont) { + var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index]; + var fdDict = font.tables.cff.topDict._fdArray[fdIndex]; + subrs = fdDict._subrs; + subrsBias = fdDict._subrsBias; + defaultWidthX = fdDict._defaultWidthX; + nominalWidthX = fdDict._nominalWidthX; + } else { + subrs = font.tables.cff.topDict._subrs; + subrsBias = font.tables.cff.topDict._subrsBias; + defaultWidthX = font.tables.cff.topDict._defaultWidthX; + nominalWidthX = font.tables.cff.topDict._nominalWidthX; + } + var width2 = defaultWidthX; + function newContour(x3, y3) { + if (open) { + p2.closePath(); + } + p2.moveTo(x3, y3); + open = true; + } + function parseStems() { + var hasWidthArg; + hasWidthArg = stack.length % 2 !== 0; + if (hasWidthArg && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + } + nStems += stack.length >> 1; + stack.length = 0; + haveWidth = true; + } + function parse2(code2) { + var b1; + var b22; + var b3; + var b42; + var codeIndex; + var subrCode; + var jpx; + var jpy; + var c3x; + var c3y; + var c4x; + var c4y; + var i = 0; + while (i < code2.length) { + var v = code2[i]; + i += 1; + switch (v) { + case 1: + parseStems(); + break; + case 3: + parseStems(); + break; + case 4: + if (stack.length > 1 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + y2 += stack.pop(); + newContour(x2, y2); + break; + case 5: + while (stack.length > 0) { + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 6: + while (stack.length > 0) { + x2 += stack.shift(); + p2.lineTo(x2, y2); + if (stack.length === 0) { + break; + } + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 7: + while (stack.length > 0) { + y2 += stack.shift(); + p2.lineTo(x2, y2); + if (stack.length === 0) { + break; + } + x2 += stack.shift(); + p2.lineTo(x2, y2); + } + break; + case 8: + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 10: + codeIndex = stack.pop() + subrsBias; + subrCode = subrs[codeIndex]; + if (subrCode) { + parse2(subrCode); + } + break; + case 11: + return; + case 12: + v = code2[i]; + i += 1; + switch (v) { + case 35: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y + stack.shift(); + c3x = jpx + stack.shift(); + c3y = jpy + stack.shift(); + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + x2 = c4x + stack.shift(); + y2 = c4y + stack.shift(); + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 34: + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y; + c3x = jpx + stack.shift(); + c3y = c2y; + c4x = c3x + stack.shift(); + c4y = y2; + x2 = c4x + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 36: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y; + c3x = jpx + stack.shift(); + c3y = c2y; + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + x2 = c4x + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + case 37: + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + jpx = c2x + stack.shift(); + jpy = c2y + stack.shift(); + c3x = jpx + stack.shift(); + c3y = jpy + stack.shift(); + c4x = c3x + stack.shift(); + c4y = c3y + stack.shift(); + if (Math.abs(c4x - x2) > Math.abs(c4y - y2)) { + x2 = c4x + stack.shift(); + } else { + y2 = c4y + stack.shift(); + } + p2.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); + p2.curveTo(c3x, c3y, c4x, c4y, x2, y2); + break; + default: + console.log("Glyph " + glyph.index + ": unknown operator 1200" + v); + stack.length = 0; + } + break; + case 14: + if (stack.length > 0 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + if (open) { + p2.closePath(); + open = false; + } + break; + case 18: + parseStems(); + break; + case 19: + case 20: + parseStems(); + i += nStems + 7 >> 3; + break; + case 21: + if (stack.length > 2 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + y2 += stack.pop(); + x2 += stack.pop(); + newContour(x2, y2); + break; + case 22: + if (stack.length > 1 && !haveWidth) { + width2 = stack.shift() + nominalWidthX; + haveWidth = true; + } + x2 += stack.pop(); + newContour(x2, y2); + break; + case 23: + parseStems(); + break; + case 24: + while (stack.length > 2) { + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + break; + case 25: + while (stack.length > 6) { + x2 += stack.shift(); + y2 += stack.shift(); + p2.lineTo(x2, y2); + } + c1x = x2 + stack.shift(); + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + break; + case 26: + if (stack.length % 2) { + x2 += stack.shift(); + } + while (stack.length > 0) { + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x; + y2 = c2y + stack.shift(); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 27: + if (stack.length % 2) { + y2 += stack.shift(); + } + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y; + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 28: + b1 = code2[i]; + b22 = code2[i + 1]; + stack.push((b1 << 24 | b22 << 16) >> 16); + i += 2; + break; + case 29: + codeIndex = stack.pop() + font.gsubrsBias; + subrCode = font.gsubrs[codeIndex]; + if (subrCode) { + parse2(subrCode); + } + break; + case 30: + while (stack.length > 0) { + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + if (stack.length === 0) { + break; + } + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + y2 = c2y + stack.shift(); + x2 = c2x + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + case 31: + while (stack.length > 0) { + c1x = x2 + stack.shift(); + c1y = y2; + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + y2 = c2y + stack.shift(); + x2 = c2x + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + if (stack.length === 0) { + break; + } + c1x = x2; + c1y = y2 + stack.shift(); + c2x = c1x + stack.shift(); + c2y = c1y + stack.shift(); + x2 = c2x + stack.shift(); + y2 = c2y + (stack.length === 1 ? stack.shift() : 0); + p2.curveTo(c1x, c1y, c2x, c2y, x2, y2); + } + break; + default: + if (v < 32) { + console.log("Glyph " + glyph.index + ": unknown operator " + v); + } else if (v < 247) { + stack.push(v - 139); + } else if (v < 251) { + b1 = code2[i]; + i += 1; + stack.push((v - 247) * 256 + b1 + 108); + } else if (v < 255) { + b1 = code2[i]; + i += 1; + stack.push(-(v - 251) * 256 - b1 - 108); + } else { + b1 = code2[i]; + b22 = code2[i + 1]; + b3 = code2[i + 2]; + b42 = code2[i + 3]; + i += 4; + stack.push((b1 << 24 | b22 << 16 | b3 << 8 | b42) / 65536); + } + } + } + } + parse2(code); + glyph.advanceWidth = width2; + return p2; +} +function parseCFFFDSelect(data2, start, nGlyphs, fdArrayCount) { + var fdSelect = []; + var fdIndex; + var parser = new parse.Parser(data2, start); + var format = parser.parseCard8(); + if (format === 0) { + for (var iGid = 0; iGid < nGlyphs; iGid++) { + fdIndex = parser.parseCard8(); + if (fdIndex >= fdArrayCount) { + throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); + } + fdSelect.push(fdIndex); + } + } else if (format === 3) { + var nRanges = parser.parseCard16(); + var first2 = parser.parseCard16(); + if (first2 !== 0) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID " + first2); + } + var next; + for (var iRange = 0; iRange < nRanges; iRange++) { + fdIndex = parser.parseCard8(); + next = parser.parseCard16(); + if (fdIndex >= fdArrayCount) { + throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); + } + if (next > nGlyphs) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID " + next); + } + for (; first2 < next; first2++) { + fdSelect.push(fdIndex); + } + first2 = next; + } + if (next !== nGlyphs) { + throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID " + next); + } + } else { + throw new Error("CFF Table CID Font FDSelect table has unsupported format " + format); + } + return fdSelect; +} +function parseCFFTable(data2, start, font, opt) { + font.tables.cff = {}; + var header = parseCFFHeader(data2, start); + var nameIndex = parseCFFIndex(data2, header.endOffset, parse.bytesToString); + var topDictIndex = parseCFFIndex(data2, nameIndex.endOffset); + var stringIndex = parseCFFIndex(data2, topDictIndex.endOffset, parse.bytesToString); + var globalSubrIndex = parseCFFIndex(data2, stringIndex.endOffset); + font.gsubrs = globalSubrIndex.objects; + font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs); + var topDictArray = gatherCFFTopDicts(data2, start, topDictIndex.objects, stringIndex.objects); + if (topDictArray.length !== 1) { + throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = " + topDictArray.length); + } + var topDict = topDictArray[0]; + font.tables.cff.topDict = topDict; + if (topDict._privateDict) { + font.defaultWidthX = topDict._privateDict.defaultWidthX; + font.nominalWidthX = topDict._privateDict.nominalWidthX; + } + if (topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) { + font.isCIDFont = true; + } + if (font.isCIDFont) { + var fdArrayOffset = topDict.fdArray; + var fdSelectOffset = topDict.fdSelect; + if (fdArrayOffset === 0 || fdSelectOffset === 0) { + throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing"); + } + fdArrayOffset += start; + var fdArrayIndex = parseCFFIndex(data2, fdArrayOffset); + var fdArray = gatherCFFTopDicts(data2, start, fdArrayIndex.objects, stringIndex.objects); + topDict._fdArray = fdArray; + fdSelectOffset += start; + topDict._fdSelect = parseCFFFDSelect(data2, fdSelectOffset, font.numGlyphs, fdArray.length); + } + var privateDictOffset = start + topDict.private[1]; + var privateDict = parseCFFPrivateDict(data2, privateDictOffset, topDict.private[0], stringIndex.objects); + font.defaultWidthX = privateDict.defaultWidthX; + font.nominalWidthX = privateDict.nominalWidthX; + if (privateDict.subrs !== 0) { + var subrOffset = privateDictOffset + privateDict.subrs; + var subrIndex = parseCFFIndex(data2, subrOffset); + font.subrs = subrIndex.objects; + font.subrsBias = calcCFFSubroutineBias(font.subrs); + } else { + font.subrs = []; + font.subrsBias = 0; + } + var charStringsIndex; + if (opt.lowMemory) { + charStringsIndex = parseCFFIndexLowMemory(data2, start + topDict.charStrings); + font.nGlyphs = charStringsIndex.offsets.length; + } else { + charStringsIndex = parseCFFIndex(data2, start + topDict.charStrings); + font.nGlyphs = charStringsIndex.objects.length; + } + var charset = parseCFFCharset(data2, start + topDict.charset, font.nGlyphs, stringIndex.objects); + if (topDict.encoding === 0) { + font.cffEncoding = new CffEncoding(cffStandardEncoding, charset); + } else if (topDict.encoding === 1) { + font.cffEncoding = new CffEncoding(cffExpertEncoding, charset); + } else { + font.cffEncoding = parseCFFEncoding(data2, start + topDict.encoding, charset); + } + font.encoding = font.encoding || font.cffEncoding; + font.glyphs = new glyphset.GlyphSet(font); + if (opt.lowMemory) { + font._push = function(i2) { + var charString2 = getCffIndexObject(i2, charStringsIndex.offsets, data2, start + topDict.charStrings); + font.glyphs.push(i2, glyphset.cffGlyphLoader(font, i2, parseCFFCharstring, charString2)); + }; + } else { + for (var i = 0; i < font.nGlyphs; i += 1) { + var charString = charStringsIndex.objects[i]; + font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString)); + } + } +} +function encodeString(s, strings) { + var sid; + var i = cffStandardStrings.indexOf(s); + if (i >= 0) { + sid = i; + } + i = strings.indexOf(s); + if (i >= 0) { + sid = i + cffStandardStrings.length; + } else { + sid = cffStandardStrings.length + strings.length; + strings.push(s); + } + return sid; +} +function makeHeader() { + return new table.Record("Header", [ + { name: "major", type: "Card8", value: 1 }, + { name: "minor", type: "Card8", value: 0 }, + { name: "hdrSize", type: "Card8", value: 4 }, + { name: "major", type: "Card8", value: 1 } + ]); +} +function makeNameIndex(fontNames) { + var t3 = new table.Record("Name INDEX", [ + { name: "names", type: "INDEX", value: [] } + ]); + t3.names = []; + for (var i = 0; i < fontNames.length; i += 1) { + t3.names.push({ name: "name_" + i, type: "NAME", value: fontNames[i] }); + } + return t3; +} +function makeDict(meta2, attrs, strings) { + var m = {}; + for (var i = 0; i < meta2.length; i += 1) { + var entry = meta2[i]; + var value2 = attrs[entry.name]; + if (value2 !== void 0 && !equals(value2, entry.value)) { + if (entry.type === "SID") { + value2 = encodeString(value2, strings); + } + m[entry.op] = { name: entry.name, type: entry.type, value: value2 }; + } + } + return m; +} +function makeTopDict(attrs, strings) { + var t3 = new table.Record("Top DICT", [ + { name: "dict", type: "DICT", value: {} } + ]); + t3.dict = makeDict(TOP_DICT_META, attrs, strings); + return t3; +} +function makeTopDictIndex(topDict) { + var t3 = new table.Record("Top DICT INDEX", [ + { name: "topDicts", type: "INDEX", value: [] } + ]); + t3.topDicts = [{ name: "topDict_0", type: "TABLE", value: topDict }]; + return t3; +} +function makeStringIndex(strings) { + var t3 = new table.Record("String INDEX", [ + { name: "strings", type: "INDEX", value: [] } + ]); + t3.strings = []; + for (var i = 0; i < strings.length; i += 1) { + t3.strings.push({ name: "string_" + i, type: "STRING", value: strings[i] }); + } + return t3; +} +function makeGlobalSubrIndex() { + return new table.Record("Global Subr INDEX", [ + { name: "subrs", type: "INDEX", value: [] } + ]); +} +function makeCharsets(glyphNames, strings) { + var t3 = new table.Record("Charsets", [ + { name: "format", type: "Card8", value: 0 } + ]); + for (var i = 0; i < glyphNames.length; i += 1) { + var glyphName = glyphNames[i]; + var glyphSID = encodeString(glyphName, strings); + t3.fields.push({ name: "glyph_" + i, type: "SID", value: glyphSID }); + } + return t3; +} +function glyphToOps(glyph) { + var ops = []; + var path = glyph.path; + ops.push({ name: "width", type: "NUMBER", value: glyph.advanceWidth }); + var x2 = 0; + var y2 = 0; + for (var i = 0; i < path.commands.length; i += 1) { + var dx = void 0; + var dy = void 0; + var cmd = path.commands[i]; + if (cmd.type === "Q") { + var _13 = 1 / 3; + var _23 = 2 / 3; + cmd = { + type: "C", + x: cmd.x, + y: cmd.y, + x1: Math.round(_13 * x2 + _23 * cmd.x1), + y1: Math.round(_13 * y2 + _23 * cmd.y1), + x2: Math.round(_13 * cmd.x + _23 * cmd.x1), + y2: Math.round(_13 * cmd.y + _23 * cmd.y1) + }; + } + if (cmd.type === "M") { + dx = Math.round(cmd.x - x2); + dy = Math.round(cmd.y - y2); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rmoveto", type: "OP", value: 21 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } else if (cmd.type === "L") { + dx = Math.round(cmd.x - x2); + dy = Math.round(cmd.y - y2); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rlineto", type: "OP", value: 5 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } else if (cmd.type === "C") { + var dx1 = Math.round(cmd.x1 - x2); + var dy1 = Math.round(cmd.y1 - y2); + var dx2 = Math.round(cmd.x2 - cmd.x1); + var dy2 = Math.round(cmd.y2 - cmd.y1); + dx = Math.round(cmd.x - cmd.x2); + dy = Math.round(cmd.y - cmd.y2); + ops.push({ name: "dx1", type: "NUMBER", value: dx1 }); + ops.push({ name: "dy1", type: "NUMBER", value: dy1 }); + ops.push({ name: "dx2", type: "NUMBER", value: dx2 }); + ops.push({ name: "dy2", type: "NUMBER", value: dy2 }); + ops.push({ name: "dx", type: "NUMBER", value: dx }); + ops.push({ name: "dy", type: "NUMBER", value: dy }); + ops.push({ name: "rrcurveto", type: "OP", value: 8 }); + x2 = Math.round(cmd.x); + y2 = Math.round(cmd.y); + } + } + ops.push({ name: "endchar", type: "OP", value: 14 }); + return ops; +} +function makeCharStringsIndex(glyphs) { + var t3 = new table.Record("CharStrings INDEX", [ + { name: "charStrings", type: "INDEX", value: [] } + ]); + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + var ops = glyphToOps(glyph); + t3.charStrings.push({ name: glyph.name, type: "CHARSTRING", value: ops }); + } + return t3; +} +function makePrivateDict(attrs, strings) { + var t3 = new table.Record("Private DICT", [ + { name: "dict", type: "DICT", value: {} } + ]); + t3.dict = makeDict(PRIVATE_DICT_META, attrs, strings); + return t3; +} +function makeCFFTable(glyphs, options) { + var t3 = new table.Table("CFF ", [ + { name: "header", type: "RECORD" }, + { name: "nameIndex", type: "RECORD" }, + { name: "topDictIndex", type: "RECORD" }, + { name: "stringIndex", type: "RECORD" }, + { name: "globalSubrIndex", type: "RECORD" }, + { name: "charsets", type: "RECORD" }, + { name: "charStringsIndex", type: "RECORD" }, + { name: "privateDict", type: "RECORD" } + ]); + var fontScale = 1 / options.unitsPerEm; + var attrs = { + version: options.version, + fullName: options.fullName, + familyName: options.familyName, + weight: options.weightName, + fontBBox: options.fontBBox || [0, 0, 0, 0], + fontMatrix: [fontScale, 0, 0, fontScale, 0, 0], + charset: 999, + encoding: 0, + charStrings: 999, + private: [0, 999] + }; + var privateAttrs = {}; + var glyphNames = []; + var glyph; + for (var i = 1; i < glyphs.length; i += 1) { + glyph = glyphs.get(i); + glyphNames.push(glyph.name); + } + var strings = []; + t3.header = makeHeader(); + t3.nameIndex = makeNameIndex([options.postScriptName]); + var topDict = makeTopDict(attrs, strings); + t3.topDictIndex = makeTopDictIndex(topDict); + t3.globalSubrIndex = makeGlobalSubrIndex(); + t3.charsets = makeCharsets(glyphNames, strings); + t3.charStringsIndex = makeCharStringsIndex(glyphs); + t3.privateDict = makePrivateDict(privateAttrs, strings); + t3.stringIndex = makeStringIndex(strings); + var startOffset = t3.header.sizeOf() + t3.nameIndex.sizeOf() + t3.topDictIndex.sizeOf() + t3.stringIndex.sizeOf() + t3.globalSubrIndex.sizeOf(); + attrs.charset = startOffset; + attrs.encoding = 0; + attrs.charStrings = attrs.charset + t3.charsets.sizeOf(); + attrs.private[1] = attrs.charStrings + t3.charStringsIndex.sizeOf(); + topDict = makeTopDict(attrs, strings); + t3.topDictIndex = makeTopDictIndex(topDict); + return t3; +} +var cff = { parse: parseCFFTable, make: makeCFFTable }; +function parseHeadTable(data2, start) { + var head2 = {}; + var p2 = new parse.Parser(data2, start); + head2.version = p2.parseVersion(); + head2.fontRevision = Math.round(p2.parseFixed() * 1e3) / 1e3; + head2.checkSumAdjustment = p2.parseULong(); + head2.magicNumber = p2.parseULong(); + check.argument(head2.magicNumber === 1594834165, "Font header has wrong magic number."); + head2.flags = p2.parseUShort(); + head2.unitsPerEm = p2.parseUShort(); + head2.created = p2.parseLongDateTime(); + head2.modified = p2.parseLongDateTime(); + head2.xMin = p2.parseShort(); + head2.yMin = p2.parseShort(); + head2.xMax = p2.parseShort(); + head2.yMax = p2.parseShort(); + head2.macStyle = p2.parseUShort(); + head2.lowestRecPPEM = p2.parseUShort(); + head2.fontDirectionHint = p2.parseShort(); + head2.indexToLocFormat = p2.parseShort(); + head2.glyphDataFormat = p2.parseShort(); + return head2; +} +function makeHeadTable(options) { + var timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800; + var createdTimestamp = timestamp; + if (options.createdTimestamp) { + createdTimestamp = options.createdTimestamp + 2082844800; + } + return new table.Table("head", [ + { name: "version", type: "FIXED", value: 65536 }, + { name: "fontRevision", type: "FIXED", value: 65536 }, + { name: "checkSumAdjustment", type: "ULONG", value: 0 }, + { name: "magicNumber", type: "ULONG", value: 1594834165 }, + { name: "flags", type: "USHORT", value: 0 }, + { name: "unitsPerEm", type: "USHORT", value: 1e3 }, + { name: "created", type: "LONGDATETIME", value: createdTimestamp }, + { name: "modified", type: "LONGDATETIME", value: timestamp }, + { name: "xMin", type: "SHORT", value: 0 }, + { name: "yMin", type: "SHORT", value: 0 }, + { name: "xMax", type: "SHORT", value: 0 }, + { name: "yMax", type: "SHORT", value: 0 }, + { name: "macStyle", type: "USHORT", value: 0 }, + { name: "lowestRecPPEM", type: "USHORT", value: 0 }, + { name: "fontDirectionHint", type: "SHORT", value: 2 }, + { name: "indexToLocFormat", type: "SHORT", value: 0 }, + { name: "glyphDataFormat", type: "SHORT", value: 0 } + ], options); +} +var head = { parse: parseHeadTable, make: makeHeadTable }; +function parseHheaTable(data2, start) { + var hhea2 = {}; + var p2 = new parse.Parser(data2, start); + hhea2.version = p2.parseVersion(); + hhea2.ascender = p2.parseShort(); + hhea2.descender = p2.parseShort(); + hhea2.lineGap = p2.parseShort(); + hhea2.advanceWidthMax = p2.parseUShort(); + hhea2.minLeftSideBearing = p2.parseShort(); + hhea2.minRightSideBearing = p2.parseShort(); + hhea2.xMaxExtent = p2.parseShort(); + hhea2.caretSlopeRise = p2.parseShort(); + hhea2.caretSlopeRun = p2.parseShort(); + hhea2.caretOffset = p2.parseShort(); + p2.relativeOffset += 8; + hhea2.metricDataFormat = p2.parseShort(); + hhea2.numberOfHMetrics = p2.parseUShort(); + return hhea2; +} +function makeHheaTable(options) { + return new table.Table("hhea", [ + { name: "version", type: "FIXED", value: 65536 }, + { name: "ascender", type: "FWORD", value: 0 }, + { name: "descender", type: "FWORD", value: 0 }, + { name: "lineGap", type: "FWORD", value: 0 }, + { name: "advanceWidthMax", type: "UFWORD", value: 0 }, + { name: "minLeftSideBearing", type: "FWORD", value: 0 }, + { name: "minRightSideBearing", type: "FWORD", value: 0 }, + { name: "xMaxExtent", type: "FWORD", value: 0 }, + { name: "caretSlopeRise", type: "SHORT", value: 1 }, + { name: "caretSlopeRun", type: "SHORT", value: 0 }, + { name: "caretOffset", type: "SHORT", value: 0 }, + { name: "reserved1", type: "SHORT", value: 0 }, + { name: "reserved2", type: "SHORT", value: 0 }, + { name: "reserved3", type: "SHORT", value: 0 }, + { name: "reserved4", type: "SHORT", value: 0 }, + { name: "metricDataFormat", type: "SHORT", value: 0 }, + { name: "numberOfHMetrics", type: "USHORT", value: 0 } + ], options); +} +var hhea = { parse: parseHheaTable, make: makeHheaTable }; +function parseHmtxTableAll(data2, start, numMetrics, numGlyphs, glyphs) { + var advanceWidth; + var leftSideBearing; + var p2 = new parse.Parser(data2, start); + for (var i = 0; i < numGlyphs; i += 1) { + if (i < numMetrics) { + advanceWidth = p2.parseUShort(); + leftSideBearing = p2.parseShort(); + } + var glyph = glyphs.get(i); + glyph.advanceWidth = advanceWidth; + glyph.leftSideBearing = leftSideBearing; + } +} +function parseHmtxTableOnLowMemory(font, data2, start, numMetrics, numGlyphs) { + font._hmtxTableData = {}; + var advanceWidth; + var leftSideBearing; + var p2 = new parse.Parser(data2, start); + for (var i = 0; i < numGlyphs; i += 1) { + if (i < numMetrics) { + advanceWidth = p2.parseUShort(); + leftSideBearing = p2.parseShort(); + } + font._hmtxTableData[i] = { + advanceWidth, + leftSideBearing + }; + } +} +function parseHmtxTable(font, data2, start, numMetrics, numGlyphs, glyphs, opt) { + if (opt.lowMemory) { + parseHmtxTableOnLowMemory(font, data2, start, numMetrics, numGlyphs); + } else { + parseHmtxTableAll(data2, start, numMetrics, numGlyphs, glyphs); + } +} +function makeHmtxTable(glyphs) { + var t3 = new table.Table("hmtx", []); + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs.get(i); + var advanceWidth = glyph.advanceWidth || 0; + var leftSideBearing = glyph.leftSideBearing || 0; + t3.fields.push({ name: "advanceWidth_" + i, type: "USHORT", value: advanceWidth }); + t3.fields.push({ name: "leftSideBearing_" + i, type: "SHORT", value: leftSideBearing }); + } + return t3; +} +var hmtx = { parse: parseHmtxTable, make: makeHmtxTable }; +function makeLtagTable(tags) { + var result = new table.Table("ltag", [ + { name: "version", type: "ULONG", value: 1 }, + { name: "flags", type: "ULONG", value: 0 }, + { name: "numTags", type: "ULONG", value: tags.length } + ]); + var stringPool = ""; + var stringPoolOffset = 12 + tags.length * 4; + for (var i = 0; i < tags.length; ++i) { + var pos = stringPool.indexOf(tags[i]); + if (pos < 0) { + pos = stringPool.length; + stringPool += tags[i]; + } + result.fields.push({ name: "offset " + i, type: "USHORT", value: stringPoolOffset + pos }); + result.fields.push({ name: "length " + i, type: "USHORT", value: tags[i].length }); + } + result.fields.push({ name: "stringPool", type: "CHARARRAY", value: stringPool }); + return result; +} +function parseLtagTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 1, "Unsupported ltag table version."); + p2.skip("uLong", 1); + var numTags = p2.parseULong(); + var tags = []; + for (var i = 0; i < numTags; i++) { + var tag = ""; + var offset = start + p2.parseUShort(); + var length2 = p2.parseUShort(); + for (var j = offset; j < offset + length2; ++j) { + tag += String.fromCharCode(data2.getInt8(j)); + } + tags.push(tag); + } + return tags; +} +var ltag = { make: makeLtagTable, parse: parseLtagTable }; +function parseMaxpTable(data2, start) { + var maxp2 = {}; + var p2 = new parse.Parser(data2, start); + maxp2.version = p2.parseVersion(); + maxp2.numGlyphs = p2.parseUShort(); + if (maxp2.version === 1) { + maxp2.maxPoints = p2.parseUShort(); + maxp2.maxContours = p2.parseUShort(); + maxp2.maxCompositePoints = p2.parseUShort(); + maxp2.maxCompositeContours = p2.parseUShort(); + maxp2.maxZones = p2.parseUShort(); + maxp2.maxTwilightPoints = p2.parseUShort(); + maxp2.maxStorage = p2.parseUShort(); + maxp2.maxFunctionDefs = p2.parseUShort(); + maxp2.maxInstructionDefs = p2.parseUShort(); + maxp2.maxStackElements = p2.parseUShort(); + maxp2.maxSizeOfInstructions = p2.parseUShort(); + maxp2.maxComponentElements = p2.parseUShort(); + maxp2.maxComponentDepth = p2.parseUShort(); + } + return maxp2; +} +function makeMaxpTable(numGlyphs) { + return new table.Table("maxp", [ + { name: "version", type: "FIXED", value: 20480 }, + { name: "numGlyphs", type: "USHORT", value: numGlyphs } + ]); +} +var maxp = { parse: parseMaxpTable, make: makeMaxpTable }; +var nameTableNames = [ + "copyright", + // 0 + "fontFamily", + // 1 + "fontSubfamily", + // 2 + "uniqueID", + // 3 + "fullName", + // 4 + "version", + // 5 + "postScriptName", + // 6 + "trademark", + // 7 + "manufacturer", + // 8 + "designer", + // 9 + "description", + // 10 + "manufacturerURL", + // 11 + "designerURL", + // 12 + "license", + // 13 + "licenseURL", + // 14 + "reserved", + // 15 + "preferredFamily", + // 16 + "preferredSubfamily", + // 17 + "compatibleFullName", + // 18 + "sampleText", + // 19 + "postScriptFindFontName", + // 20 + "wwsFamily", + // 21 + "wwsSubfamily" + // 22 +]; +var macLanguages = { + 0: "en", + 1: "fr", + 2: "de", + 3: "it", + 4: "nl", + 5: "sv", + 6: "es", + 7: "da", + 8: "pt", + 9: "no", + 10: "he", + 11: "ja", + 12: "ar", + 13: "fi", + 14: "el", + 15: "is", + 16: "mt", + 17: "tr", + 18: "hr", + 19: "zh-Hant", + 20: "ur", + 21: "hi", + 22: "th", + 23: "ko", + 24: "lt", + 25: "pl", + 26: "hu", + 27: "es", + 28: "lv", + 29: "se", + 30: "fo", + 31: "fa", + 32: "ru", + 33: "zh", + 34: "nl-BE", + 35: "ga", + 36: "sq", + 37: "ro", + 38: "cz", + 39: "sk", + 40: "si", + 41: "yi", + 42: "sr", + 43: "mk", + 44: "bg", + 45: "uk", + 46: "be", + 47: "uz", + 48: "kk", + 49: "az-Cyrl", + 50: "az-Arab", + 51: "hy", + 52: "ka", + 53: "mo", + 54: "ky", + 55: "tg", + 56: "tk", + 57: "mn-CN", + 58: "mn", + 59: "ps", + 60: "ks", + 61: "ku", + 62: "sd", + 63: "bo", + 64: "ne", + 65: "sa", + 66: "mr", + 67: "bn", + 68: "as", + 69: "gu", + 70: "pa", + 71: "or", + 72: "ml", + 73: "kn", + 74: "ta", + 75: "te", + 76: "si", + 77: "my", + 78: "km", + 79: "lo", + 80: "vi", + 81: "id", + 82: "tl", + 83: "ms", + 84: "ms-Arab", + 85: "am", + 86: "ti", + 87: "om", + 88: "so", + 89: "sw", + 90: "rw", + 91: "rn", + 92: "ny", + 93: "mg", + 94: "eo", + 128: "cy", + 129: "eu", + 130: "ca", + 131: "la", + 132: "qu", + 133: "gn", + 134: "ay", + 135: "tt", + 136: "ug", + 137: "dz", + 138: "jv", + 139: "su", + 140: "gl", + 141: "af", + 142: "br", + 143: "iu", + 144: "gd", + 145: "gv", + 146: "ga", + 147: "to", + 148: "el-polyton", + 149: "kl", + 150: "az", + 151: "nn" +}; +var macLanguageToScript = { + 0: 0, + // langEnglish → smRoman + 1: 0, + // langFrench → smRoman + 2: 0, + // langGerman → smRoman + 3: 0, + // langItalian → smRoman + 4: 0, + // langDutch → smRoman + 5: 0, + // langSwedish → smRoman + 6: 0, + // langSpanish → smRoman + 7: 0, + // langDanish → smRoman + 8: 0, + // langPortuguese → smRoman + 9: 0, + // langNorwegian → smRoman + 10: 5, + // langHebrew → smHebrew + 11: 1, + // langJapanese → smJapanese + 12: 4, + // langArabic → smArabic + 13: 0, + // langFinnish → smRoman + 14: 6, + // langGreek → smGreek + 15: 0, + // langIcelandic → smRoman (modified) + 16: 0, + // langMaltese → smRoman + 17: 0, + // langTurkish → smRoman (modified) + 18: 0, + // langCroatian → smRoman (modified) + 19: 2, + // langTradChinese → smTradChinese + 20: 4, + // langUrdu → smArabic + 21: 9, + // langHindi → smDevanagari + 22: 21, + // langThai → smThai + 23: 3, + // langKorean → smKorean + 24: 29, + // langLithuanian → smCentralEuroRoman + 25: 29, + // langPolish → smCentralEuroRoman + 26: 29, + // langHungarian → smCentralEuroRoman + 27: 29, + // langEstonian → smCentralEuroRoman + 28: 29, + // langLatvian → smCentralEuroRoman + 29: 0, + // langSami → smRoman + 30: 0, + // langFaroese → smRoman (modified) + 31: 4, + // langFarsi → smArabic (modified) + 32: 7, + // langRussian → smCyrillic + 33: 25, + // langSimpChinese → smSimpChinese + 34: 0, + // langFlemish → smRoman + 35: 0, + // langIrishGaelic → smRoman (modified) + 36: 0, + // langAlbanian → smRoman + 37: 0, + // langRomanian → smRoman (modified) + 38: 29, + // langCzech → smCentralEuroRoman + 39: 29, + // langSlovak → smCentralEuroRoman + 40: 0, + // langSlovenian → smRoman (modified) + 41: 5, + // langYiddish → smHebrew + 42: 7, + // langSerbian → smCyrillic + 43: 7, + // langMacedonian → smCyrillic + 44: 7, + // langBulgarian → smCyrillic + 45: 7, + // langUkrainian → smCyrillic (modified) + 46: 7, + // langByelorussian → smCyrillic + 47: 7, + // langUzbek → smCyrillic + 48: 7, + // langKazakh → smCyrillic + 49: 7, + // langAzerbaijani → smCyrillic + 50: 4, + // langAzerbaijanAr → smArabic + 51: 24, + // langArmenian → smArmenian + 52: 23, + // langGeorgian → smGeorgian + 53: 7, + // langMoldavian → smCyrillic + 54: 7, + // langKirghiz → smCyrillic + 55: 7, + // langTajiki → smCyrillic + 56: 7, + // langTurkmen → smCyrillic + 57: 27, + // langMongolian → smMongolian + 58: 7, + // langMongolianCyr → smCyrillic + 59: 4, + // langPashto → smArabic + 60: 4, + // langKurdish → smArabic + 61: 4, + // langKashmiri → smArabic + 62: 4, + // langSindhi → smArabic + 63: 26, + // langTibetan → smTibetan + 64: 9, + // langNepali → smDevanagari + 65: 9, + // langSanskrit → smDevanagari + 66: 9, + // langMarathi → smDevanagari + 67: 13, + // langBengali → smBengali + 68: 13, + // langAssamese → smBengali + 69: 11, + // langGujarati → smGujarati + 70: 10, + // langPunjabi → smGurmukhi + 71: 12, + // langOriya → smOriya + 72: 17, + // langMalayalam → smMalayalam + 73: 16, + // langKannada → smKannada + 74: 14, + // langTamil → smTamil + 75: 15, + // langTelugu → smTelugu + 76: 18, + // langSinhalese → smSinhalese + 77: 19, + // langBurmese → smBurmese + 78: 20, + // langKhmer → smKhmer + 79: 22, + // langLao → smLao + 80: 30, + // langVietnamese → smVietnamese + 81: 0, + // langIndonesian → smRoman + 82: 0, + // langTagalog → smRoman + 83: 0, + // langMalayRoman → smRoman + 84: 4, + // langMalayArabic → smArabic + 85: 28, + // langAmharic → smEthiopic + 86: 28, + // langTigrinya → smEthiopic + 87: 28, + // langOromo → smEthiopic + 88: 0, + // langSomali → smRoman + 89: 0, + // langSwahili → smRoman + 90: 0, + // langKinyarwanda → smRoman + 91: 0, + // langRundi → smRoman + 92: 0, + // langNyanja → smRoman + 93: 0, + // langMalagasy → smRoman + 94: 0, + // langEsperanto → smRoman + 128: 0, + // langWelsh → smRoman (modified) + 129: 0, + // langBasque → smRoman + 130: 0, + // langCatalan → smRoman + 131: 0, + // langLatin → smRoman + 132: 0, + // langQuechua → smRoman + 133: 0, + // langGuarani → smRoman + 134: 0, + // langAymara → smRoman + 135: 7, + // langTatar → smCyrillic + 136: 4, + // langUighur → smArabic + 137: 26, + // langDzongkha → smTibetan + 138: 0, + // langJavaneseRom → smRoman + 139: 0, + // langSundaneseRom → smRoman + 140: 0, + // langGalician → smRoman + 141: 0, + // langAfrikaans → smRoman + 142: 0, + // langBreton → smRoman (modified) + 143: 28, + // langInuktitut → smEthiopic (modified) + 144: 0, + // langScottishGaelic → smRoman (modified) + 145: 0, + // langManxGaelic → smRoman (modified) + 146: 0, + // langIrishGaelicScript → smRoman (modified) + 147: 0, + // langTongan → smRoman + 148: 6, + // langGreekAncient → smRoman + 149: 0, + // langGreenlandic → smRoman + 150: 0, + // langAzerbaijanRoman → smRoman + 151: 0 + // langNynorsk → smRoman +}; +var windowsLanguages = { + 1078: "af", + 1052: "sq", + 1156: "gsw", + 1118: "am", + 5121: "ar-DZ", + 15361: "ar-BH", + 3073: "ar", + 2049: "ar-IQ", + 11265: "ar-JO", + 13313: "ar-KW", + 12289: "ar-LB", + 4097: "ar-LY", + 6145: "ary", + 8193: "ar-OM", + 16385: "ar-QA", + 1025: "ar-SA", + 10241: "ar-SY", + 7169: "aeb", + 14337: "ar-AE", + 9217: "ar-YE", + 1067: "hy", + 1101: "as", + 2092: "az-Cyrl", + 1068: "az", + 1133: "ba", + 1069: "eu", + 1059: "be", + 2117: "bn", + 1093: "bn-IN", + 8218: "bs-Cyrl", + 5146: "bs", + 1150: "br", + 1026: "bg", + 1027: "ca", + 3076: "zh-HK", + 5124: "zh-MO", + 2052: "zh", + 4100: "zh-SG", + 1028: "zh-TW", + 1155: "co", + 1050: "hr", + 4122: "hr-BA", + 1029: "cs", + 1030: "da", + 1164: "prs", + 1125: "dv", + 2067: "nl-BE", + 1043: "nl", + 3081: "en-AU", + 10249: "en-BZ", + 4105: "en-CA", + 9225: "en-029", + 16393: "en-IN", + 6153: "en-IE", + 8201: "en-JM", + 17417: "en-MY", + 5129: "en-NZ", + 13321: "en-PH", + 18441: "en-SG", + 7177: "en-ZA", + 11273: "en-TT", + 2057: "en-GB", + 1033: "en", + 12297: "en-ZW", + 1061: "et", + 1080: "fo", + 1124: "fil", + 1035: "fi", + 2060: "fr-BE", + 3084: "fr-CA", + 1036: "fr", + 5132: "fr-LU", + 6156: "fr-MC", + 4108: "fr-CH", + 1122: "fy", + 1110: "gl", + 1079: "ka", + 3079: "de-AT", + 1031: "de", + 5127: "de-LI", + 4103: "de-LU", + 2055: "de-CH", + 1032: "el", + 1135: "kl", + 1095: "gu", + 1128: "ha", + 1037: "he", + 1081: "hi", + 1038: "hu", + 1039: "is", + 1136: "ig", + 1057: "id", + 1117: "iu", + 2141: "iu-Latn", + 2108: "ga", + 1076: "xh", + 1077: "zu", + 1040: "it", + 2064: "it-CH", + 1041: "ja", + 1099: "kn", + 1087: "kk", + 1107: "km", + 1158: "quc", + 1159: "rw", + 1089: "sw", + 1111: "kok", + 1042: "ko", + 1088: "ky", + 1108: "lo", + 1062: "lv", + 1063: "lt", + 2094: "dsb", + 1134: "lb", + 1071: "mk", + 2110: "ms-BN", + 1086: "ms", + 1100: "ml", + 1082: "mt", + 1153: "mi", + 1146: "arn", + 1102: "mr", + 1148: "moh", + 1104: "mn", + 2128: "mn-CN", + 1121: "ne", + 1044: "nb", + 2068: "nn", + 1154: "oc", + 1096: "or", + 1123: "ps", + 1045: "pl", + 1046: "pt", + 2070: "pt-PT", + 1094: "pa", + 1131: "qu-BO", + 2155: "qu-EC", + 3179: "qu", + 1048: "ro", + 1047: "rm", + 1049: "ru", + 9275: "smn", + 4155: "smj-NO", + 5179: "smj", + 3131: "se-FI", + 1083: "se", + 2107: "se-SE", + 8251: "sms", + 6203: "sma-NO", + 7227: "sms", + 1103: "sa", + 7194: "sr-Cyrl-BA", + 3098: "sr", + 6170: "sr-Latn-BA", + 2074: "sr-Latn", + 1132: "nso", + 1074: "tn", + 1115: "si", + 1051: "sk", + 1060: "sl", + 11274: "es-AR", + 16394: "es-BO", + 13322: "es-CL", + 9226: "es-CO", + 5130: "es-CR", + 7178: "es-DO", + 12298: "es-EC", + 17418: "es-SV", + 4106: "es-GT", + 18442: "es-HN", + 2058: "es-MX", + 19466: "es-NI", + 6154: "es-PA", + 15370: "es-PY", + 10250: "es-PE", + 20490: "es-PR", + // Microsoft has defined two different language codes for + // “Spanish with modern sorting” and “Spanish with traditional + // sorting”. This makes sense for collation APIs, and it would be + // possible to express this in BCP 47 language tags via Unicode + // extensions (eg., es-u-co-trad is Spanish with traditional + // sorting). However, for storing names in fonts, the distinction + // does not make sense, so we give “es” in both cases. + 3082: "es", + 1034: "es", + 21514: "es-US", + 14346: "es-UY", + 8202: "es-VE", + 2077: "sv-FI", + 1053: "sv", + 1114: "syr", + 1064: "tg", + 2143: "tzm", + 1097: "ta", + 1092: "tt", + 1098: "te", + 1054: "th", + 1105: "bo", + 1055: "tr", + 1090: "tk", + 1152: "ug", + 1058: "uk", + 1070: "hsb", + 1056: "ur", + 2115: "uz-Cyrl", + 1091: "uz", + 1066: "vi", + 1106: "cy", + 1160: "wo", + 1157: "sah", + 1144: "ii", + 1130: "yo" +}; +function getLanguageCode(platformID, languageID, ltag2) { + switch (platformID) { + case 0: + if (languageID === 65535) { + return "und"; + } else if (ltag2) { + return ltag2[languageID]; + } + break; + case 1: + return macLanguages[languageID]; + case 3: + return windowsLanguages[languageID]; + } + return void 0; +} +var utf16 = "utf-16"; +var macScriptEncodings = { + 0: "macintosh", + // smRoman + 1: "x-mac-japanese", + // smJapanese + 2: "x-mac-chinesetrad", + // smTradChinese + 3: "x-mac-korean", + // smKorean + 6: "x-mac-greek", + // smGreek + 7: "x-mac-cyrillic", + // smCyrillic + 9: "x-mac-devanagai", + // smDevanagari + 10: "x-mac-gurmukhi", + // smGurmukhi + 11: "x-mac-gujarati", + // smGujarati + 12: "x-mac-oriya", + // smOriya + 13: "x-mac-bengali", + // smBengali + 14: "x-mac-tamil", + // smTamil + 15: "x-mac-telugu", + // smTelugu + 16: "x-mac-kannada", + // smKannada + 17: "x-mac-malayalam", + // smMalayalam + 18: "x-mac-sinhalese", + // smSinhalese + 19: "x-mac-burmese", + // smBurmese + 20: "x-mac-khmer", + // smKhmer + 21: "x-mac-thai", + // smThai + 22: "x-mac-lao", + // smLao + 23: "x-mac-georgian", + // smGeorgian + 24: "x-mac-armenian", + // smArmenian + 25: "x-mac-chinesesimp", + // smSimpChinese + 26: "x-mac-tibetan", + // smTibetan + 27: "x-mac-mongolian", + // smMongolian + 28: "x-mac-ethiopic", + // smEthiopic + 29: "x-mac-ce", + // smCentralEuroRoman + 30: "x-mac-vietnamese", + // smVietnamese + 31: "x-mac-extarabic" + // smExtArabic +}; +var macLanguageEncodings = { + 15: "x-mac-icelandic", + // langIcelandic + 17: "x-mac-turkish", + // langTurkish + 18: "x-mac-croatian", + // langCroatian + 24: "x-mac-ce", + // langLithuanian + 25: "x-mac-ce", + // langPolish + 26: "x-mac-ce", + // langHungarian + 27: "x-mac-ce", + // langEstonian + 28: "x-mac-ce", + // langLatvian + 30: "x-mac-icelandic", + // langFaroese + 37: "x-mac-romanian", + // langRomanian + 38: "x-mac-ce", + // langCzech + 39: "x-mac-ce", + // langSlovak + 40: "x-mac-ce", + // langSlovenian + 143: "x-mac-inuit", + // langInuktitut + 146: "x-mac-gaelic" + // langIrishGaelicScript +}; +function getEncoding(platformID, encodingID, languageID) { + switch (platformID) { + case 0: + return utf16; + case 1: + return macLanguageEncodings[languageID] || macScriptEncodings[encodingID]; + case 3: + if (encodingID === 1 || encodingID === 10) { + return utf16; + } + break; + } + return void 0; +} +function parseNameTable(data2, start, ltag2) { + var name2 = {}; + var p2 = new parse.Parser(data2, start); + var format = p2.parseUShort(); + var count = p2.parseUShort(); + var stringOffset2 = p2.offset + p2.parseUShort(); + for (var i = 0; i < count; i++) { + var platformID = p2.parseUShort(); + var encodingID = p2.parseUShort(); + var languageID = p2.parseUShort(); + var nameID = p2.parseUShort(); + var property2 = nameTableNames[nameID] || nameID; + var byteLength = p2.parseUShort(); + var offset = p2.parseUShort(); + var language = getLanguageCode(platformID, languageID, ltag2); + var encoding = getEncoding(platformID, encodingID, languageID); + if (encoding !== void 0 && language !== void 0) { + var text2 = void 0; + if (encoding === utf16) { + text2 = decode.UTF16(data2, stringOffset2 + offset, byteLength); + } else { + text2 = decode.MACSTRING(data2, stringOffset2 + offset, byteLength, encoding); + } + if (text2) { + var translations = name2[property2]; + if (translations === void 0) { + translations = name2[property2] = {}; + } + translations[language] = text2; + } + } + } + var langTagCount = 0; + if (format === 1) { + langTagCount = p2.parseUShort(); + } + return name2; +} +function reverseDict(dict) { + var result = {}; + for (var key2 in dict) { + result[dict[key2]] = parseInt(key2); + } + return result; +} +function makeNameRecord(platformID, encodingID, languageID, nameID, length2, offset) { + return new table.Record("NameRecord", [ + { name: "platformID", type: "USHORT", value: platformID }, + { name: "encodingID", type: "USHORT", value: encodingID }, + { name: "languageID", type: "USHORT", value: languageID }, + { name: "nameID", type: "USHORT", value: nameID }, + { name: "length", type: "USHORT", value: length2 }, + { name: "offset", type: "USHORT", value: offset } + ]); +} +function findSubArray(needle, haystack) { + var needleLength = needle.length; + var limit = haystack.length - needleLength + 1; + loop: + for (var pos = 0; pos < limit; pos++) { + for (; pos < limit; pos++) { + for (var k2 = 0; k2 < needleLength; k2++) { + if (haystack[pos + k2] !== needle[k2]) { + continue loop; + } + } + return pos; + } + } + return -1; +} +function addStringToPool(s, pool) { + var offset = findSubArray(s, pool); + if (offset < 0) { + offset = pool.length; + var i = 0; + var len = s.length; + for (; i < len; ++i) { + pool.push(s[i]); + } + } + return offset; +} +function makeNameTable(names, ltag2) { + var nameID; + var nameIDs = []; + var namesWithNumericKeys = {}; + var nameTableIds = reverseDict(nameTableNames); + for (var key2 in names) { + var id = nameTableIds[key2]; + if (id === void 0) { + id = key2; + } + nameID = parseInt(id); + if (isNaN(nameID)) { + throw new Error('Name table entry "' + key2 + '" does not exist, see nameTableNames for complete list.'); + } + namesWithNumericKeys[nameID] = names[key2]; + nameIDs.push(nameID); + } + var macLanguageIds = reverseDict(macLanguages); + var windowsLanguageIds = reverseDict(windowsLanguages); + var nameRecords = []; + var stringPool = []; + for (var i = 0; i < nameIDs.length; i++) { + nameID = nameIDs[i]; + var translations = namesWithNumericKeys[nameID]; + for (var lang in translations) { + var text2 = translations[lang]; + var macPlatform = 1; + var macLanguage = macLanguageIds[lang]; + var macScript = macLanguageToScript[macLanguage]; + var macEncoding = getEncoding(macPlatform, macScript, macLanguage); + var macName = encode.MACSTRING(text2, macEncoding); + if (macName === void 0) { + macPlatform = 0; + macLanguage = ltag2.indexOf(lang); + if (macLanguage < 0) { + macLanguage = ltag2.length; + ltag2.push(lang); + } + macScript = 4; + macName = encode.UTF16(text2); + } + var macNameOffset = addStringToPool(macName, stringPool); + nameRecords.push(makeNameRecord( + macPlatform, + macScript, + macLanguage, + nameID, + macName.length, + macNameOffset + )); + var winLanguage = windowsLanguageIds[lang]; + if (winLanguage !== void 0) { + var winName = encode.UTF16(text2); + var winNameOffset = addStringToPool(winName, stringPool); + nameRecords.push(makeNameRecord( + 3, + 1, + winLanguage, + nameID, + winName.length, + winNameOffset + )); + } + } + } + nameRecords.sort(function(a2, b3) { + return a2.platformID - b3.platformID || a2.encodingID - b3.encodingID || a2.languageID - b3.languageID || a2.nameID - b3.nameID; + }); + var t3 = new table.Table("name", [ + { name: "format", type: "USHORT", value: 0 }, + { name: "count", type: "USHORT", value: nameRecords.length }, + { name: "stringOffset", type: "USHORT", value: 6 + nameRecords.length * 12 } + ]); + for (var r = 0; r < nameRecords.length; r++) { + t3.fields.push({ name: "record_" + r, type: "RECORD", value: nameRecords[r] }); + } + t3.fields.push({ name: "strings", type: "LITERAL", value: stringPool }); + return t3; +} +var _name = { parse: parseNameTable, make: makeNameTable }; +var unicodeRanges = [ + { begin: 0, end: 127 }, + // Basic Latin + { begin: 128, end: 255 }, + // Latin-1 Supplement + { begin: 256, end: 383 }, + // Latin Extended-A + { begin: 384, end: 591 }, + // Latin Extended-B + { begin: 592, end: 687 }, + // IPA Extensions + { begin: 688, end: 767 }, + // Spacing Modifier Letters + { begin: 768, end: 879 }, + // Combining Diacritical Marks + { begin: 880, end: 1023 }, + // Greek and Coptic + { begin: 11392, end: 11519 }, + // Coptic + { begin: 1024, end: 1279 }, + // Cyrillic + { begin: 1328, end: 1423 }, + // Armenian + { begin: 1424, end: 1535 }, + // Hebrew + { begin: 42240, end: 42559 }, + // Vai + { begin: 1536, end: 1791 }, + // Arabic + { begin: 1984, end: 2047 }, + // NKo + { begin: 2304, end: 2431 }, + // Devanagari + { begin: 2432, end: 2559 }, + // Bengali + { begin: 2560, end: 2687 }, + // Gurmukhi + { begin: 2688, end: 2815 }, + // Gujarati + { begin: 2816, end: 2943 }, + // Oriya + { begin: 2944, end: 3071 }, + // Tamil + { begin: 3072, end: 3199 }, + // Telugu + { begin: 3200, end: 3327 }, + // Kannada + { begin: 3328, end: 3455 }, + // Malayalam + { begin: 3584, end: 3711 }, + // Thai + { begin: 3712, end: 3839 }, + // Lao + { begin: 4256, end: 4351 }, + // Georgian + { begin: 6912, end: 7039 }, + // Balinese + { begin: 4352, end: 4607 }, + // Hangul Jamo + { begin: 7680, end: 7935 }, + // Latin Extended Additional + { begin: 7936, end: 8191 }, + // Greek Extended + { begin: 8192, end: 8303 }, + // General Punctuation + { begin: 8304, end: 8351 }, + // Superscripts And Subscripts + { begin: 8352, end: 8399 }, + // Currency Symbol + { begin: 8400, end: 8447 }, + // Combining Diacritical Marks For Symbols + { begin: 8448, end: 8527 }, + // Letterlike Symbols + { begin: 8528, end: 8591 }, + // Number Forms + { begin: 8592, end: 8703 }, + // Arrows + { begin: 8704, end: 8959 }, + // Mathematical Operators + { begin: 8960, end: 9215 }, + // Miscellaneous Technical + { begin: 9216, end: 9279 }, + // Control Pictures + { begin: 9280, end: 9311 }, + // Optical Character Recognition + { begin: 9312, end: 9471 }, + // Enclosed Alphanumerics + { begin: 9472, end: 9599 }, + // Box Drawing + { begin: 9600, end: 9631 }, + // Block Elements + { begin: 9632, end: 9727 }, + // Geometric Shapes + { begin: 9728, end: 9983 }, + // Miscellaneous Symbols + { begin: 9984, end: 10175 }, + // Dingbats + { begin: 12288, end: 12351 }, + // CJK Symbols And Punctuation + { begin: 12352, end: 12447 }, + // Hiragana + { begin: 12448, end: 12543 }, + // Katakana + { begin: 12544, end: 12591 }, + // Bopomofo + { begin: 12592, end: 12687 }, + // Hangul Compatibility Jamo + { begin: 43072, end: 43135 }, + // Phags-pa + { begin: 12800, end: 13055 }, + // Enclosed CJK Letters And Months + { begin: 13056, end: 13311 }, + // CJK Compatibility + { begin: 44032, end: 55215 }, + // Hangul Syllables + { begin: 55296, end: 57343 }, + // Non-Plane 0 * + { begin: 67840, end: 67871 }, + // Phoenicia + { begin: 19968, end: 40959 }, + // CJK Unified Ideographs + { begin: 57344, end: 63743 }, + // Private Use Area (plane 0) + { begin: 12736, end: 12783 }, + // CJK Strokes + { begin: 64256, end: 64335 }, + // Alphabetic Presentation Forms + { begin: 64336, end: 65023 }, + // Arabic Presentation Forms-A + { begin: 65056, end: 65071 }, + // Combining Half Marks + { begin: 65040, end: 65055 }, + // Vertical Forms + { begin: 65104, end: 65135 }, + // Small Form Variants + { begin: 65136, end: 65279 }, + // Arabic Presentation Forms-B + { begin: 65280, end: 65519 }, + // Halfwidth And Fullwidth Forms + { begin: 65520, end: 65535 }, + // Specials + { begin: 3840, end: 4095 }, + // Tibetan + { begin: 1792, end: 1871 }, + // Syriac + { begin: 1920, end: 1983 }, + // Thaana + { begin: 3456, end: 3583 }, + // Sinhala + { begin: 4096, end: 4255 }, + // Myanmar + { begin: 4608, end: 4991 }, + // Ethiopic + { begin: 5024, end: 5119 }, + // Cherokee + { begin: 5120, end: 5759 }, + // Unified Canadian Aboriginal Syllabics + { begin: 5760, end: 5791 }, + // Ogham + { begin: 5792, end: 5887 }, + // Runic + { begin: 6016, end: 6143 }, + // Khmer + { begin: 6144, end: 6319 }, + // Mongolian + { begin: 10240, end: 10495 }, + // Braille Patterns + { begin: 40960, end: 42127 }, + // Yi Syllables + { begin: 5888, end: 5919 }, + // Tagalog + { begin: 66304, end: 66351 }, + // Old Italic + { begin: 66352, end: 66383 }, + // Gothic + { begin: 66560, end: 66639 }, + // Deseret + { begin: 118784, end: 119039 }, + // Byzantine Musical Symbols + { begin: 119808, end: 120831 }, + // Mathematical Alphanumeric Symbols + { begin: 1044480, end: 1048573 }, + // Private Use (plane 15) + { begin: 65024, end: 65039 }, + // Variation Selectors + { begin: 917504, end: 917631 }, + // Tags + { begin: 6400, end: 6479 }, + // Limbu + { begin: 6480, end: 6527 }, + // Tai Le + { begin: 6528, end: 6623 }, + // New Tai Lue + { begin: 6656, end: 6687 }, + // Buginese + { begin: 11264, end: 11359 }, + // Glagolitic + { begin: 11568, end: 11647 }, + // Tifinagh + { begin: 19904, end: 19967 }, + // Yijing Hexagram Symbols + { begin: 43008, end: 43055 }, + // Syloti Nagri + { begin: 65536, end: 65663 }, + // Linear B Syllabary + { begin: 65856, end: 65935 }, + // Ancient Greek Numbers + { begin: 66432, end: 66463 }, + // Ugaritic + { begin: 66464, end: 66527 }, + // Old Persian + { begin: 66640, end: 66687 }, + // Shavian + { begin: 66688, end: 66735 }, + // Osmanya + { begin: 67584, end: 67647 }, + // Cypriot Syllabary + { begin: 68096, end: 68191 }, + // Kharoshthi + { begin: 119552, end: 119647 }, + // Tai Xuan Jing Symbols + { begin: 73728, end: 74751 }, + // Cuneiform + { begin: 119648, end: 119679 }, + // Counting Rod Numerals + { begin: 7040, end: 7103 }, + // Sundanese + { begin: 7168, end: 7247 }, + // Lepcha + { begin: 7248, end: 7295 }, + // Ol Chiki + { begin: 43136, end: 43231 }, + // Saurashtra + { begin: 43264, end: 43311 }, + // Kayah Li + { begin: 43312, end: 43359 }, + // Rejang + { begin: 43520, end: 43615 }, + // Cham + { begin: 65936, end: 65999 }, + // Ancient Symbols + { begin: 66e3, end: 66047 }, + // Phaistos Disc + { begin: 66208, end: 66271 }, + // Carian + { begin: 127024, end: 127135 } + // Domino Tiles +]; +function getUnicodeRange(unicode) { + for (var i = 0; i < unicodeRanges.length; i += 1) { + var range = unicodeRanges[i]; + if (unicode >= range.begin && unicode < range.end) { + return i; + } + } + return -1; +} +function parseOS2Table(data2, start) { + var os22 = {}; + var p2 = new parse.Parser(data2, start); + os22.version = p2.parseUShort(); + os22.xAvgCharWidth = p2.parseShort(); + os22.usWeightClass = p2.parseUShort(); + os22.usWidthClass = p2.parseUShort(); + os22.fsType = p2.parseUShort(); + os22.ySubscriptXSize = p2.parseShort(); + os22.ySubscriptYSize = p2.parseShort(); + os22.ySubscriptXOffset = p2.parseShort(); + os22.ySubscriptYOffset = p2.parseShort(); + os22.ySuperscriptXSize = p2.parseShort(); + os22.ySuperscriptYSize = p2.parseShort(); + os22.ySuperscriptXOffset = p2.parseShort(); + os22.ySuperscriptYOffset = p2.parseShort(); + os22.yStrikeoutSize = p2.parseShort(); + os22.yStrikeoutPosition = p2.parseShort(); + os22.sFamilyClass = p2.parseShort(); + os22.panose = []; + for (var i = 0; i < 10; i++) { + os22.panose[i] = p2.parseByte(); + } + os22.ulUnicodeRange1 = p2.parseULong(); + os22.ulUnicodeRange2 = p2.parseULong(); + os22.ulUnicodeRange3 = p2.parseULong(); + os22.ulUnicodeRange4 = p2.parseULong(); + os22.achVendID = String.fromCharCode(p2.parseByte(), p2.parseByte(), p2.parseByte(), p2.parseByte()); + os22.fsSelection = p2.parseUShort(); + os22.usFirstCharIndex = p2.parseUShort(); + os22.usLastCharIndex = p2.parseUShort(); + os22.sTypoAscender = p2.parseShort(); + os22.sTypoDescender = p2.parseShort(); + os22.sTypoLineGap = p2.parseShort(); + os22.usWinAscent = p2.parseUShort(); + os22.usWinDescent = p2.parseUShort(); + if (os22.version >= 1) { + os22.ulCodePageRange1 = p2.parseULong(); + os22.ulCodePageRange2 = p2.parseULong(); + } + if (os22.version >= 2) { + os22.sxHeight = p2.parseShort(); + os22.sCapHeight = p2.parseShort(); + os22.usDefaultChar = p2.parseUShort(); + os22.usBreakChar = p2.parseUShort(); + os22.usMaxContent = p2.parseUShort(); + } + return os22; +} +function makeOS2Table(options) { + return new table.Table("OS/2", [ + { name: "version", type: "USHORT", value: 3 }, + { name: "xAvgCharWidth", type: "SHORT", value: 0 }, + { name: "usWeightClass", type: "USHORT", value: 0 }, + { name: "usWidthClass", type: "USHORT", value: 0 }, + { name: "fsType", type: "USHORT", value: 0 }, + { name: "ySubscriptXSize", type: "SHORT", value: 650 }, + { name: "ySubscriptYSize", type: "SHORT", value: 699 }, + { name: "ySubscriptXOffset", type: "SHORT", value: 0 }, + { name: "ySubscriptYOffset", type: "SHORT", value: 140 }, + { name: "ySuperscriptXSize", type: "SHORT", value: 650 }, + { name: "ySuperscriptYSize", type: "SHORT", value: 699 }, + { name: "ySuperscriptXOffset", type: "SHORT", value: 0 }, + { name: "ySuperscriptYOffset", type: "SHORT", value: 479 }, + { name: "yStrikeoutSize", type: "SHORT", value: 49 }, + { name: "yStrikeoutPosition", type: "SHORT", value: 258 }, + { name: "sFamilyClass", type: "SHORT", value: 0 }, + { name: "bFamilyType", type: "BYTE", value: 0 }, + { name: "bSerifStyle", type: "BYTE", value: 0 }, + { name: "bWeight", type: "BYTE", value: 0 }, + { name: "bProportion", type: "BYTE", value: 0 }, + { name: "bContrast", type: "BYTE", value: 0 }, + { name: "bStrokeVariation", type: "BYTE", value: 0 }, + { name: "bArmStyle", type: "BYTE", value: 0 }, + { name: "bLetterform", type: "BYTE", value: 0 }, + { name: "bMidline", type: "BYTE", value: 0 }, + { name: "bXHeight", type: "BYTE", value: 0 }, + { name: "ulUnicodeRange1", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange2", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange3", type: "ULONG", value: 0 }, + { name: "ulUnicodeRange4", type: "ULONG", value: 0 }, + { name: "achVendID", type: "CHARARRAY", value: "XXXX" }, + { name: "fsSelection", type: "USHORT", value: 0 }, + { name: "usFirstCharIndex", type: "USHORT", value: 0 }, + { name: "usLastCharIndex", type: "USHORT", value: 0 }, + { name: "sTypoAscender", type: "SHORT", value: 0 }, + { name: "sTypoDescender", type: "SHORT", value: 0 }, + { name: "sTypoLineGap", type: "SHORT", value: 0 }, + { name: "usWinAscent", type: "USHORT", value: 0 }, + { name: "usWinDescent", type: "USHORT", value: 0 }, + { name: "ulCodePageRange1", type: "ULONG", value: 0 }, + { name: "ulCodePageRange2", type: "ULONG", value: 0 }, + { name: "sxHeight", type: "SHORT", value: 0 }, + { name: "sCapHeight", type: "SHORT", value: 0 }, + { name: "usDefaultChar", type: "USHORT", value: 0 }, + { name: "usBreakChar", type: "USHORT", value: 0 }, + { name: "usMaxContext", type: "USHORT", value: 0 } + ], options); +} +var os2 = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange }; +function parsePostTable(data2, start) { + var post2 = {}; + var p2 = new parse.Parser(data2, start); + post2.version = p2.parseVersion(); + post2.italicAngle = p2.parseFixed(); + post2.underlinePosition = p2.parseShort(); + post2.underlineThickness = p2.parseShort(); + post2.isFixedPitch = p2.parseULong(); + post2.minMemType42 = p2.parseULong(); + post2.maxMemType42 = p2.parseULong(); + post2.minMemType1 = p2.parseULong(); + post2.maxMemType1 = p2.parseULong(); + switch (post2.version) { + case 1: + post2.names = standardNames.slice(); + break; + case 2: + post2.numberOfGlyphs = p2.parseUShort(); + post2.glyphNameIndex = new Array(post2.numberOfGlyphs); + for (var i = 0; i < post2.numberOfGlyphs; i++) { + post2.glyphNameIndex[i] = p2.parseUShort(); + } + post2.names = []; + for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) { + if (post2.glyphNameIndex[i$1] >= standardNames.length) { + var nameLength = p2.parseChar(); + post2.names.push(p2.parseString(nameLength)); + } + } + break; + case 2.5: + post2.numberOfGlyphs = p2.parseUShort(); + post2.offset = new Array(post2.numberOfGlyphs); + for (var i$2 = 0; i$2 < post2.numberOfGlyphs; i$2++) { + post2.offset[i$2] = p2.parseChar(); + } + break; + } + return post2; +} +function makePostTable() { + return new table.Table("post", [ + { name: "version", type: "FIXED", value: 196608 }, + { name: "italicAngle", type: "FIXED", value: 0 }, + { name: "underlinePosition", type: "FWORD", value: 0 }, + { name: "underlineThickness", type: "FWORD", value: 0 }, + { name: "isFixedPitch", type: "ULONG", value: 0 }, + { name: "minMemType42", type: "ULONG", value: 0 }, + { name: "maxMemType42", type: "ULONG", value: 0 }, + { name: "minMemType1", type: "ULONG", value: 0 }, + { name: "maxMemType1", type: "ULONG", value: 0 } + ]); +} +var post = { parse: parsePostTable, make: makePostTable }; +var subtableParsers = new Array(9); +subtableParsers[1] = function parseLookup1() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + deltaGlyphId: this.parseUShort() + }; + } else if (substFormat === 2) { + return { + substFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + substitute: this.parseOffset16List() + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 1 format must be 1 or 2."); +}; +subtableParsers[2] = function parseLookup2() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Multiple Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + sequences: this.parseListOfLists() + }; +}; +subtableParsers[3] = function parseLookup3() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Alternate Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + alternateSets: this.parseListOfLists() + }; +}; +subtableParsers[4] = function parseLookup4() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB ligature table identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + ligatureSets: this.parseListOfLists(function() { + return { + ligGlyph: this.parseUShort(), + components: this.parseUShortList(this.parseUShort() - 1) + }; + }) + }; +}; +var lookupRecordDesc = { + sequenceIndex: Parser2.uShort, + lookupListIndex: Parser2.uShort +}; +subtableParsers[5] = function parseLookup5() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + ruleSets: this.parseListOfLists(function() { + var glyphCount2 = this.parseUShort(); + var substCount2 = this.parseUShort(); + return { + input: this.parseUShortList(glyphCount2 - 1), + lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 2) { + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + classDef: this.parsePointer(Parser2.classDef), + classSets: this.parseListOfLists(function() { + var glyphCount2 = this.parseUShort(); + var substCount2 = this.parseUShort(); + return { + classes: this.parseUShortList(glyphCount2 - 1), + lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 3) { + var glyphCount = this.parseUShort(); + var substCount = this.parseUShort(); + return { + substFormat, + coverages: this.parseList(glyphCount, Parser2.pointer(Parser2.coverage)), + lookupRecords: this.parseRecordList(substCount, lookupRecordDesc) + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 5 format must be 1, 2 or 3."); +}; +subtableParsers[6] = function parseLookup6() { + var start = this.offset + this.relativeOffset; + var substFormat = this.parseUShort(); + if (substFormat === 1) { + return { + substFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + chainRuleSets: this.parseListOfLists(function() { + return { + backtrack: this.parseUShortList(), + input: this.parseUShortList(this.parseShort() - 1), + lookahead: this.parseUShortList(), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 2) { + return { + substFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + backtrackClassDef: this.parsePointer(Parser2.classDef), + inputClassDef: this.parsePointer(Parser2.classDef), + lookaheadClassDef: this.parsePointer(Parser2.classDef), + chainClassSet: this.parseListOfLists(function() { + return { + backtrack: this.parseUShortList(), + input: this.parseUShortList(this.parseShort() - 1), + lookahead: this.parseUShortList(), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + }) + }; + } else if (substFormat === 3) { + return { + substFormat: 3, + backtrackCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + inputCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookaheadCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookupRecords: this.parseRecordList(lookupRecordDesc) + }; + } + check.assert(false, "0x" + start.toString(16) + ": lookup type 6 format must be 1, 2 or 3."); +}; +subtableParsers[7] = function parseLookup7() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Extension Substitution subtable identifier-format must be 1"); + var extensionLookupType = this.parseUShort(); + var extensionParser = new Parser2(this.data, this.offset + this.parseULong()); + return { + substFormat: 1, + lookupType: extensionLookupType, + extension: subtableParsers[extensionLookupType].call(extensionParser) + }; +}; +subtableParsers[8] = function parseLookup8() { + var substFormat = this.parseUShort(); + check.argument(substFormat === 1, "GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1"); + return { + substFormat, + coverage: this.parsePointer(Parser2.coverage), + backtrackCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + lookaheadCoverage: this.parseList(Parser2.pointer(Parser2.coverage)), + substitutes: this.parseUShortList() + }; +}; +function parseGsubTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GSUB table version."); + if (tableVersion === 1) { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers) + }; + } else { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers), + variations: p2.parseFeatureVariationsList() + }; + } +} +var subtableMakers = new Array(9); +subtableMakers[1] = function makeLookup1(subtable) { + if (subtable.substFormat === 1) { + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) }, + { name: "deltaGlyphID", type: "USHORT", value: subtable.deltaGlyphId } + ]); + } else { + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 2 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.ushortList("substitute", subtable.substitute))); + } +}; +subtableMakers[2] = function makeLookup2(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 2 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("seqSet", subtable.sequences, function(sequenceSet) { + return new table.Table("sequenceSetTable", table.ushortList("sequence", sequenceSet)); + }))); +}; +subtableMakers[3] = function makeLookup3(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 3 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("altSet", subtable.alternateSets, function(alternateSet) { + return new table.Table("alternateSetTable", table.ushortList("alternate", alternateSet)); + }))); +}; +subtableMakers[4] = function makeLookup4(subtable) { + check.assert(subtable.substFormat === 1, "Lookup type 4 substFormat must be 1."); + return new table.Table("substitutionTable", [ + { name: "substFormat", type: "USHORT", value: 1 }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("ligSet", subtable.ligatureSets, function(ligatureSet) { + return new table.Table("ligatureSetTable", table.tableList("ligature", ligatureSet, function(ligature) { + return new table.Table( + "ligatureTable", + [{ name: "ligGlyph", type: "USHORT", value: ligature.ligGlyph }].concat(table.ushortList("component", ligature.components, ligature.components.length + 1)) + ); + })); + }))); +}; +subtableMakers[6] = function makeLookup6(subtable) { + if (subtable.substFormat === 1) { + var returnTable = new table.Table("chainContextTable", [ + { name: "substFormat", type: "USHORT", value: subtable.substFormat }, + { name: "coverage", type: "TABLE", value: new table.Coverage(subtable.coverage) } + ].concat(table.tableList("chainRuleSet", subtable.chainRuleSets, function(chainRuleSet) { + return new table.Table("chainRuleSetTable", table.tableList("chainRule", chainRuleSet, function(chainRule) { + var tableData2 = table.ushortList("backtrackGlyph", chainRule.backtrack, chainRule.backtrack.length).concat(table.ushortList("inputGlyph", chainRule.input, chainRule.input.length + 1)).concat(table.ushortList("lookaheadGlyph", chainRule.lookahead, chainRule.lookahead.length)).concat(table.ushortList("substitution", [], chainRule.lookupRecords.length)); + chainRule.lookupRecords.forEach(function(record, i) { + tableData2 = tableData2.concat({ name: "sequenceIndex" + i, type: "USHORT", value: record.sequenceIndex }).concat({ name: "lookupListIndex" + i, type: "USHORT", value: record.lookupListIndex }); + }); + return new table.Table("chainRuleTable", tableData2); + })); + }))); + return returnTable; + } else if (subtable.substFormat === 2) { + check.assert(false, "lookup type 6 format 2 is not yet supported."); + } else if (subtable.substFormat === 3) { + var tableData = [ + { name: "substFormat", type: "USHORT", value: subtable.substFormat } + ]; + tableData.push({ name: "backtrackGlyphCount", type: "USHORT", value: subtable.backtrackCoverage.length }); + subtable.backtrackCoverage.forEach(function(coverage, i) { + tableData.push({ name: "backtrackCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "inputGlyphCount", type: "USHORT", value: subtable.inputCoverage.length }); + subtable.inputCoverage.forEach(function(coverage, i) { + tableData.push({ name: "inputCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "lookaheadGlyphCount", type: "USHORT", value: subtable.lookaheadCoverage.length }); + subtable.lookaheadCoverage.forEach(function(coverage, i) { + tableData.push({ name: "lookaheadCoverage" + i, type: "TABLE", value: new table.Coverage(coverage) }); + }); + tableData.push({ name: "substitutionCount", type: "USHORT", value: subtable.lookupRecords.length }); + subtable.lookupRecords.forEach(function(record, i) { + tableData = tableData.concat({ name: "sequenceIndex" + i, type: "USHORT", value: record.sequenceIndex }).concat({ name: "lookupListIndex" + i, type: "USHORT", value: record.lookupListIndex }); + }); + var returnTable$1 = new table.Table("chainContextTable", tableData); + return returnTable$1; + } + check.assert(false, "lookup type 6 format must be 1, 2 or 3."); +}; +function makeGsubTable(gsub2) { + return new table.Table("GSUB", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "scripts", type: "TABLE", value: new table.ScriptList(gsub2.scripts) }, + { name: "features", type: "TABLE", value: new table.FeatureList(gsub2.features) }, + { name: "lookups", type: "TABLE", value: new table.LookupList(gsub2.lookups, subtableMakers) } + ]); +} +var gsub = { parse: parseGsubTable, make: makeGsubTable }; +function parseMetaTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 1, "Unsupported META table version."); + p2.parseULong(); + p2.parseULong(); + var numDataMaps = p2.parseULong(); + var tags = {}; + for (var i = 0; i < numDataMaps; i++) { + var tag = p2.parseTag(); + var dataOffset = p2.parseULong(); + var dataLength = p2.parseULong(); + var text2 = decode.UTF8(data2, start + dataOffset, dataLength); + tags[tag] = text2; + } + return tags; +} +function makeMetaTable(tags) { + var numTags = Object.keys(tags).length; + var stringPool = ""; + var stringPoolOffset = 16 + numTags * 12; + var result = new table.Table("meta", [ + { name: "version", type: "ULONG", value: 1 }, + { name: "flags", type: "ULONG", value: 0 }, + { name: "offset", type: "ULONG", value: stringPoolOffset }, + { name: "numTags", type: "ULONG", value: numTags } + ]); + for (var tag in tags) { + var pos = stringPool.length; + stringPool += tags[tag]; + result.fields.push({ name: "tag " + tag, type: "TAG", value: tag }); + result.fields.push({ name: "offset " + tag, type: "ULONG", value: stringPoolOffset + pos }); + result.fields.push({ name: "length " + tag, type: "ULONG", value: tags[tag].length }); + } + result.fields.push({ name: "stringPool", type: "CHARARRAY", value: stringPool }); + return result; +} +var meta = { parse: parseMetaTable, make: makeMetaTable }; +function parseColrTable(data2, start) { + var p2 = new Parser2(data2, start); + var version = p2.parseUShort(); + check.argument(version === 0, "Only COLRv0 supported."); + var numBaseGlyphRecords = p2.parseUShort(); + var baseGlyphRecordsOffset = p2.parseOffset32(); + var layerRecordsOffset = p2.parseOffset32(); + var numLayerRecords = p2.parseUShort(); + p2.relativeOffset = baseGlyphRecordsOffset; + var baseGlyphRecords = p2.parseRecordList(numBaseGlyphRecords, { + glyphID: Parser2.uShort, + firstLayerIndex: Parser2.uShort, + numLayers: Parser2.uShort + }); + p2.relativeOffset = layerRecordsOffset; + var layerRecords = p2.parseRecordList(numLayerRecords, { + glyphID: Parser2.uShort, + paletteIndex: Parser2.uShort + }); + return { + version, + baseGlyphRecords, + layerRecords + }; +} +function makeColrTable(ref) { + var version = ref.version; + if (version === void 0) version = 0; + var baseGlyphRecords = ref.baseGlyphRecords; + if (baseGlyphRecords === void 0) baseGlyphRecords = []; + var layerRecords = ref.layerRecords; + if (layerRecords === void 0) layerRecords = []; + check.argument(version === 0, "Only COLRv0 supported."); + var baseGlyphRecordsOffset = 14; + var layerRecordsOffset = baseGlyphRecordsOffset + baseGlyphRecords.length * 6; + return new table.Table("COLR", [ + { name: "version", type: "USHORT", value: version }, + { name: "numBaseGlyphRecords", type: "USHORT", value: baseGlyphRecords.length }, + { name: "baseGlyphRecordsOffset", type: "ULONG", value: baseGlyphRecordsOffset }, + { name: "layerRecordsOffset", type: "ULONG", value: layerRecordsOffset }, + { name: "numLayerRecords", type: "USHORT", value: layerRecords.length } + ].concat( + baseGlyphRecords.map(function(glyph, i) { + return [ + { name: "glyphID_" + i, type: "USHORT", value: glyph.glyphID }, + { name: "firstLayerIndex_" + i, type: "USHORT", value: glyph.firstLayerIndex }, + { name: "numLayers_" + i, type: "USHORT", value: glyph.numLayers } + ]; + }).flat(), + layerRecords.map(function(layer, i) { + return [ + { name: "LayerGlyphID_" + i, type: "USHORT", value: layer.glyphID }, + { name: "paletteIndex_" + i, type: "USHORT", value: layer.paletteIndex } + ]; + }).flat() + )); +} +var colr = { parse: parseColrTable, make: makeColrTable }; +function parseCpalTable(data2, start) { + var p2 = new Parser2(data2, start); + var version = p2.parseShort(); + var numPaletteEntries = p2.parseShort(); + var numPalettes = p2.parseShort(); + var numColorRecords = p2.parseShort(); + var colorRecordsArrayOffset = p2.parseOffset32(); + var colorRecordIndices = p2.parseUShortList(numPalettes); + p2.relativeOffset = colorRecordsArrayOffset; + var colorRecords = p2.parseULongList(numColorRecords); + return { + version, + numPaletteEntries, + colorRecords, + colorRecordIndices + }; +} +function makeCpalTable(ref) { + var version = ref.version; + if (version === void 0) version = 0; + var numPaletteEntries = ref.numPaletteEntries; + if (numPaletteEntries === void 0) numPaletteEntries = 0; + var colorRecords = ref.colorRecords; + if (colorRecords === void 0) colorRecords = []; + var colorRecordIndices = ref.colorRecordIndices; + if (colorRecordIndices === void 0) colorRecordIndices = [0]; + check.argument(version === 0, "Only CPALv0 are supported."); + check.argument(colorRecords.length, "No colorRecords given."); + check.argument(colorRecordIndices.length, "No colorRecordIndices given."); + check.argument(!numPaletteEntries && colorRecordIndices.length == 1, "Can't infer numPaletteEntries on multiple colorRecordIndices"); + return new table.Table("CPAL", [ + { name: "version", type: "USHORT", value: version }, + { name: "numPaletteEntries", type: "USHORT", value: numPaletteEntries || colorRecords.length }, + { name: "numPalettes", type: "USHORT", value: colorRecordIndices.length }, + { name: "numColorRecords", type: "USHORT", value: colorRecords.length }, + { name: "colorRecordsArrayOffset", type: "ULONG", value: 12 + 2 * colorRecordIndices.length } + ].concat( + colorRecordIndices.map(function(palette, i) { + return { name: "colorRecordIndices_" + i, type: "USHORT", value: palette }; + }), + colorRecords.map(function(color, i) { + return { name: "colorRecords_" + i, type: "ULONG", value: color }; + }) + )); +} +var cpal = { parse: parseCpalTable, make: makeCpalTable }; +function log2(v) { + return Math.log(v) / Math.log(2) | 0; +} +function computeCheckSum(bytes) { + while (bytes.length % 4 !== 0) { + bytes.push(0); + } + var sum2 = 0; + for (var i = 0; i < bytes.length; i += 4) { + sum2 += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3]; + } + sum2 %= Math.pow(2, 32); + return sum2; +} +function makeTableRecord(tag, checkSum, offset, length2) { + return new table.Record("Table Record", [ + { name: "tag", type: "TAG", value: tag !== void 0 ? tag : "" }, + { name: "checkSum", type: "ULONG", value: checkSum !== void 0 ? checkSum : 0 }, + { name: "offset", type: "ULONG", value: offset !== void 0 ? offset : 0 }, + { name: "length", type: "ULONG", value: length2 !== void 0 ? length2 : 0 } + ]); +} +function makeSfntTable(tables) { + var sfnt2 = new table.Table("sfnt", [ + { name: "version", type: "TAG", value: "OTTO" }, + { name: "numTables", type: "USHORT", value: 0 }, + { name: "searchRange", type: "USHORT", value: 0 }, + { name: "entrySelector", type: "USHORT", value: 0 }, + { name: "rangeShift", type: "USHORT", value: 0 } + ]); + sfnt2.tables = tables; + sfnt2.numTables = tables.length; + var highestPowerOf2 = Math.pow(2, log2(sfnt2.numTables)); + sfnt2.searchRange = 16 * highestPowerOf2; + sfnt2.entrySelector = log2(highestPowerOf2); + sfnt2.rangeShift = sfnt2.numTables * 16 - sfnt2.searchRange; + var recordFields = []; + var tableFields = []; + var offset = sfnt2.sizeOf() + makeTableRecord().sizeOf() * sfnt2.numTables; + while (offset % 4 !== 0) { + offset += 1; + tableFields.push({ name: "padding", type: "BYTE", value: 0 }); + } + for (var i = 0; i < tables.length; i += 1) { + var t3 = tables[i]; + check.argument(t3.tableName.length === 4, "Table name" + t3.tableName + " is invalid."); + var tableLength = t3.sizeOf(); + var tableRecord = makeTableRecord(t3.tableName, computeCheckSum(t3.encode()), offset, tableLength); + recordFields.push({ name: tableRecord.tag + " Table Record", type: "RECORD", value: tableRecord }); + tableFields.push({ name: t3.tableName + " table", type: "RECORD", value: t3 }); + offset += tableLength; + check.argument(!isNaN(offset), "Something went wrong calculating the offset."); + while (offset % 4 !== 0) { + offset += 1; + tableFields.push({ name: "padding", type: "BYTE", value: 0 }); + } + } + recordFields.sort(function(r1, r2) { + if (r1.value.tag > r2.value.tag) { + return 1; + } else { + return -1; + } + }); + sfnt2.fields = sfnt2.fields.concat(recordFields); + sfnt2.fields = sfnt2.fields.concat(tableFields); + return sfnt2; +} +function metricsForChar(font, chars, notFoundMetrics) { + for (var i = 0; i < chars.length; i += 1) { + var glyphIndex = font.charToGlyphIndex(chars[i]); + if (glyphIndex > 0) { + var glyph = font.glyphs.get(glyphIndex); + return glyph.getMetrics(); + } + } + return notFoundMetrics; +} +function average(vs) { + var sum2 = 0; + for (var i = 0; i < vs.length; i += 1) { + sum2 += vs[i]; + } + return sum2 / vs.length; +} +function fontToSfntTable(font) { + var xMins = []; + var yMins = []; + var xMaxs = []; + var yMaxs = []; + var advanceWidths = []; + var leftSideBearings = []; + var rightSideBearings = []; + var firstCharIndex; + var lastCharIndex = 0; + var ulUnicodeRange1 = 0; + var ulUnicodeRange2 = 0; + var ulUnicodeRange3 = 0; + var ulUnicodeRange4 = 0; + for (var i = 0; i < font.glyphs.length; i += 1) { + var glyph = font.glyphs.get(i); + var unicode = glyph.unicode | 0; + if (isNaN(glyph.advanceWidth)) { + throw new Error("Glyph " + glyph.name + " (" + i + "): advanceWidth is not a number."); + } + if (firstCharIndex > unicode || firstCharIndex === void 0) { + if (unicode > 0) { + firstCharIndex = unicode; + } + } + if (lastCharIndex < unicode) { + lastCharIndex = unicode; + } + var position2 = os2.getUnicodeRange(unicode); + if (position2 < 32) { + ulUnicodeRange1 |= 1 << position2; + } else if (position2 < 64) { + ulUnicodeRange2 |= 1 << position2 - 32; + } else if (position2 < 96) { + ulUnicodeRange3 |= 1 << position2 - 64; + } else if (position2 < 123) { + ulUnicodeRange4 |= 1 << position2 - 96; + } else { + throw new Error("Unicode ranges bits > 123 are reserved for internal usage"); + } + if (glyph.name === ".notdef") { + continue; + } + var metrics = glyph.getMetrics(); + xMins.push(metrics.xMin); + yMins.push(metrics.yMin); + xMaxs.push(metrics.xMax); + yMaxs.push(metrics.yMax); + leftSideBearings.push(metrics.leftSideBearing); + rightSideBearings.push(metrics.rightSideBearing); + advanceWidths.push(glyph.advanceWidth); + } + var globals = { + xMin: Math.min.apply(null, xMins), + yMin: Math.min.apply(null, yMins), + xMax: Math.max.apply(null, xMaxs), + yMax: Math.max.apply(null, yMaxs), + advanceWidthMax: Math.max.apply(null, advanceWidths), + advanceWidthAvg: average(advanceWidths), + minLeftSideBearing: Math.min.apply(null, leftSideBearings), + maxLeftSideBearing: Math.max.apply(null, leftSideBearings), + minRightSideBearing: Math.min.apply(null, rightSideBearings) + }; + globals.ascender = font.ascender; + globals.descender = font.descender; + var headTable = head.make({ + flags: 3, + // 00000011 (baseline for font at y=0; left sidebearing point at x=0) + unitsPerEm: font.unitsPerEm, + xMin: globals.xMin, + yMin: globals.yMin, + xMax: globals.xMax, + yMax: globals.yMax, + lowestRecPPEM: 3, + createdTimestamp: font.createdTimestamp + }); + var hheaTable = hhea.make({ + ascender: globals.ascender, + descender: globals.descender, + advanceWidthMax: globals.advanceWidthMax, + minLeftSideBearing: globals.minLeftSideBearing, + minRightSideBearing: globals.minRightSideBearing, + xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin), + numberOfHMetrics: font.glyphs.length + }); + var maxpTable = maxp.make(font.glyphs.length); + var os2Table = os2.make(Object.assign({ + xAvgCharWidth: Math.round(globals.advanceWidthAvg), + usFirstCharIndex: firstCharIndex, + usLastCharIndex: lastCharIndex, + ulUnicodeRange1, + ulUnicodeRange2, + ulUnicodeRange3, + ulUnicodeRange4, + // See http://typophile.com/node/13081 for more info on vertical metrics. + // We get metrics for typical characters (such as "x" for xHeight). + // We provide some fallback characters if characters are unavailable: their + // ordering was chosen experimentally. + sTypoAscender: globals.ascender, + sTypoDescender: globals.descender, + sTypoLineGap: 0, + usWinAscent: globals.yMax, + usWinDescent: Math.abs(globals.yMin), + ulCodePageRange1: 1, + // FIXME: hard-code Latin 1 support for now + sxHeight: metricsForChar(font, "xyvw", { yMax: Math.round(globals.ascender / 2) }).yMax, + sCapHeight: metricsForChar(font, "HIKLEFJMNTZBDPRAGOQSUVWXY", globals).yMax, + usDefaultChar: font.hasChar(" ") ? 32 : 0, + // Use space as the default character, if available. + usBreakChar: font.hasChar(" ") ? 32 : 0 + // Use space as the break character, if available. + }, font.tables.os2)); + var hmtxTable = hmtx.make(font.glyphs); + var cmapTable = cmap.make(font.glyphs); + var englishFamilyName = font.getEnglishName("fontFamily"); + var englishStyleName = font.getEnglishName("fontSubfamily"); + var englishFullName = englishFamilyName + " " + englishStyleName; + var postScriptName = font.getEnglishName("postScriptName"); + if (!postScriptName) { + postScriptName = englishFamilyName.replace(/\s/g, "") + "-" + englishStyleName; + } + var names = {}; + for (var n2 in font.names) { + names[n2] = font.names[n2]; + } + if (!names.uniqueID) { + names.uniqueID = { en: font.getEnglishName("manufacturer") + ":" + englishFullName }; + } + if (!names.postScriptName) { + names.postScriptName = { en: postScriptName }; + } + if (!names.preferredFamily) { + names.preferredFamily = font.names.fontFamily; + } + if (!names.preferredSubfamily) { + names.preferredSubfamily = font.names.fontSubfamily; + } + var languageTags = []; + var nameTable = _name.make(names, languageTags); + var ltagTable = languageTags.length > 0 ? ltag.make(languageTags) : void 0; + var postTable = post.make(); + var cffTable = cff.make(font.glyphs, { + version: font.getEnglishName("version"), + fullName: englishFullName, + familyName: englishFamilyName, + weightName: englishStyleName, + postScriptName, + unitsPerEm: font.unitsPerEm, + fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax] + }); + var metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta.make(font.metas) : void 0; + var tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable]; + if (ltagTable) { + tables.push(ltagTable); + } + if (font.tables.gsub) { + tables.push(gsub.make(font.tables.gsub)); + } + if (font.tables.cpal) { + tables.push(cpal.make(font.tables.cpal)); + } + if (font.tables.colr) { + tables.push(colr.make(font.tables.colr)); + } + if (metaTable) { + tables.push(metaTable); + } + var sfntTable = makeSfntTable(tables); + var bytes = sfntTable.encode(); + var checkSum = computeCheckSum(bytes); + var tableFields = sfntTable.fields; + var checkSumAdjusted = false; + for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) { + if (tableFields[i$1].name === "head table") { + tableFields[i$1].value.checkSumAdjustment = 2981146554 - checkSum; + checkSumAdjusted = true; + break; + } + } + if (!checkSumAdjusted) { + throw new Error("Could not find head table with checkSum to adjust."); + } + return sfntTable; +} +var sfnt = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum }; +function searchTag(arr, tag) { + var imin = 0; + var imax = arr.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + var val2 = arr[imid].tag; + if (val2 === tag) { + return imid; + } else if (val2 < tag) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + return -imin - 1; +} +function binSearch(arr, value2) { + var imin = 0; + var imax = arr.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + var val2 = arr[imid]; + if (val2 === value2) { + return imid; + } else if (val2 < value2) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + return -imin - 1; +} +function searchRange(ranges, value2) { + var range; + var imin = 0; + var imax = ranges.length - 1; + while (imin <= imax) { + var imid = imin + imax >>> 1; + range = ranges[imid]; + var start = range.start; + if (start === value2) { + return range; + } else if (start < value2) { + imin = imid + 1; + } else { + imax = imid - 1; + } + } + if (imin > 0) { + range = ranges[imin - 1]; + if (value2 > range.end) { + return 0; + } + return range; + } +} +function Layout(font, tableName) { + this.font = font; + this.tableName = tableName; +} +Layout.prototype = { + /** + * Binary search an object by "tag" property + * @instance + * @function searchTag + * @memberof opentype.Layout + * @param {Array} arr + * @param {string} tag + * @return {number} + */ + searchTag, + /** + * Binary search in a list of numbers + * @instance + * @function binSearch + * @memberof opentype.Layout + * @param {Array} arr + * @param {number} value + * @return {number} + */ + binSearch, + /** + * Get or create the Layout table (GSUB, GPOS etc). + * @param {boolean} create - Whether to create a new one. + * @return {Object} The GSUB or GPOS table. + */ + getTable: function(create) { + var layout = this.font.tables[this.tableName]; + if (!layout && create) { + layout = this.font.tables[this.tableName] = this.createDefaultTable(); + } + return layout; + }, + /** + * Returns all scripts in the substitution table. + * @instance + * @return {Array} + */ + getScriptNames: function() { + var layout = this.getTable(); + if (!layout) { + return []; + } + return layout.scripts.map(function(script) { + return script.tag; + }); + }, + /** + * Returns the best bet for a script name. + * Returns 'DFLT' if it exists. + * If not, returns 'latn' if it exists. + * If neither exist, returns undefined. + */ + getDefaultScriptName: function() { + var layout = this.getTable(); + if (!layout) { + return; + } + var hasLatn = false; + for (var i = 0; i < layout.scripts.length; i++) { + var name2 = layout.scripts[i].tag; + if (name2 === "DFLT") { + return name2; + } + if (name2 === "latn") { + hasLatn = true; + } + } + if (hasLatn) { + return "latn"; + } + }, + /** + * Returns all LangSysRecords in the given script. + * @instance + * @param {string} [script='DFLT'] + * @param {boolean} create - forces the creation of this script table if it doesn't exist. + * @return {Object} An object with tag and script properties. + */ + getScriptTable: function(script, create) { + var layout = this.getTable(create); + if (layout) { + script = script || "DFLT"; + var scripts = layout.scripts; + var pos = searchTag(layout.scripts, script); + if (pos >= 0) { + return scripts[pos].script; + } else if (create) { + var scr = { + tag: script, + script: { + defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }, + langSysRecords: [] + } + }; + scripts.splice(-1 - pos, 0, scr); + return scr.script; + } + } + }, + /** + * Returns a language system table + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist. + * @return {Object} + */ + getLangSysTable: function(script, language, create) { + var scriptTable = this.getScriptTable(script, create); + if (scriptTable) { + if (!language || language === "dflt" || language === "DFLT") { + return scriptTable.defaultLangSys; + } + var pos = searchTag(scriptTable.langSysRecords, language); + if (pos >= 0) { + return scriptTable.langSysRecords[pos].langSys; + } else if (create) { + var langSysRecord = { + tag: language, + langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] } + }; + scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord); + return langSysRecord.langSys; + } + } + }, + /** + * Get a specific feature table. + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm + * @param {boolean} create - forces the creation of the feature table if it doesn't exist. + * @return {Object} + */ + getFeatureTable: function(script, language, feature, create) { + var langSysTable2 = this.getLangSysTable(script, language, create); + if (langSysTable2) { + var featureRecord; + var featIndexes = langSysTable2.featureIndexes; + var allFeatures = this.font.tables[this.tableName].features; + for (var i = 0; i < featIndexes.length; i++) { + featureRecord = allFeatures[featIndexes[i]]; + if (featureRecord.tag === feature) { + return featureRecord.feature; + } + } + if (create) { + var index2 = allFeatures.length; + check.assert(index2 === 0 || feature >= allFeatures[index2 - 1].tag, "Features must be added in alphabetical order."); + featureRecord = { + tag: feature, + feature: { params: 0, lookupListIndexes: [] } + }; + allFeatures.push(featureRecord); + featIndexes.push(index2); + return featureRecord.feature; + } + } + }, + /** + * Get the lookup tables of a given type for a script/language/feature. + * @instance + * @param {string} [script='DFLT'] + * @param {string} [language='dlft'] + * @param {string} feature - 4-letter feature code + * @param {number} lookupType - 1 to 9 + * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables. + * @return {Object[]} + */ + getLookupTables: function(script, language, feature, lookupType, create) { + var featureTable = this.getFeatureTable(script, language, feature, create); + var tables = []; + if (featureTable) { + var lookupTable; + var lookupListIndexes = featureTable.lookupListIndexes; + var allLookups = this.font.tables[this.tableName].lookups; + for (var i = 0; i < lookupListIndexes.length; i++) { + lookupTable = allLookups[lookupListIndexes[i]]; + if (lookupTable.lookupType === lookupType) { + tables.push(lookupTable); + } + } + if (tables.length === 0 && create) { + lookupTable = { + lookupType, + lookupFlag: 0, + subtables: [], + markFilteringSet: void 0 + }; + var index2 = allLookups.length; + allLookups.push(lookupTable); + lookupListIndexes.push(index2); + return [lookupTable]; + } + } + return tables; + }, + /** + * Find a glyph in a class definition table + * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table + * @param {object} classDefTable - an OpenType Layout class definition table + * @param {number} glyphIndex - the index of the glyph to find + * @returns {number} -1 if not found + */ + getGlyphClass: function(classDefTable, glyphIndex) { + switch (classDefTable.format) { + case 1: + if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) { + return classDefTable.classes[glyphIndex - classDefTable.startGlyph]; + } + return 0; + case 2: + var range = searchRange(classDefTable.ranges, glyphIndex); + return range ? range.classId : 0; + } + }, + /** + * Find a glyph in a coverage table + * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table + * @param {object} coverageTable - an OpenType Layout coverage table + * @param {number} glyphIndex - the index of the glyph to find + * @returns {number} -1 if not found + */ + getCoverageIndex: function(coverageTable, glyphIndex) { + switch (coverageTable.format) { + case 1: + var index2 = binSearch(coverageTable.glyphs, glyphIndex); + return index2 >= 0 ? index2 : -1; + case 2: + var range = searchRange(coverageTable.ranges, glyphIndex); + return range ? range.index + glyphIndex - range.start : -1; + } + }, + /** + * Returns the list of glyph indexes of a coverage table. + * Format 1: the list is stored raw + * Format 2: compact list as range records. + * @instance + * @param {Object} coverageTable + * @return {Array} + */ + expandCoverage: function(coverageTable) { + if (coverageTable.format === 1) { + return coverageTable.glyphs; + } else { + var glyphs = []; + var ranges = coverageTable.ranges; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + var start = range.start; + var end = range.end; + for (var j = start; j <= end; j++) { + glyphs.push(j); + } + } + return glyphs; + } + } +}; +function Position(font) { + Layout.call(this, font, "gpos"); +} +Position.prototype = Layout.prototype; +Position.prototype.init = function() { + var script = this.getDefaultScriptName(); + this.defaultKerningTables = this.getKerningTables(script); +}; +Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) { + for (var i = 0; i < kerningLookups.length; i++) { + var subtables = kerningLookups[i].subtables; + for (var j = 0; j < subtables.length; j++) { + var subtable = subtables[j]; + var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex); + if (covIndex < 0) { + continue; + } + switch (subtable.posFormat) { + case 1: + var pairSet = subtable.pairSets[covIndex]; + for (var k2 = 0; k2 < pairSet.length; k2++) { + var pair = pairSet[k2]; + if (pair.secondGlyph === rightIndex) { + return pair.value1 && pair.value1.xAdvance || 0; + } + } + break; + case 2: + var class1 = this.getGlyphClass(subtable.classDef1, leftIndex); + var class2 = this.getGlyphClass(subtable.classDef2, rightIndex); + var pair$1 = subtable.classRecords[class1][class2]; + return pair$1.value1 && pair$1.value1.xAdvance || 0; + } + } + } + return 0; +}; +Position.prototype.getKerningTables = function(script, language) { + if (this.font.tables.gpos) { + return this.getLookupTables(script, language, "kern", 2); + } +}; +function Substitution(font) { + Layout.call(this, font, "gsub"); +} +function arraysEqual(ar1, ar2) { + var n2 = ar1.length; + if (n2 !== ar2.length) { + return false; + } + for (var i = 0; i < n2; i++) { + if (ar1[i] !== ar2[i]) { + return false; + } + } + return true; +} +function getSubstFormat(lookupTable, format, defaultSubtable) { + var subtables = lookupTable.subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + if (subtable.substFormat === format) { + return subtable; + } + } + if (defaultSubtable) { + subtables.push(defaultSubtable); + return defaultSubtable; + } + return void 0; +} +Substitution.prototype = Layout.prototype; +Substitution.prototype.createDefaultTable = function() { + return { + version: 1, + scripts: [{ + tag: "DFLT", + script: { + defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }, + langSysRecords: [] + } + }], + features: [], + lookups: [] + }; +}; +Substitution.prototype.getSingle = function(feature, script, language) { + var substitutions = []; + var lookupTables = this.getLookupTables(script, language, feature, 1); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var j = void 0; + if (subtable.substFormat === 1) { + var delta = subtable.deltaGlyphId; + for (j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + substitutions.push({ sub: glyph, by: glyph + delta }); + } + } else { + var substitute = subtable.substitute; + for (j = 0; j < glyphs.length; j++) { + substitutions.push({ sub: glyphs[j], by: substitute[j] }); + } + } + } + } + return substitutions; +}; +Substitution.prototype.getMultiple = function(feature, script, language) { + var substitutions = []; + var lookupTables = this.getLookupTables(script, language, feature, 2); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var j = void 0; + for (j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + var replacements = subtable.sequences[j]; + substitutions.push({ sub: glyph, by: replacements }); + } + } + } + return substitutions; +}; +Substitution.prototype.getAlternates = function(feature, script, language) { + var alternates = []; + var lookupTables = this.getLookupTables(script, language, feature, 3); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var alternateSets = subtable.alternateSets; + for (var j = 0; j < glyphs.length; j++) { + alternates.push({ sub: glyphs[j], by: alternateSets[j] }); + } + } + } + return alternates; +}; +Substitution.prototype.getLigatures = function(feature, script, language) { + var ligatures = []; + var lookupTables = this.getLookupTables(script, language, feature, 4); + for (var idx = 0; idx < lookupTables.length; idx++) { + var subtables = lookupTables[idx].subtables; + for (var i = 0; i < subtables.length; i++) { + var subtable = subtables[i]; + var glyphs = this.expandCoverage(subtable.coverage); + var ligatureSets = subtable.ligatureSets; + for (var j = 0; j < glyphs.length; j++) { + var startGlyph = glyphs[j]; + var ligSet = ligatureSets[j]; + for (var k2 = 0; k2 < ligSet.length; k2++) { + var lig = ligSet[k2]; + ligatures.push({ + sub: [startGlyph].concat(lig.components), + by: lig.ligGlyph + }); + } + } + } + } + return ligatures; +}; +Substitution.prototype.addSingle = function(feature, substitution, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0]; + var subtable = getSubstFormat(lookupTable, 2, { + // lookup type 1 subtable, format 2, coverage format 1 + substFormat: 2, + coverage: { format: 1, glyphs: [] }, + substitute: [] + }); + check.assert(subtable.coverage.format === 1, "Single: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.substitute.splice(pos, 0, 0); + } + subtable.substitute[pos] = substitution.by; +}; +Substitution.prototype.addMultiple = function(feature, substitution, script, language) { + check.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: "by" must be an array of two or more ids'); + var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0]; + var subtable = getSubstFormat(lookupTable, 1, { + // lookup type 2 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + sequences: [] + }); + check.assert(subtable.coverage.format === 1, "Multiple: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.sequences.splice(pos, 0, 0); + } + subtable.sequences[pos] = substitution.by; +}; +Substitution.prototype.addAlternate = function(feature, substitution, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0]; + var subtable = getSubstFormat(lookupTable, 1, { + // lookup type 3 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + alternateSets: [] + }); + check.assert(subtable.coverage.format === 1, "Alternate: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = substitution.sub; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos < 0) { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.alternateSets.splice(pos, 0, 0); + } + subtable.alternateSets[pos] = substitution.by; +}; +Substitution.prototype.addLigature = function(feature, ligature, script, language) { + var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0]; + var subtable = lookupTable.subtables[0]; + if (!subtable) { + subtable = { + // lookup type 4 subtable, format 1, coverage format 1 + substFormat: 1, + coverage: { format: 1, glyphs: [] }, + ligatureSets: [] + }; + lookupTable.subtables[0] = subtable; + } + check.assert(subtable.coverage.format === 1, "Ligature: unable to modify coverage table format " + subtable.coverage.format); + var coverageGlyph = ligature.sub[0]; + var ligComponents = ligature.sub.slice(1); + var ligatureTable = { + ligGlyph: ligature.by, + components: ligComponents + }; + var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); + if (pos >= 0) { + var ligatureSet = subtable.ligatureSets[pos]; + for (var i = 0; i < ligatureSet.length; i++) { + if (arraysEqual(ligatureSet[i].components, ligComponents)) { + return; + } + } + ligatureSet.push(ligatureTable); + } else { + pos = -1 - pos; + subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); + subtable.ligatureSets.splice(pos, 0, [ligatureTable]); + } +}; +Substitution.prototype.getFeature = function(feature, script, language) { + if (/ss\d\d/.test(feature)) { + return this.getSingle(feature, script, language); + } + switch (feature) { + case "aalt": + case "salt": + return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language)); + case "dlig": + case "liga": + case "rlig": + return this.getLigatures(feature, script, language); + case "ccmp": + return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language)); + case "stch": + return this.getMultiple(feature, script, language); + } + return void 0; +}; +Substitution.prototype.add = function(feature, sub2, script, language) { + if (/ss\d\d/.test(feature)) { + return this.addSingle(feature, sub2, script, language); + } + switch (feature) { + case "aalt": + case "salt": + if (typeof sub2.by === "number") { + return this.addSingle(feature, sub2, script, language); + } + return this.addAlternate(feature, sub2, script, language); + case "dlig": + case "liga": + case "rlig": + return this.addLigature(feature, sub2, script, language); + case "ccmp": + if (sub2.by instanceof Array) { + return this.addMultiple(feature, sub2, script, language); + } + return this.addLigature(feature, sub2, script, language); + } + return void 0; +}; +function checkArgument(expression, message) { + if (!expression) { + throw message; + } +} +function parseGlyphCoordinate(p2, flag, previousValue, shortVectorBitMask, sameBitMask) { + var v; + if ((flag & shortVectorBitMask) > 0) { + v = p2.parseByte(); + if ((flag & sameBitMask) === 0) { + v = -v; + } + v = previousValue + v; + } else { + if ((flag & sameBitMask) > 0) { + v = previousValue; + } else { + v = previousValue + p2.parseShort(); + } + } + return v; +} +function parseGlyph(glyph, data2, start) { + var p2 = new parse.Parser(data2, start); + glyph.numberOfContours = p2.parseShort(); + glyph._xMin = p2.parseShort(); + glyph._yMin = p2.parseShort(); + glyph._xMax = p2.parseShort(); + glyph._yMax = p2.parseShort(); + var flags; + var flag; + if (glyph.numberOfContours > 0) { + var endPointIndices = glyph.endPointIndices = []; + for (var i = 0; i < glyph.numberOfContours; i += 1) { + endPointIndices.push(p2.parseUShort()); + } + glyph.instructionLength = p2.parseUShort(); + glyph.instructions = []; + for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) { + glyph.instructions.push(p2.parseByte()); + } + var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1; + flags = []; + for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) { + flag = p2.parseByte(); + flags.push(flag); + if ((flag & 8) > 0) { + var repeatCount = p2.parseByte(); + for (var j = 0; j < repeatCount; j += 1) { + flags.push(flag); + i$2 += 1; + } + } + } + check.argument(flags.length === numberOfCoordinates, "Bad flags."); + if (endPointIndices.length > 0) { + var points = []; + var point; + if (numberOfCoordinates > 0) { + for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) { + flag = flags[i$3]; + point = {}; + point.onCurve = !!(flag & 1); + point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0; + points.push(point); + } + var px = 0; + for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) { + flag = flags[i$4]; + point = points[i$4]; + point.x = parseGlyphCoordinate(p2, flag, px, 2, 16); + px = point.x; + } + var py = 0; + for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) { + flag = flags[i$5]; + point = points[i$5]; + point.y = parseGlyphCoordinate(p2, flag, py, 4, 32); + py = point.y; + } + } + glyph.points = points; + } else { + glyph.points = []; + } + } else if (glyph.numberOfContours === 0) { + glyph.points = []; + } else { + glyph.isComposite = true; + glyph.points = []; + glyph.components = []; + var moreComponents = true; + while (moreComponents) { + flags = p2.parseUShort(); + var component = { + glyphIndex: p2.parseUShort(), + xScale: 1, + scale01: 0, + scale10: 0, + yScale: 1, + dx: 0, + dy: 0 + }; + if ((flags & 1) > 0) { + if ((flags & 2) > 0) { + component.dx = p2.parseShort(); + component.dy = p2.parseShort(); + } else { + component.matchedPoints = [p2.parseUShort(), p2.parseUShort()]; + } + } else { + if ((flags & 2) > 0) { + component.dx = p2.parseChar(); + component.dy = p2.parseChar(); + } else { + component.matchedPoints = [p2.parseByte(), p2.parseByte()]; + } + } + if ((flags & 8) > 0) { + component.xScale = component.yScale = p2.parseF2Dot14(); + } else if ((flags & 64) > 0) { + component.xScale = p2.parseF2Dot14(); + component.yScale = p2.parseF2Dot14(); + } else if ((flags & 128) > 0) { + component.xScale = p2.parseF2Dot14(); + component.scale01 = p2.parseF2Dot14(); + component.scale10 = p2.parseF2Dot14(); + component.yScale = p2.parseF2Dot14(); + } + glyph.components.push(component); + moreComponents = !!(flags & 32); + } + if (flags & 256) { + glyph.instructionLength = p2.parseUShort(); + glyph.instructions = []; + for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) { + glyph.instructions.push(p2.parseByte()); + } + } + } +} +function transformPoints(points, transform2) { + var newPoints = []; + for (var i = 0; i < points.length; i += 1) { + var pt = points[i]; + var newPt = { + x: transform2.xScale * pt.x + transform2.scale01 * pt.y + transform2.dx, + y: transform2.scale10 * pt.x + transform2.yScale * pt.y + transform2.dy, + onCurve: pt.onCurve, + lastPointOfContour: pt.lastPointOfContour + }; + newPoints.push(newPt); + } + return newPoints; +} +function getContours(points) { + var contours = []; + var currentContour = []; + for (var i = 0; i < points.length; i += 1) { + var pt = points[i]; + currentContour.push(pt); + if (pt.lastPointOfContour) { + contours.push(currentContour); + currentContour = []; + } + } + check.argument(currentContour.length === 0, "There are still points left in the current contour."); + return contours; +} +function getPath(points) { + var p2 = new Path2(); + if (!points) { + return p2; + } + var contours = getContours(points); + for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) { + var contour = contours[contourIndex]; + var prev = null; + var curr = contour[contour.length - 1]; + var next = contour[0]; + if (curr.onCurve) { + p2.moveTo(curr.x, curr.y); + } else { + if (next.onCurve) { + p2.moveTo(next.x, next.y); + } else { + var start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 }; + p2.moveTo(start.x, start.y); + } + } + for (var i = 0; i < contour.length; ++i) { + prev = curr; + curr = next; + next = contour[(i + 1) % contour.length]; + if (curr.onCurve) { + p2.lineTo(curr.x, curr.y); + } else { + var prev2 = prev; + var next2 = next; + if (!prev.onCurve) { + prev2 = { x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 }; + } + if (!next.onCurve) { + next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 }; + } + p2.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y); + } + } + p2.closePath(); + } + return p2; +} +function buildPath(glyphs, glyph) { + if (glyph.isComposite) { + for (var j = 0; j < glyph.components.length; j += 1) { + var component = glyph.components[j]; + var componentGlyph = glyphs.get(component.glyphIndex); + componentGlyph.getPath(); + if (componentGlyph.points) { + var transformedPoints = void 0; + if (component.matchedPoints === void 0) { + transformedPoints = transformPoints(componentGlyph.points, component); + } else { + if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) { + throw Error("Matched points out of range in " + glyph.name); + } + var firstPt = glyph.points[component.matchedPoints[0]]; + var secondPt = componentGlyph.points[component.matchedPoints[1]]; + var transform2 = { + xScale: component.xScale, + scale01: component.scale01, + scale10: component.scale10, + yScale: component.yScale, + dx: 0, + dy: 0 + }; + secondPt = transformPoints([secondPt], transform2)[0]; + transform2.dx = firstPt.x - secondPt.x; + transform2.dy = firstPt.y - secondPt.y; + transformedPoints = transformPoints(componentGlyph.points, transform2); + } + glyph.points = glyph.points.concat(transformedPoints); + } + } + } + return getPath(glyph.points); +} +function parseGlyfTableAll(data2, start, loca2, font) { + var glyphs = new glyphset.GlyphSet(font); + for (var i = 0; i < loca2.length - 1; i += 1) { + var offset = loca2[i]; + var nextOffset = loca2[i + 1]; + if (offset !== nextOffset) { + glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data2, start + offset, buildPath)); + } else { + glyphs.push(i, glyphset.glyphLoader(font, i)); + } + } + return glyphs; +} +function parseGlyfTableOnLowMemory(data2, start, loca2, font) { + var glyphs = new glyphset.GlyphSet(font); + font._push = function(i) { + var offset = loca2[i]; + var nextOffset = loca2[i + 1]; + if (offset !== nextOffset) { + glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data2, start + offset, buildPath)); + } else { + glyphs.push(i, glyphset.glyphLoader(font, i)); + } + }; + return glyphs; +} +function parseGlyfTable(data2, start, loca2, font, opt) { + if (opt.lowMemory) { + return parseGlyfTableOnLowMemory(data2, start, loca2, font); + } else { + return parseGlyfTableAll(data2, start, loca2, font); + } +} +var glyf = { getPath, parse: parseGlyfTable }; +var instructionTable; +var exec; +var execGlyph; +var execComponent; +function Hinting(font) { + this.font = font; + this.getCommands = function(hPoints) { + return glyf.getPath(hPoints).commands; + }; + this._fpgmState = this._prepState = void 0; + this._errorState = 0; +} +function roundOff(v) { + return v; +} +function roundToGrid(v) { + return Math.sign(v) * Math.round(Math.abs(v)); +} +function roundToDoubleGrid(v) { + return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2; +} +function roundToHalfGrid(v) { + return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5); +} +function roundUpToGrid(v) { + return Math.sign(v) * Math.ceil(Math.abs(v)); +} +function roundDownToGrid(v) { + return Math.sign(v) * Math.floor(Math.abs(v)); +} +var roundSuper = function(v) { + var period = this.srPeriod; + var phase = this.srPhase; + var threshold = this.srThreshold; + var sign = 1; + if (v < 0) { + v = -v; + sign = -1; + } + v += threshold - phase; + v = Math.trunc(v / period) * period; + v += phase; + if (v < 0) { + return phase * sign; + } + return v * sign; +}; +var xUnitVector = { + x: 1, + y: 0, + axis: "x", + // Gets the projected distance between two points. + // o1/o2 ... if true, respective original position is used. + distance: function(p1, p2, o1, o2) { + return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x); + }, + // Moves point p so the moved position has the same relative + // position to the moved positions of rp1 and rp2 than the + // original positions had. + // + // See APPENDIX on INTERPOLATE at the bottom of this file. + interpolate: function(p2, rp1, rp2, pv) { + var do1; + var do2; + var doa1; + var doa2; + var dm1; + var dm2; + var dt2; + if (!pv || pv === this) { + do1 = p2.xo - rp1.xo; + do2 = p2.xo - rp2.xo; + dm1 = rp1.x - rp1.xo; + dm2 = rp2.x - rp2.xo; + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + p2.x = p2.xo + (dm1 + dm2) / 2; + return; + } + p2.x = p2.xo + (dm1 * doa2 + dm2 * doa1) / dt2; + return; + } + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + xUnitVector.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + xUnitVector.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); + }, + // Slope of line normal to this + normalSlope: Number.NEGATIVE_INFINITY, + // Sets the point 'p' relative to point 'rp' + // by the distance 'd'. + // + // See APPENDIX on SETRELATIVE at the bottom of this file. + // + // p ... point to set + // rp ... reference point + // d ... distance on projection vector + // pv ... projection vector (undefined = this) + // org ... if true, uses the original position of rp as reference. + setRelative: function(p2, rp, d, pv, org) { + if (!pv || pv === this) { + p2.x = (org ? rp.xo : rp.x) + d; + return; + } + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + p2.x = rpdx + (p2.y - rpdy) / pv.normalSlope; + }, + // Slope of vector line. + slope: 0, + // Touches the point p. + touch: function(p2) { + p2.xTouched = true; + }, + // Tests if a point p is touched. + touched: function(p2) { + return p2.xTouched; + }, + // Untouches the point p. + untouch: function(p2) { + p2.xTouched = false; + } +}; +var yUnitVector = { + x: 0, + y: 1, + axis: "y", + // Gets the projected distance between two points. + // o1/o2 ... if true, respective original position is used. + distance: function(p1, p2, o1, o2) { + return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y); + }, + // Moves point p so the moved position has the same relative + // position to the moved positions of rp1 and rp2 than the + // original positions had. + // + // See APPENDIX on INTERPOLATE at the bottom of this file. + interpolate: function(p2, rp1, rp2, pv) { + var do1; + var do2; + var doa1; + var doa2; + var dm1; + var dm2; + var dt2; + if (!pv || pv === this) { + do1 = p2.yo - rp1.yo; + do2 = p2.yo - rp2.yo; + dm1 = rp1.y - rp1.yo; + dm2 = rp2.y - rp2.yo; + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + p2.y = p2.yo + (dm1 + dm2) / 2; + return; + } + p2.y = p2.yo + (dm1 * doa2 + dm2 * doa1) / dt2; + return; + } + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + yUnitVector.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + yUnitVector.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); + }, + // Slope of line normal to this. + normalSlope: 0, + // Sets the point 'p' relative to point 'rp' + // by the distance 'd' + // + // See APPENDIX on SETRELATIVE at the bottom of this file. + // + // p ... point to set + // rp ... reference point + // d ... distance on projection vector + // pv ... projection vector (undefined = this) + // org ... if true, uses the original position of rp as reference. + setRelative: function(p2, rp, d, pv, org) { + if (!pv || pv === this) { + p2.y = (org ? rp.yo : rp.y) + d; + return; + } + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + p2.y = rpdy + pv.normalSlope * (p2.x - rpdx); + }, + // Slope of vector line. + slope: Number.POSITIVE_INFINITY, + // Touches the point p. + touch: function(p2) { + p2.yTouched = true; + }, + // Tests if a point p is touched. + touched: function(p2) { + return p2.yTouched; + }, + // Untouches the point p. + untouch: function(p2) { + p2.yTouched = false; + } +}; +Object.freeze(xUnitVector); +Object.freeze(yUnitVector); +function UnitVector(x2, y2) { + this.x = x2; + this.y = y2; + this.axis = void 0; + this.slope = y2 / x2; + this.normalSlope = -x2 / y2; + Object.freeze(this); +} +UnitVector.prototype.distance = function(p1, p2, o1, o2) { + return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2); +}; +UnitVector.prototype.interpolate = function(p2, rp1, rp2, pv) { + var dm1; + var dm2; + var do1; + var do2; + var doa1; + var doa2; + var dt2; + do1 = pv.distance(p2, rp1, true, true); + do2 = pv.distance(p2, rp2, true, true); + dm1 = pv.distance(rp1, rp1, false, true); + dm2 = pv.distance(rp2, rp2, false, true); + doa1 = Math.abs(do1); + doa2 = Math.abs(do2); + dt2 = doa1 + doa2; + if (dt2 === 0) { + this.setRelative(p2, p2, (dm1 + dm2) / 2, pv, true); + return; + } + this.setRelative(p2, p2, (dm1 * doa2 + dm2 * doa1) / dt2, pv, true); +}; +UnitVector.prototype.setRelative = function(p2, rp, d, pv, org) { + pv = pv || this; + var rpx = org ? rp.xo : rp.x; + var rpy = org ? rp.yo : rp.y; + var rpdx = rpx + d * pv.x; + var rpdy = rpy + d * pv.y; + var pvns = pv.normalSlope; + var fvs = this.slope; + var px = p2.x; + var py = p2.y; + p2.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns); + p2.y = fvs * (p2.x - px) + py; +}; +UnitVector.prototype.touch = function(p2) { + p2.xTouched = true; + p2.yTouched = true; +}; +function getUnitVector(x2, y2) { + var d = Math.sqrt(x2 * x2 + y2 * y2); + x2 /= d; + y2 /= d; + if (x2 === 1 && y2 === 0) { + return xUnitVector; + } else if (x2 === 0 && y2 === 1) { + return yUnitVector; + } else { + return new UnitVector(x2, y2); + } +} +function HPoint(x2, y2, lastPointOfContour, onCurve) { + this.x = this.xo = Math.round(x2 * 64) / 64; + this.y = this.yo = Math.round(y2 * 64) / 64; + this.lastPointOfContour = lastPointOfContour; + this.onCurve = onCurve; + this.prevPointOnContour = void 0; + this.nextPointOnContour = void 0; + this.xTouched = false; + this.yTouched = false; + Object.preventExtensions(this); +} +HPoint.prototype.nextTouched = function(v) { + var p2 = this.nextPointOnContour; + while (!v.touched(p2) && p2 !== this) { + p2 = p2.nextPointOnContour; + } + return p2; +}; +HPoint.prototype.prevTouched = function(v) { + var p2 = this.prevPointOnContour; + while (!v.touched(p2) && p2 !== this) { + p2 = p2.prevPointOnContour; + } + return p2; +}; +var HPZero = Object.freeze(new HPoint(0, 0)); +var defaultState = { + cvCutIn: 17 / 16, + // control value cut in + deltaBase: 9, + deltaShift: 0.125, + loop: 1, + // loops some instructions + minDis: 1, + // minimum distance + autoFlip: true +}; +function State(env, prog) { + this.env = env; + this.stack = []; + this.prog = prog; + switch (env) { + case "glyf": + this.zp0 = this.zp1 = this.zp2 = 1; + this.rp0 = this.rp1 = this.rp2 = 0; + case "prep": + this.fv = this.pv = this.dpv = xUnitVector; + this.round = roundToGrid; + } +} +Hinting.prototype.exec = function(glyph, ppem) { + if (typeof ppem !== "number") { + throw new Error("Point size is not a number!"); + } + if (this._errorState > 2) { + return; + } + var font = this.font; + var prepState = this._prepState; + if (!prepState || prepState.ppem !== ppem) { + var fpgmState = this._fpgmState; + if (!fpgmState) { + State.prototype = defaultState; + fpgmState = this._fpgmState = new State("fpgm", font.tables.fpgm); + fpgmState.funcs = []; + fpgmState.font = font; + if (exports.DEBUG) { + console.log("---EXEC FPGM---"); + fpgmState.step = -1; + } + try { + exec(fpgmState); + } catch (e) { + console.log("Hinting error in FPGM:" + e); + this._errorState = 3; + return; + } + } + State.prototype = fpgmState; + prepState = this._prepState = new State("prep", font.tables.prep); + prepState.ppem = ppem; + var oCvt = font.tables.cvt; + if (oCvt) { + var cvt = prepState.cvt = new Array(oCvt.length); + var scale2 = ppem / font.unitsPerEm; + for (var c2 = 0; c2 < oCvt.length; c2++) { + cvt[c2] = oCvt[c2] * scale2; + } + } else { + prepState.cvt = []; + } + if (exports.DEBUG) { + console.log("---EXEC PREP---"); + prepState.step = -1; + } + try { + exec(prepState); + } catch (e) { + if (this._errorState < 2) { + console.log("Hinting error in PREP:" + e); + } + this._errorState = 2; + } + } + if (this._errorState > 1) { + return; + } + try { + return execGlyph(glyph, prepState); + } catch (e) { + if (this._errorState < 1) { + console.log("Hinting error:" + e); + console.log("Note: further hinting errors are silenced"); + } + this._errorState = 1; + return void 0; + } +}; +execGlyph = function(glyph, prepState) { + var xScale = prepState.ppem / prepState.font.unitsPerEm; + var yScale = xScale; + var components = glyph.components; + var contours; + var gZone; + var state; + State.prototype = prepState; + if (!components) { + state = new State("glyf", glyph.instructions); + if (exports.DEBUG) { + console.log("---EXEC GLYPH---"); + state.step = -1; + } + execComponent(glyph, state, xScale, yScale); + gZone = state.gZone; + } else { + var font = prepState.font; + gZone = []; + contours = []; + for (var i = 0; i < components.length; i++) { + var c2 = components[i]; + var cg = font.glyphs.get(c2.glyphIndex); + state = new State("glyf", cg.instructions); + if (exports.DEBUG) { + console.log("---EXEC COMP " + i + "---"); + state.step = -1; + } + execComponent(cg, state, xScale, yScale); + var dx = Math.round(c2.dx * xScale); + var dy = Math.round(c2.dy * yScale); + var gz = state.gZone; + var cc = state.contours; + for (var pi2 = 0; pi2 < gz.length; pi2++) { + var p2 = gz[pi2]; + p2.xTouched = p2.yTouched = false; + p2.xo = p2.x = p2.x + dx; + p2.yo = p2.y = p2.y + dy; + } + var gLen = gZone.length; + gZone.push.apply(gZone, gz); + for (var j = 0; j < cc.length; j++) { + contours.push(cc[j] + gLen); + } + } + if (glyph.instructions && !state.inhibitGridFit) { + state = new State("glyf", glyph.instructions); + state.gZone = state.z0 = state.z1 = state.z2 = gZone; + state.contours = contours; + gZone.push( + new HPoint(0, 0), + new HPoint(Math.round(glyph.advanceWidth * xScale), 0) + ); + if (exports.DEBUG) { + console.log("---EXEC COMPOSITE---"); + state.step = -1; + } + exec(state); + gZone.length -= 2; + } + } + return gZone; +}; +execComponent = function(glyph, state, xScale, yScale) { + var points = glyph.points || []; + var pLen = points.length; + var gZone = state.gZone = state.z0 = state.z1 = state.z2 = []; + var contours = state.contours = []; + var cp; + for (var i = 0; i < pLen; i++) { + cp = points[i]; + gZone[i] = new HPoint( + cp.x * xScale, + cp.y * yScale, + cp.lastPointOfContour, + cp.onCurve + ); + } + var sp; + var np; + for (var i$1 = 0; i$1 < pLen; i$1++) { + cp = gZone[i$1]; + if (!sp) { + sp = cp; + contours.push(i$1); + } + if (cp.lastPointOfContour) { + cp.nextPointOnContour = sp; + sp.prevPointOnContour = cp; + sp = void 0; + } else { + np = gZone[i$1 + 1]; + cp.nextPointOnContour = np; + np.prevPointOnContour = cp; + } + } + if (state.inhibitGridFit) { + return; + } + if (exports.DEBUG) { + console.log("PROCESSING GLYPH", state.stack); + for (var i$2 = 0; i$2 < pLen; i$2++) { + console.log(i$2, gZone[i$2].x, gZone[i$2].y); + } + } + gZone.push( + new HPoint(0, 0), + new HPoint(Math.round(glyph.advanceWidth * xScale), 0) + ); + exec(state); + gZone.length -= 2; + if (exports.DEBUG) { + console.log("FINISHED GLYPH", state.stack); + for (var i$3 = 0; i$3 < pLen; i$3++) { + console.log(i$3, gZone[i$3].x, gZone[i$3].y); + } + } +}; +exec = function(state) { + var prog = state.prog; + if (!prog) { + return; + } + var pLen = prog.length; + var ins; + for (state.ip = 0; state.ip < pLen; state.ip++) { + if (exports.DEBUG) { + state.step++; + } + ins = instructionTable[prog[state.ip]]; + if (!ins) { + throw new Error( + "unknown instruction: 0x" + Number(prog[state.ip]).toString(16) + ); + } + ins(state); + } +}; +function initTZone(state) { + var tZone = state.tZone = new Array(state.gZone.length); + for (var i = 0; i < tZone.length; i++) { + tZone[i] = new HPoint(0, 0); + } +} +function skip(state, handleElse) { + var prog = state.prog; + var ip = state.ip; + var nesting = 1; + var ins; + do { + ins = prog[++ip]; + if (ins === 88) { + nesting++; + } else if (ins === 89) { + nesting--; + } else if (ins === 64) { + ip += prog[ip + 1] + 1; + } else if (ins === 65) { + ip += 2 * prog[ip + 1] + 1; + } else if (ins >= 176 && ins <= 183) { + ip += ins - 176 + 1; + } else if (ins >= 184 && ins <= 191) { + ip += (ins - 184 + 1) * 2; + } else if (handleElse && nesting === 1 && ins === 27) { + break; + } + } while (nesting > 0); + state.ip = ip; +} +function SVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SVTCA[" + v.axis + "]"); + } + state.fv = state.pv = state.dpv = v; +} +function SPVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SPVTCA[" + v.axis + "]"); + } + state.pv = state.dpv = v; +} +function SFVTCA(v, state) { + if (exports.DEBUG) { + console.log(state.step, "SFVTCA[" + v.axis + "]"); + } + state.fv = v; +} +function SPVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log("SPVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.pv = state.dpv = getUnitVector(dx, dy); +} +function SFVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log("SFVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.fv = getUnitVector(dx, dy); +} +function SPVFS(state) { + var stack = state.stack; + var y2 = stack.pop(); + var x2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SPVFS[]", y2, x2); + } + state.pv = state.dpv = getUnitVector(x2, y2); +} +function SFVFS(state) { + var stack = state.stack; + var y2 = stack.pop(); + var x2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SPVFS[]", y2, x2); + } + state.fv = getUnitVector(x2, y2); +} +function GPV(state) { + var stack = state.stack; + var pv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "GPV[]"); + } + stack.push(pv.x * 16384); + stack.push(pv.y * 16384); +} +function GFV(state) { + var stack = state.stack; + var fv = state.fv; + if (exports.DEBUG) { + console.log(state.step, "GFV[]"); + } + stack.push(fv.x * 16384); + stack.push(fv.y * 16384); +} +function SFVTPV(state) { + state.fv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "SFVTPV[]"); + } +} +function ISECT(state) { + var stack = state.stack; + var pa0i = stack.pop(); + var pa1i = stack.pop(); + var pb0i = stack.pop(); + var pb1i = stack.pop(); + var pi2 = stack.pop(); + var z0 = state.z0; + var z1 = state.z1; + var pa0 = z0[pa0i]; + var pa1 = z0[pa1i]; + var pb0 = z1[pb0i]; + var pb1 = z1[pb1i]; + var p2 = state.z2[pi2]; + if (exports.DEBUG) { + console.log("ISECT[], ", pa0i, pa1i, pb0i, pb1i, pi2); + } + var x1 = pa0.x; + var y1 = pa0.y; + var x2 = pa1.x; + var y2 = pa1.y; + var x3 = pb0.x; + var y3 = pb0.y; + var x4 = pb1.x; + var y4 = pb1.y; + var div2 = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); + var f1 = x1 * y2 - y1 * x2; + var f2 = x3 * y4 - y3 * x4; + p2.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div2; + p2.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div2; +} +function SRP0(state) { + state.rp0 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP0[]", state.rp0); + } +} +function SRP1(state) { + state.rp1 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP1[]", state.rp1); + } +} +function SRP2(state) { + state.rp2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SRP2[]", state.rp2); + } +} +function SZP0(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP0[]", n2); + } + state.zp0 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z0 = state.tZone; + break; + case 1: + state.z0 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZP1(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP1[]", n2); + } + state.zp1 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z1 = state.tZone; + break; + case 1: + state.z1 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZP2(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZP2[]", n2); + } + state.zp2 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z2 = state.tZone; + break; + case 1: + state.z2 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SZPS(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SZPS[]", n2); + } + state.zp0 = state.zp1 = state.zp2 = n2; + switch (n2) { + case 0: + if (!state.tZone) { + initTZone(state); + } + state.z0 = state.z1 = state.z2 = state.tZone; + break; + case 1: + state.z0 = state.z1 = state.z2 = state.gZone; + break; + default: + throw new Error("Invalid zone pointer"); + } +} +function SLOOP(state) { + state.loop = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SLOOP[]", state.loop); + } +} +function RTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTG[]"); + } + state.round = roundToGrid; +} +function RTHG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTHG[]"); + } + state.round = roundToHalfGrid; +} +function SMD(state) { + var d = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SMD[]", d); + } + state.minDis = d / 64; +} +function ELSE(state) { + if (exports.DEBUG) { + console.log(state.step, "ELSE[]"); + } + skip(state, false); +} +function JMPR(state) { + var o = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "JMPR[]", o); + } + state.ip += o - 1; +} +function SCVTCI(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCVTCI[]", n2); + } + state.cvCutIn = n2 / 64; +} +function DUP(state) { + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.step, "DUP[]"); + } + stack.push(stack[stack.length - 1]); +} +function POP(state) { + if (exports.DEBUG) { + console.log(state.step, "POP[]"); + } + state.stack.pop(); +} +function CLEAR(state) { + if (exports.DEBUG) { + console.log(state.step, "CLEAR[]"); + } + state.stack.length = 0; +} +function SWAP(state) { + var stack = state.stack; + var a2 = stack.pop(); + var b3 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SWAP[]"); + } + stack.push(a2); + stack.push(b3); +} +function DEPTH(state) { + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.step, "DEPTH[]"); + } + stack.push(stack.length); +} +function LOOPCALL(state) { + var stack = state.stack; + var fn = stack.pop(); + var c2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LOOPCALL[]", fn, c2); + } + var cip = state.ip; + var cprog = state.prog; + state.prog = state.funcs[fn]; + for (var i = 0; i < c2; i++) { + exec(state); + if (exports.DEBUG) { + console.log( + ++state.step, + i + 1 < c2 ? "next loopcall" : "done loopcall", + i + ); + } + } + state.ip = cip; + state.prog = cprog; +} +function CALL(state) { + var fn = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CALL[]", fn); + } + var cip = state.ip; + var cprog = state.prog; + state.prog = state.funcs[fn]; + exec(state); + state.ip = cip; + state.prog = cprog; + if (exports.DEBUG) { + console.log(++state.step, "returning from", fn); + } +} +function CINDEX(state) { + var stack = state.stack; + var k2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CINDEX[]", k2); + } + stack.push(stack[stack.length - k2]); +} +function MINDEX(state) { + var stack = state.stack; + var k2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MINDEX[]", k2); + } + stack.push(stack.splice(stack.length - k2, 1)[0]); +} +function FDEF(state) { + if (state.env !== "fpgm") { + throw new Error("FDEF not allowed here"); + } + var stack = state.stack; + var prog = state.prog; + var ip = state.ip; + var fn = stack.pop(); + var ipBegin = ip; + if (exports.DEBUG) { + console.log(state.step, "FDEF[]", fn); + } + while (prog[++ip] !== 45) { + } + state.ip = ip; + state.funcs[fn] = prog.slice(ipBegin + 1, ip); +} +function MDAP(round, state) { + var pi2 = state.stack.pop(); + var p2 = state.z0[pi2]; + var fv = state.fv; + var pv = state.pv; + if (exports.DEBUG) { + console.log(state.step, "MDAP[" + round + "]", pi2); + } + var d = pv.distance(p2, HPZero); + if (round) { + d = state.round(d); + } + fv.setRelative(p2, HPZero, d, pv); + fv.touch(p2); + state.rp0 = state.rp1 = pi2; +} +function IUP(v, state) { + var z2 = state.z2; + var pLen = z2.length - 2; + var cp; + var pp; + var np; + if (exports.DEBUG) { + console.log(state.step, "IUP[" + v.axis + "]"); + } + for (var i = 0; i < pLen; i++) { + cp = z2[i]; + if (v.touched(cp)) { + continue; + } + pp = cp.prevTouched(v); + if (pp === cp) { + continue; + } + np = cp.nextTouched(v); + if (pp === np) { + v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true); + } + v.interpolate(cp, pp, np, v); + } +} +function SHP(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var loop = state.loop; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + var d = pv.distance(rp, rp, false, true); + fv.setRelative(p2, p2, d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHP[" + (a2 ? "rp1" : "rp2") + "]", + pi2 + ); + } + } + state.loop = 1; +} +function SHC(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var ci = stack.pop(); + var sp = state.z2[state.contours[ci]]; + var p2 = sp; + if (exports.DEBUG) { + console.log(state.step, "SHC[" + a2 + "]", ci); + } + var d = pv.distance(rp, rp, false, true); + do { + if (p2 !== rp) { + fv.setRelative(p2, p2, d, pv); + } + p2 = p2.nextPointOnContour; + } while (p2 !== sp); +} +function SHZ(a2, state) { + var stack = state.stack; + var rpi = a2 ? state.rp1 : state.rp2; + var rp = (a2 ? state.z0 : state.z1)[rpi]; + var fv = state.fv; + var pv = state.pv; + var e = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SHZ[" + a2 + "]", e); + } + var z; + switch (e) { + case 0: + z = state.tZone; + break; + case 1: + z = state.gZone; + break; + default: + throw new Error("Invalid zone"); + } + var p2; + var d = pv.distance(rp, rp, false, true); + var pLen = z.length - 2; + for (var i = 0; i < pLen; i++) { + p2 = z[i]; + fv.setRelative(p2, p2, d, pv); + } +} +function SHPIX(state) { + var stack = state.stack; + var loop = state.loop; + var fv = state.fv; + var d = stack.pop() / 64; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHPIX[]", + pi2, + d + ); + } + fv.setRelative(p2, p2, d); + fv.touch(p2); + } + state.loop = 1; +} +function IP(state) { + var stack = state.stack; + var rp1i = state.rp1; + var rp2i = state.rp2; + var loop = state.loop; + var rp1 = state.z0[rp1i]; + var rp2 = state.z1[rp2i]; + var fv = state.fv; + var pv = state.dpv; + var z2 = state.z2; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z2[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "IP[]", + pi2, + rp1i, + "<->", + rp2i + ); + } + fv.interpolate(p2, rp1, rp2, pv); + fv.touch(p2); + } + state.loop = 1; +} +function MSIRP(a2, state) { + var stack = state.stack; + var d = stack.pop() / 64; + var pi2 = stack.pop(); + var p2 = state.z1[pi2]; + var rp0 = state.z0[state.rp0]; + var fv = state.fv; + var pv = state.pv; + fv.setRelative(p2, rp0, d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log(state.step, "MSIRP[" + a2 + "]", d, pi2); + } + state.rp1 = state.rp0; + state.rp2 = pi2; + if (a2) { + state.rp0 = pi2; + } +} +function ALIGNRP(state) { + var stack = state.stack; + var rp0i = state.rp0; + var rp0 = state.z0[rp0i]; + var loop = state.loop; + var fv = state.fv; + var pv = state.pv; + var z1 = state.z1; + while (loop--) { + var pi2 = stack.pop(); + var p2 = z1[pi2]; + if (exports.DEBUG) { + console.log( + state.step, + (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "ALIGNRP[]", + pi2 + ); + } + fv.setRelative(p2, rp0, 0, pv); + fv.touch(p2); + } + state.loop = 1; +} +function RTDG(state) { + if (exports.DEBUG) { + console.log(state.step, "RTDG[]"); + } + state.round = roundToDoubleGrid; +} +function MIAP(round, state) { + var stack = state.stack; + var n2 = stack.pop(); + var pi2 = stack.pop(); + var p2 = state.z0[pi2]; + var fv = state.fv; + var pv = state.pv; + var cv = state.cvt[n2]; + if (exports.DEBUG) { + console.log( + state.step, + "MIAP[" + round + "]", + n2, + "(", + cv, + ")", + pi2 + ); + } + var d = pv.distance(p2, HPZero); + if (round) { + if (Math.abs(d - cv) < state.cvCutIn) { + d = cv; + } + d = state.round(d); + } + fv.setRelative(p2, HPZero, d, pv); + if (state.zp0 === 0) { + p2.xo = p2.x; + p2.yo = p2.y; + } + fv.touch(p2); + state.rp0 = state.rp1 = pi2; +} +function NPUSHB(state) { + var prog = state.prog; + var ip = state.ip; + var stack = state.stack; + var n2 = prog[++ip]; + if (exports.DEBUG) { + console.log(state.step, "NPUSHB[]", n2); + } + for (var i = 0; i < n2; i++) { + stack.push(prog[++ip]); + } + state.ip = ip; +} +function NPUSHW(state) { + var ip = state.ip; + var prog = state.prog; + var stack = state.stack; + var n2 = prog[++ip]; + if (exports.DEBUG) { + console.log(state.step, "NPUSHW[]", n2); + } + for (var i = 0; i < n2; i++) { + var w = prog[++ip] << 8 | prog[++ip]; + if (w & 32768) { + w = -((w ^ 65535) + 1); + } + stack.push(w); + } + state.ip = ip; +} +function WS(state) { + var stack = state.stack; + var store = state.store; + if (!store) { + store = state.store = []; + } + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WS", v, l2); + } + store[l2] = v; +} +function RS(state) { + var stack = state.stack; + var store = state.store; + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "RS", l2); + } + var v = store && store[l2] || 0; + stack.push(v); +} +function WCVTP(state) { + var stack = state.stack; + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WCVTP", v, l2); + } + state.cvt[l2] = v / 64; +} +function RCVT(state) { + var stack = state.stack; + var cvte = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "RCVT", cvte); + } + stack.push(state.cvt[cvte] * 64); +} +function GC(a2, state) { + var stack = state.stack; + var pi2 = stack.pop(); + var p2 = state.z2[pi2]; + if (exports.DEBUG) { + console.log(state.step, "GC[" + a2 + "]", pi2); + } + stack.push(state.dpv.distance(p2, HPZero, a2, false) * 64); +} +function MD(a2, state) { + var stack = state.stack; + var pi2 = stack.pop(); + var pi1 = stack.pop(); + var p2 = state.z1[pi2]; + var p1 = state.z0[pi1]; + var d = state.dpv.distance(p1, p2, a2, a2); + if (exports.DEBUG) { + console.log(state.step, "MD[" + a2 + "]", pi2, pi1, "->", d); + } + state.stack.push(Math.round(d * 64)); +} +function MPPEM(state) { + if (exports.DEBUG) { + console.log(state.step, "MPPEM[]"); + } + state.stack.push(state.ppem); +} +function FLIPON(state) { + if (exports.DEBUG) { + console.log(state.step, "FLIPON[]"); + } + state.autoFlip = true; +} +function LT(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LT[]", e2, e1); + } + stack.push(e1 < e2 ? 1 : 0); +} +function LTEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "LTEQ[]", e2, e1); + } + stack.push(e1 <= e2 ? 1 : 0); +} +function GT(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "GT[]", e2, e1); + } + stack.push(e1 > e2 ? 1 : 0); +} +function GTEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "GTEQ[]", e2, e1); + } + stack.push(e1 >= e2 ? 1 : 0); +} +function EQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "EQ[]", e2, e1); + } + stack.push(e2 === e1 ? 1 : 0); +} +function NEQ(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NEQ[]", e2, e1); + } + stack.push(e2 !== e1 ? 1 : 0); +} +function ODD(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ODD[]", n2); + } + stack.push(Math.trunc(n2) % 2 ? 1 : 0); +} +function EVEN(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "EVEN[]", n2); + } + stack.push(Math.trunc(n2) % 2 ? 0 : 1); +} +function IF(state) { + var test = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "IF[]", test); + } + if (!test) { + skip(state, true); + if (exports.DEBUG) { + console.log(state.step, "EIF[]"); + } + } +} +function EIF(state) { + if (exports.DEBUG) { + console.log(state.step, "EIF[]"); + } +} +function AND(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "AND[]", e2, e1); + } + stack.push(e2 && e1 ? 1 : 0); +} +function OR(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "OR[]", e2, e1); + } + stack.push(e2 || e1 ? 1 : 0); +} +function NOT(state) { + var stack = state.stack; + var e = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NOT[]", e); + } + stack.push(e ? 0 : 1); +} +function DELTAP123(b3, state) { + var stack = state.stack; + var n2 = stack.pop(); + var fv = state.fv; + var pv = state.pv; + var ppem = state.ppem; + var base = state.deltaBase + (b3 - 1) * 16; + var ds = state.deltaShift; + var z0 = state.z0; + if (exports.DEBUG) { + console.log(state.step, "DELTAP[" + b3 + "]", n2, stack); + } + for (var i = 0; i < n2; i++) { + var pi2 = stack.pop(); + var arg = stack.pop(); + var appem = base + ((arg & 240) >> 4); + if (appem !== ppem) { + continue; + } + var mag = (arg & 15) - 8; + if (mag >= 0) { + mag++; + } + if (exports.DEBUG) { + console.log(state.step, "DELTAPFIX", pi2, "by", mag * ds); + } + var p2 = z0[pi2]; + fv.setRelative(p2, p2, mag * ds, pv); + } +} +function SDB(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SDB[]", n2); + } + state.deltaBase = n2; +} +function SDS(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SDS[]", n2); + } + state.deltaShift = Math.pow(0.5, n2); +} +function ADD(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ADD[]", n2, n1); + } + stack.push(n1 + n2); +} +function SUB(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SUB[]", n2, n1); + } + stack.push(n1 - n2); +} +function DIV(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "DIV[]", n2, n1); + } + stack.push(n1 * 64 / n2); +} +function MUL(state) { + var stack = state.stack; + var n2 = stack.pop(); + var n1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MUL[]", n2, n1); + } + stack.push(n1 * n2 / 64); +} +function ABS(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ABS[]", n2); + } + stack.push(Math.abs(n2)); +} +function NEG(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "NEG[]", n2); + } + stack.push(-n2); +} +function FLOOR(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "FLOOR[]", n2); + } + stack.push(Math.floor(n2 / 64) * 64); +} +function CEILING(state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "CEILING[]", n2); + } + stack.push(Math.ceil(n2 / 64) * 64); +} +function ROUND(dt2, state) { + var stack = state.stack; + var n2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ROUND[]"); + } + stack.push(state.round(n2 / 64) * 64); +} +function WCVTF(state) { + var stack = state.stack; + var v = stack.pop(); + var l2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "WCVTF[]", v, l2); + } + state.cvt[l2] = v * state.ppem / state.font.unitsPerEm; +} +function DELTAC123(b3, state) { + var stack = state.stack; + var n2 = stack.pop(); + var ppem = state.ppem; + var base = state.deltaBase + (b3 - 1) * 16; + var ds = state.deltaShift; + if (exports.DEBUG) { + console.log(state.step, "DELTAC[" + b3 + "]", n2, stack); + } + for (var i = 0; i < n2; i++) { + var c2 = stack.pop(); + var arg = stack.pop(); + var appem = base + ((arg & 240) >> 4); + if (appem !== ppem) { + continue; + } + var mag = (arg & 15) - 8; + if (mag >= 0) { + mag++; + } + var delta = mag * ds; + if (exports.DEBUG) { + console.log(state.step, "DELTACFIX", c2, "by", delta); + } + state.cvt[c2] += delta; + } +} +function SROUND(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SROUND[]", n2); + } + state.round = roundSuper; + var period; + switch (n2 & 192) { + case 0: + period = 0.5; + break; + case 64: + period = 1; + break; + case 128: + period = 2; + break; + default: + throw new Error("invalid SROUND value"); + } + state.srPeriod = period; + switch (n2 & 48) { + case 0: + state.srPhase = 0; + break; + case 16: + state.srPhase = 0.25 * period; + break; + case 32: + state.srPhase = 0.5 * period; + break; + case 48: + state.srPhase = 0.75 * period; + break; + default: + throw new Error("invalid SROUND value"); + } + n2 &= 15; + if (n2 === 0) { + state.srThreshold = 0; + } else { + state.srThreshold = (n2 / 8 - 0.5) * period; + } +} +function S45ROUND(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "S45ROUND[]", n2); + } + state.round = roundSuper; + var period; + switch (n2 & 192) { + case 0: + period = Math.sqrt(2) / 2; + break; + case 64: + period = Math.sqrt(2); + break; + case 128: + period = 2 * Math.sqrt(2); + break; + default: + throw new Error("invalid S45ROUND value"); + } + state.srPeriod = period; + switch (n2 & 48) { + case 0: + state.srPhase = 0; + break; + case 16: + state.srPhase = 0.25 * period; + break; + case 32: + state.srPhase = 0.5 * period; + break; + case 48: + state.srPhase = 0.75 * period; + break; + default: + throw new Error("invalid S45ROUND value"); + } + n2 &= 15; + if (n2 === 0) { + state.srThreshold = 0; + } else { + state.srThreshold = (n2 / 8 - 0.5) * period; + } +} +function ROFF(state) { + if (exports.DEBUG) { + console.log(state.step, "ROFF[]"); + } + state.round = roundOff; +} +function RUTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RUTG[]"); + } + state.round = roundUpToGrid; +} +function RDTG(state) { + if (exports.DEBUG) { + console.log(state.step, "RDTG[]"); + } + state.round = roundDownToGrid; +} +function SCANCTRL(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCANCTRL[]", n2); + } +} +function SDPVTL(a2, state) { + var stack = state.stack; + var p2i = stack.pop(); + var p1i = stack.pop(); + var p2 = state.z2[p2i]; + var p1 = state.z1[p1i]; + if (exports.DEBUG) { + console.log(state.step, "SDPVTL[" + a2 + "]", p2i, p1i); + } + var dx; + var dy; + if (!a2) { + dx = p1.x - p2.x; + dy = p1.y - p2.y; + } else { + dx = p2.y - p1.y; + dy = p1.x - p2.x; + } + state.dpv = getUnitVector(dx, dy); +} +function GETINFO(state) { + var stack = state.stack; + var sel = stack.pop(); + var r = 0; + if (exports.DEBUG) { + console.log(state.step, "GETINFO[]", sel); + } + if (sel & 1) { + r = 35; + } + if (sel & 32) { + r |= 4096; + } + stack.push(r); +} +function ROLL(state) { + var stack = state.stack; + var a2 = stack.pop(); + var b3 = stack.pop(); + var c2 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "ROLL[]"); + } + stack.push(b3); + stack.push(a2); + stack.push(c2); +} +function MAX(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MAX[]", e2, e1); + } + stack.push(Math.max(e1, e2)); +} +function MIN(state) { + var stack = state.stack; + var e2 = stack.pop(); + var e1 = stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "MIN[]", e2, e1); + } + stack.push(Math.min(e1, e2)); +} +function SCANTYPE(state) { + var n2 = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "SCANTYPE[]", n2); + } +} +function INSTCTRL(state) { + var s = state.stack.pop(); + var v = state.stack.pop(); + if (exports.DEBUG) { + console.log(state.step, "INSTCTRL[]", s, v); + } + switch (s) { + case 1: + state.inhibitGridFit = !!v; + return; + case 2: + state.ignoreCvt = !!v; + return; + default: + throw new Error("invalid INSTCTRL[] selector"); + } +} +function PUSHB(n2, state) { + var stack = state.stack; + var prog = state.prog; + var ip = state.ip; + if (exports.DEBUG) { + console.log(state.step, "PUSHB[" + n2 + "]"); + } + for (var i = 0; i < n2; i++) { + stack.push(prog[++ip]); + } + state.ip = ip; +} +function PUSHW(n2, state) { + var ip = state.ip; + var prog = state.prog; + var stack = state.stack; + if (exports.DEBUG) { + console.log(state.ip, "PUSHW[" + n2 + "]"); + } + for (var i = 0; i < n2; i++) { + var w = prog[++ip] << 8 | prog[++ip]; + if (w & 32768) { + w = -((w ^ 65535) + 1); + } + stack.push(w); + } + state.ip = ip; +} +function MDRP_MIRP(indirect, setRp0, keepD, ro, dt2, state) { + var stack = state.stack; + var cvte = indirect && stack.pop(); + var pi2 = stack.pop(); + var rp0i = state.rp0; + var rp = state.z0[rp0i]; + var p2 = state.z1[pi2]; + var md = state.minDis; + var fv = state.fv; + var pv = state.dpv; + var od; + var d; + var sign; + var cv; + d = od = pv.distance(p2, rp, true, true); + sign = d >= 0 ? 1 : -1; + d = Math.abs(d); + if (indirect) { + cv = state.cvt[cvte]; + if (ro && Math.abs(d - cv) < state.cvCutIn) { + d = cv; + } + } + if (keepD && d < md) { + d = md; + } + if (ro) { + d = state.round(d); + } + fv.setRelative(p2, rp, sign * d, pv); + fv.touch(p2); + if (exports.DEBUG) { + console.log( + state.step, + (indirect ? "MIRP[" : "MDRP[") + (setRp0 ? "M" : "m") + (keepD ? ">" : "_") + (ro ? "R" : "_") + (dt2 === 0 ? "Gr" : dt2 === 1 ? "Bl" : dt2 === 2 ? "Wh" : "") + "]", + indirect ? cvte + "(" + state.cvt[cvte] + "," + cv + ")" : "", + pi2, + "(d =", + od, + "->", + sign * d, + ")" + ); + } + state.rp1 = state.rp0; + state.rp2 = pi2; + if (setRp0) { + state.rp0 = pi2; + } +} +instructionTable = [ + /* 0x00 */ + SVTCA.bind(void 0, yUnitVector), + /* 0x01 */ + SVTCA.bind(void 0, xUnitVector), + /* 0x02 */ + SPVTCA.bind(void 0, yUnitVector), + /* 0x03 */ + SPVTCA.bind(void 0, xUnitVector), + /* 0x04 */ + SFVTCA.bind(void 0, yUnitVector), + /* 0x05 */ + SFVTCA.bind(void 0, xUnitVector), + /* 0x06 */ + SPVTL.bind(void 0, 0), + /* 0x07 */ + SPVTL.bind(void 0, 1), + /* 0x08 */ + SFVTL.bind(void 0, 0), + /* 0x09 */ + SFVTL.bind(void 0, 1), + /* 0x0A */ + SPVFS, + /* 0x0B */ + SFVFS, + /* 0x0C */ + GPV, + /* 0x0D */ + GFV, + /* 0x0E */ + SFVTPV, + /* 0x0F */ + ISECT, + /* 0x10 */ + SRP0, + /* 0x11 */ + SRP1, + /* 0x12 */ + SRP2, + /* 0x13 */ + SZP0, + /* 0x14 */ + SZP1, + /* 0x15 */ + SZP2, + /* 0x16 */ + SZPS, + /* 0x17 */ + SLOOP, + /* 0x18 */ + RTG, + /* 0x19 */ + RTHG, + /* 0x1A */ + SMD, + /* 0x1B */ + ELSE, + /* 0x1C */ + JMPR, + /* 0x1D */ + SCVTCI, + /* 0x1E */ + void 0, + // TODO SSWCI + /* 0x1F */ + void 0, + // TODO SSW + /* 0x20 */ + DUP, + /* 0x21 */ + POP, + /* 0x22 */ + CLEAR, + /* 0x23 */ + SWAP, + /* 0x24 */ + DEPTH, + /* 0x25 */ + CINDEX, + /* 0x26 */ + MINDEX, + /* 0x27 */ + void 0, + // TODO ALIGNPTS + /* 0x28 */ + void 0, + /* 0x29 */ + void 0, + // TODO UTP + /* 0x2A */ + LOOPCALL, + /* 0x2B */ + CALL, + /* 0x2C */ + FDEF, + /* 0x2D */ + void 0, + // ENDF (eaten by FDEF) + /* 0x2E */ + MDAP.bind(void 0, 0), + /* 0x2F */ + MDAP.bind(void 0, 1), + /* 0x30 */ + IUP.bind(void 0, yUnitVector), + /* 0x31 */ + IUP.bind(void 0, xUnitVector), + /* 0x32 */ + SHP.bind(void 0, 0), + /* 0x33 */ + SHP.bind(void 0, 1), + /* 0x34 */ + SHC.bind(void 0, 0), + /* 0x35 */ + SHC.bind(void 0, 1), + /* 0x36 */ + SHZ.bind(void 0, 0), + /* 0x37 */ + SHZ.bind(void 0, 1), + /* 0x38 */ + SHPIX, + /* 0x39 */ + IP, + /* 0x3A */ + MSIRP.bind(void 0, 0), + /* 0x3B */ + MSIRP.bind(void 0, 1), + /* 0x3C */ + ALIGNRP, + /* 0x3D */ + RTDG, + /* 0x3E */ + MIAP.bind(void 0, 0), + /* 0x3F */ + MIAP.bind(void 0, 1), + /* 0x40 */ + NPUSHB, + /* 0x41 */ + NPUSHW, + /* 0x42 */ + WS, + /* 0x43 */ + RS, + /* 0x44 */ + WCVTP, + /* 0x45 */ + RCVT, + /* 0x46 */ + GC.bind(void 0, 0), + /* 0x47 */ + GC.bind(void 0, 1), + /* 0x48 */ + void 0, + // TODO SCFS + /* 0x49 */ + MD.bind(void 0, 0), + /* 0x4A */ + MD.bind(void 0, 1), + /* 0x4B */ + MPPEM, + /* 0x4C */ + void 0, + // TODO MPS + /* 0x4D */ + FLIPON, + /* 0x4E */ + void 0, + // TODO FLIPOFF + /* 0x4F */ + void 0, + // TODO DEBUG + /* 0x50 */ + LT, + /* 0x51 */ + LTEQ, + /* 0x52 */ + GT, + /* 0x53 */ + GTEQ, + /* 0x54 */ + EQ, + /* 0x55 */ + NEQ, + /* 0x56 */ + ODD, + /* 0x57 */ + EVEN, + /* 0x58 */ + IF, + /* 0x59 */ + EIF, + /* 0x5A */ + AND, + /* 0x5B */ + OR, + /* 0x5C */ + NOT, + /* 0x5D */ + DELTAP123.bind(void 0, 1), + /* 0x5E */ + SDB, + /* 0x5F */ + SDS, + /* 0x60 */ + ADD, + /* 0x61 */ + SUB, + /* 0x62 */ + DIV, + /* 0x63 */ + MUL, + /* 0x64 */ + ABS, + /* 0x65 */ + NEG, + /* 0x66 */ + FLOOR, + /* 0x67 */ + CEILING, + /* 0x68 */ + ROUND.bind(void 0, 0), + /* 0x69 */ + ROUND.bind(void 0, 1), + /* 0x6A */ + ROUND.bind(void 0, 2), + /* 0x6B */ + ROUND.bind(void 0, 3), + /* 0x6C */ + void 0, + // TODO NROUND[ab] + /* 0x6D */ + void 0, + // TODO NROUND[ab] + /* 0x6E */ + void 0, + // TODO NROUND[ab] + /* 0x6F */ + void 0, + // TODO NROUND[ab] + /* 0x70 */ + WCVTF, + /* 0x71 */ + DELTAP123.bind(void 0, 2), + /* 0x72 */ + DELTAP123.bind(void 0, 3), + /* 0x73 */ + DELTAC123.bind(void 0, 1), + /* 0x74 */ + DELTAC123.bind(void 0, 2), + /* 0x75 */ + DELTAC123.bind(void 0, 3), + /* 0x76 */ + SROUND, + /* 0x77 */ + S45ROUND, + /* 0x78 */ + void 0, + // TODO JROT[] + /* 0x79 */ + void 0, + // TODO JROF[] + /* 0x7A */ + ROFF, + /* 0x7B */ + void 0, + /* 0x7C */ + RUTG, + /* 0x7D */ + RDTG, + /* 0x7E */ + POP, + // actually SANGW, supposed to do only a pop though + /* 0x7F */ + POP, + // actually AA, supposed to do only a pop though + /* 0x80 */ + void 0, + // TODO FLIPPT + /* 0x81 */ + void 0, + // TODO FLIPRGON + /* 0x82 */ + void 0, + // TODO FLIPRGOFF + /* 0x83 */ + void 0, + /* 0x84 */ + void 0, + /* 0x85 */ + SCANCTRL, + /* 0x86 */ + SDPVTL.bind(void 0, 0), + /* 0x87 */ + SDPVTL.bind(void 0, 1), + /* 0x88 */ + GETINFO, + /* 0x89 */ + void 0, + // TODO IDEF + /* 0x8A */ + ROLL, + /* 0x8B */ + MAX, + /* 0x8C */ + MIN, + /* 0x8D */ + SCANTYPE, + /* 0x8E */ + INSTCTRL, + /* 0x8F */ + void 0, + /* 0x90 */ + void 0, + /* 0x91 */ + void 0, + /* 0x92 */ + void 0, + /* 0x93 */ + void 0, + /* 0x94 */ + void 0, + /* 0x95 */ + void 0, + /* 0x96 */ + void 0, + /* 0x97 */ + void 0, + /* 0x98 */ + void 0, + /* 0x99 */ + void 0, + /* 0x9A */ + void 0, + /* 0x9B */ + void 0, + /* 0x9C */ + void 0, + /* 0x9D */ + void 0, + /* 0x9E */ + void 0, + /* 0x9F */ + void 0, + /* 0xA0 */ + void 0, + /* 0xA1 */ + void 0, + /* 0xA2 */ + void 0, + /* 0xA3 */ + void 0, + /* 0xA4 */ + void 0, + /* 0xA5 */ + void 0, + /* 0xA6 */ + void 0, + /* 0xA7 */ + void 0, + /* 0xA8 */ + void 0, + /* 0xA9 */ + void 0, + /* 0xAA */ + void 0, + /* 0xAB */ + void 0, + /* 0xAC */ + void 0, + /* 0xAD */ + void 0, + /* 0xAE */ + void 0, + /* 0xAF */ + void 0, + /* 0xB0 */ + PUSHB.bind(void 0, 1), + /* 0xB1 */ + PUSHB.bind(void 0, 2), + /* 0xB2 */ + PUSHB.bind(void 0, 3), + /* 0xB3 */ + PUSHB.bind(void 0, 4), + /* 0xB4 */ + PUSHB.bind(void 0, 5), + /* 0xB5 */ + PUSHB.bind(void 0, 6), + /* 0xB6 */ + PUSHB.bind(void 0, 7), + /* 0xB7 */ + PUSHB.bind(void 0, 8), + /* 0xB8 */ + PUSHW.bind(void 0, 1), + /* 0xB9 */ + PUSHW.bind(void 0, 2), + /* 0xBA */ + PUSHW.bind(void 0, 3), + /* 0xBB */ + PUSHW.bind(void 0, 4), + /* 0xBC */ + PUSHW.bind(void 0, 5), + /* 0xBD */ + PUSHW.bind(void 0, 6), + /* 0xBE */ + PUSHW.bind(void 0, 7), + /* 0xBF */ + PUSHW.bind(void 0, 8), + /* 0xC0 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0), + /* 0xC1 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1), + /* 0xC2 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2), + /* 0xC3 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3), + /* 0xC4 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0), + /* 0xC5 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1), + /* 0xC6 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2), + /* 0xC7 */ + MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3), + /* 0xC8 */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0), + /* 0xC9 */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1), + /* 0xCA */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2), + /* 0xCB */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3), + /* 0xCC */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0), + /* 0xCD */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1), + /* 0xCE */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2), + /* 0xCF */ + MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3), + /* 0xD0 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0), + /* 0xD1 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1), + /* 0xD2 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2), + /* 0xD3 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3), + /* 0xD4 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0), + /* 0xD5 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1), + /* 0xD6 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2), + /* 0xD7 */ + MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3), + /* 0xD8 */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0), + /* 0xD9 */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1), + /* 0xDA */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2), + /* 0xDB */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3), + /* 0xDC */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0), + /* 0xDD */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1), + /* 0xDE */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2), + /* 0xDF */ + MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3), + /* 0xE0 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0), + /* 0xE1 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1), + /* 0xE2 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2), + /* 0xE3 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3), + /* 0xE4 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0), + /* 0xE5 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1), + /* 0xE6 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2), + /* 0xE7 */ + MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3), + /* 0xE8 */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0), + /* 0xE9 */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1), + /* 0xEA */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2), + /* 0xEB */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3), + /* 0xEC */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0), + /* 0xED */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1), + /* 0xEE */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2), + /* 0xEF */ + MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3), + /* 0xF0 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0), + /* 0xF1 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1), + /* 0xF2 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2), + /* 0xF3 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3), + /* 0xF4 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0), + /* 0xF5 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1), + /* 0xF6 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2), + /* 0xF7 */ + MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3), + /* 0xF8 */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0), + /* 0xF9 */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1), + /* 0xFA */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2), + /* 0xFB */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3), + /* 0xFC */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0), + /* 0xFD */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1), + /* 0xFE */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2), + /* 0xFF */ + MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3) +]; +function Token(char) { + this.char = char; + this.state = {}; + this.activeState = null; +} +function ContextRange(startIndex, endOffset, contextName) { + this.contextName = contextName; + this.startIndex = startIndex; + this.endOffset = endOffset; +} +function ContextChecker(contextName, checkStart, checkEnd) { + this.contextName = contextName; + this.openRange = null; + this.ranges = []; + this.checkStart = checkStart; + this.checkEnd = checkEnd; +} +function ContextParams(context, currentIndex) { + this.context = context; + this.index = currentIndex; + this.length = context.length; + this.current = context[currentIndex]; + this.backtrack = context.slice(0, currentIndex); + this.lookahead = context.slice(currentIndex + 1); +} +function Event(eventId) { + this.eventId = eventId; + this.subscribers = []; +} +function initializeCoreEvents(events) { + var this$1 = this; + var coreEvents = [ + "start", + "end", + "next", + "newToken", + "contextStart", + "contextEnd", + "insertToken", + "removeToken", + "removeRange", + "replaceToken", + "replaceRange", + "composeRUD", + "updateContextsRanges" + ]; + coreEvents.forEach(function(eventId) { + Object.defineProperty(this$1.events, eventId, { + value: new Event(eventId) + }); + }); + if (!!events) { + coreEvents.forEach(function(eventId) { + var event = events[eventId]; + if (typeof event === "function") { + this$1.events[eventId].subscribe(event); + } + }); + } + var requiresContextUpdate = [ + "insertToken", + "removeToken", + "removeRange", + "replaceToken", + "replaceRange", + "composeRUD" + ]; + requiresContextUpdate.forEach(function(eventId) { + this$1.events[eventId].subscribe( + this$1.updateContextsRanges + ); + }); +} +function Tokenizer(events) { + this.tokens = []; + this.registeredContexts = {}; + this.contextCheckers = []; + this.events = {}; + this.registeredModifiers = []; + initializeCoreEvents.call(this, events); +} +Token.prototype.setState = function(key2, value2) { + this.state[key2] = value2; + this.activeState = { key: key2, value: this.state[key2] }; + return this.activeState; +}; +Token.prototype.getState = function(stateId) { + return this.state[stateId] || null; +}; +Tokenizer.prototype.inboundIndex = function(index2) { + return index2 >= 0 && index2 < this.tokens.length; +}; +Tokenizer.prototype.composeRUD = function(RUDs) { + var this$1 = this; + var silent = true; + var state = RUDs.map(function(RUD) { + return this$1[RUD[0]].apply(this$1, RUD.slice(1).concat(silent)); + }); + var hasFAILObject = function(obj) { + return typeof obj === "object" && obj.hasOwnProperty("FAIL"); + }; + if (state.every(hasFAILObject)) { + return { + FAIL: "composeRUD: one or more operations hasn't completed successfully", + report: state.filter(hasFAILObject) + }; + } + this.dispatch("composeRUD", [state.filter(function(op) { + return !hasFAILObject(op); + })]); +}; +Tokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) { + offset = offset !== null ? offset : this.tokens.length; + var isTokenType = tokens.every(function(token) { + return token instanceof Token; + }); + if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) { + var replaced = this.tokens.splice.apply( + this.tokens, + [startIndex, offset].concat(tokens) + ); + if (!silent) { + this.dispatch("replaceToken", [startIndex, offset, tokens]); + } + return [replaced, tokens]; + } else { + return { FAIL: "replaceRange: invalid tokens or startIndex." }; + } +}; +Tokenizer.prototype.replaceToken = function(index2, token, silent) { + if (!isNaN(index2) && this.inboundIndex(index2) && token instanceof Token) { + var replaced = this.tokens.splice(index2, 1, token); + if (!silent) { + this.dispatch("replaceToken", [index2, token]); + } + return [replaced[0], token]; + } else { + return { FAIL: "replaceToken: invalid token or index." }; + } +}; +Tokenizer.prototype.removeRange = function(startIndex, offset, silent) { + offset = !isNaN(offset) ? offset : this.tokens.length; + var tokens = this.tokens.splice(startIndex, offset); + if (!silent) { + this.dispatch("removeRange", [tokens, startIndex, offset]); + } + return tokens; +}; +Tokenizer.prototype.removeToken = function(index2, silent) { + if (!isNaN(index2) && this.inboundIndex(index2)) { + var token = this.tokens.splice(index2, 1); + if (!silent) { + this.dispatch("removeToken", [token, index2]); + } + return token; + } else { + return { FAIL: "removeToken: invalid token index." }; + } +}; +Tokenizer.prototype.insertToken = function(tokens, index2, silent) { + var tokenType = tokens.every( + function(token) { + return token instanceof Token; + } + ); + if (tokenType) { + this.tokens.splice.apply( + this.tokens, + [index2, 0].concat(tokens) + ); + if (!silent) { + this.dispatch("insertToken", [tokens, index2]); + } + return tokens; + } else { + return { FAIL: "insertToken: invalid token(s)." }; + } +}; +Tokenizer.prototype.registerModifier = function(modifierId, condition, modifier) { + this.events.newToken.subscribe(function(token, contextParams) { + var conditionParams = [token, contextParams]; + var canApplyModifier = condition === null || condition.apply(this, conditionParams) === true; + var modifierParams = [token, contextParams]; + if (canApplyModifier) { + var newStateValue = modifier.apply(this, modifierParams); + token.setState(modifierId, newStateValue); + } + }); + this.registeredModifiers.push(modifierId); +}; +Event.prototype.subscribe = function(eventHandler) { + if (typeof eventHandler === "function") { + return this.subscribers.push(eventHandler) - 1; + } else { + return { FAIL: "invalid '" + this.eventId + "' event handler" }; + } +}; +Event.prototype.unsubscribe = function(subsId) { + this.subscribers.splice(subsId, 1); +}; +ContextParams.prototype.setCurrentIndex = function(index2) { + this.index = index2; + this.current = this.context[index2]; + this.backtrack = this.context.slice(0, index2); + this.lookahead = this.context.slice(index2 + 1); +}; +ContextParams.prototype.get = function(offset) { + switch (true) { + case offset === 0: + return this.current; + case (offset < 0 && Math.abs(offset) <= this.backtrack.length): + return this.backtrack.slice(offset)[0]; + case (offset > 0 && offset <= this.lookahead.length): + return this.lookahead[offset - 1]; + default: + return null; + } +}; +Tokenizer.prototype.rangeToText = function(range) { + if (range instanceof ContextRange) { + return this.getRangeTokens(range).map(function(token) { + return token.char; + }).join(""); + } +}; +Tokenizer.prototype.getText = function() { + return this.tokens.map(function(token) { + return token.char; + }).join(""); +}; +Tokenizer.prototype.getContext = function(contextName) { + var context = this.registeredContexts[contextName]; + return !!context ? context : null; +}; +Tokenizer.prototype.on = function(eventName, eventHandler) { + var event = this.events[eventName]; + if (!!event) { + return event.subscribe(eventHandler); + } else { + return null; + } +}; +Tokenizer.prototype.dispatch = function(eventName, args) { + var this$1 = this; + var event = this.events[eventName]; + if (event instanceof Event) { + event.subscribers.forEach(function(subscriber) { + subscriber.apply(this$1, args || []); + }); + } +}; +Tokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) { + if (!!this.getContext(contextName)) { + return { + FAIL: "context name '" + contextName + "' is already registered." + }; + } + if (typeof contextStartCheck !== "function") { + return { + FAIL: "missing context start check." + }; + } + if (typeof contextEndCheck !== "function") { + return { + FAIL: "missing context end check." + }; + } + var contextCheckers = new ContextChecker( + contextName, + contextStartCheck, + contextEndCheck + ); + this.registeredContexts[contextName] = contextCheckers; + this.contextCheckers.push(contextCheckers); + return contextCheckers; +}; +Tokenizer.prototype.getRangeTokens = function(range) { + var endIndex = range.startIndex + range.endOffset; + return [].concat( + this.tokens.slice(range.startIndex, endIndex) + ); +}; +Tokenizer.prototype.getContextRanges = function(contextName) { + var context = this.getContext(contextName); + if (!!context) { + return context.ranges; + } else { + return { FAIL: "context checker '" + contextName + "' is not registered." }; + } +}; +Tokenizer.prototype.resetContextsRanges = function() { + var registeredContexts = this.registeredContexts; + for (var contextName in registeredContexts) { + if (registeredContexts.hasOwnProperty(contextName)) { + var context = registeredContexts[contextName]; + context.ranges = []; + } + } +}; +Tokenizer.prototype.updateContextsRanges = function() { + this.resetContextsRanges(); + var chars = this.tokens.map(function(token) { + return token.char; + }); + for (var i = 0; i < chars.length; i++) { + var contextParams = new ContextParams(chars, i); + this.runContextCheck(contextParams); + } + this.dispatch("updateContextsRanges", [this.registeredContexts]); +}; +Tokenizer.prototype.setEndOffset = function(offset, contextName) { + var startIndex = this.getContext(contextName).openRange.startIndex; + var range = new ContextRange(startIndex, offset, contextName); + var ranges = this.getContext(contextName).ranges; + range.rangeId = contextName + "." + ranges.length; + ranges.push(range); + this.getContext(contextName).openRange = null; + return range; +}; +Tokenizer.prototype.runContextCheck = function(contextParams) { + var this$1 = this; + var index2 = contextParams.index; + this.contextCheckers.forEach(function(contextChecker) { + var contextName = contextChecker.contextName; + var openRange = this$1.getContext(contextName).openRange; + if (!openRange && contextChecker.checkStart(contextParams)) { + openRange = new ContextRange(index2, null, contextName); + this$1.getContext(contextName).openRange = openRange; + this$1.dispatch("contextStart", [contextName, index2]); + } + if (!!openRange && contextChecker.checkEnd(contextParams)) { + var offset = index2 - openRange.startIndex + 1; + var range = this$1.setEndOffset(offset, contextName); + this$1.dispatch("contextEnd", [contextName, range]); + } + }); +}; +Tokenizer.prototype.tokenize = function(text2) { + this.tokens = []; + this.resetContextsRanges(); + var chars = Array.from(text2); + this.dispatch("start"); + for (var i = 0; i < chars.length; i++) { + var char = chars[i]; + var contextParams = new ContextParams(chars, i); + this.dispatch("next", [contextParams]); + this.runContextCheck(contextParams); + var token = new Token(char); + this.tokens.push(token); + this.dispatch("newToken", [token, contextParams]); + } + this.dispatch("end", [this.tokens]); + return this.tokens; +}; +function isArabicChar(c2) { + return /[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(c2); +} +function isIsolatedArabicChar(char) { + return /[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(char); +} +function isTashkeelArabicChar(char) { + return /[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(char); +} +function isLatinChar(c2) { + return /[A-z]/.test(c2); +} +function isWhiteSpace(c2) { + return /\s/.test(c2); +} +function FeatureQuery(font) { + this.font = font; + this.features = {}; +} +function SubstitutionAction(action) { + this.id = action.id; + this.tag = action.tag; + this.substitution = action.substitution; +} +function lookupCoverage(glyphIndex, coverage) { + if (!glyphIndex) { + return -1; + } + switch (coverage.format) { + case 1: + return coverage.glyphs.indexOf(glyphIndex); + case 2: + var ranges = coverage.ranges; + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i]; + if (glyphIndex >= range.start && glyphIndex <= range.end) { + var offset = glyphIndex - range.start; + return range.index + offset; + } + } + break; + default: + return -1; + } + return -1; +} +function singleSubstitutionFormat1(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return glyphIndex + subtable.deltaGlyphId; +} +function singleSubstitutionFormat2(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return subtable.substitute[substituteIndex]; +} +function lookupCoverageList(coverageList, contextParams) { + var lookupList = []; + for (var i = 0; i < coverageList.length; i++) { + var coverage = coverageList[i]; + var glyphIndex = contextParams.current; + glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex; + var lookupIndex = lookupCoverage(glyphIndex, coverage); + if (lookupIndex !== -1) { + lookupList.push(lookupIndex); + } + } + if (lookupList.length !== coverageList.length) { + return -1; + } + return lookupList; +} +function chainingSubstitutionFormat3(contextParams, subtable) { + var lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length; + if (contextParams.context.length < lookupsCount) { + return []; + } + var inputLookups = lookupCoverageList( + subtable.inputCoverage, + contextParams + ); + if (inputLookups === -1) { + return []; + } + var lookaheadOffset = subtable.inputCoverage.length - 1; + if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) { + return []; + } + var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset); + while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) { + lookaheadContext.shift(); + } + var lookaheadParams = new ContextParams(lookaheadContext, 0); + var lookaheadLookups = lookupCoverageList( + subtable.lookaheadCoverage, + lookaheadParams + ); + var backtrackContext = [].concat(contextParams.backtrack); + backtrackContext.reverse(); + while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) { + backtrackContext.shift(); + } + if (backtrackContext.length < subtable.backtrackCoverage.length) { + return []; + } + var backtrackParams = new ContextParams(backtrackContext, 0); + var backtrackLookups = lookupCoverageList( + subtable.backtrackCoverage, + backtrackParams + ); + var contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length; + var substitutions = []; + if (contextRulesMatch) { + for (var i = 0; i < subtable.lookupRecords.length; i++) { + var lookupRecord = subtable.lookupRecords[i]; + var lookupListIndex = lookupRecord.lookupListIndex; + var lookupTable = this.getLookupByIndex(lookupListIndex); + for (var s = 0; s < lookupTable.subtables.length; s++) { + var subtable$1 = lookupTable.subtables[s]; + var lookup = this.getLookupMethod(lookupTable, subtable$1); + var substitutionType = this.getSubstitutionType(lookupTable, subtable$1); + if (substitutionType === "12") { + for (var n2 = 0; n2 < inputLookups.length; n2++) { + var glyphIndex = contextParams.get(n2); + var substitution = lookup(glyphIndex); + if (substitution) { + substitutions.push(substitution); + } + } + } + } + } + } + return substitutions; +} +function ligatureSubstitutionFormat1(contextParams, subtable) { + var glyphIndex = contextParams.current; + var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (ligSetIndex === -1) { + return null; + } + var ligature; + var ligatureSet = subtable.ligatureSets[ligSetIndex]; + for (var s = 0; s < ligatureSet.length; s++) { + ligature = ligatureSet[s]; + for (var l2 = 0; l2 < ligature.components.length; l2++) { + var lookaheadItem = contextParams.lookahead[l2]; + var component = ligature.components[l2]; + if (lookaheadItem !== component) { + break; + } + if (l2 === ligature.components.length - 1) { + return ligature; + } + } + } + return null; +} +function decompositionSubstitutionFormat1(glyphIndex, subtable) { + var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); + if (substituteIndex === -1) { + return null; + } + return subtable.sequences[substituteIndex]; +} +FeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() { + var scripts = this.font.tables.gsub.scripts; + for (var s = 0; s < scripts.length; s++) { + var script = scripts[s]; + if (script.tag === "DFLT") { + return script.script.defaultLangSys.featureIndexes; + } + } + return []; +}; +FeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) { + var tables = this.font.tables; + if (!tables.gsub) { + return []; + } + if (!scriptTag) { + return this.getDefaultScriptFeaturesIndexes(); + } + var scripts = this.font.tables.gsub.scripts; + for (var i = 0; i < scripts.length; i++) { + var script = scripts[i]; + if (script.tag === scriptTag && script.script.defaultLangSys) { + return script.script.defaultLangSys.featureIndexes; + } else { + var langSysRecords = script.langSysRecords; + if (!!langSysRecords) { + for (var j = 0; j < langSysRecords.length; j++) { + var langSysRecord = langSysRecords[j]; + if (langSysRecord.tag === scriptTag) { + var langSys = langSysRecord.langSys; + return langSys.featureIndexes; + } + } + } + } + } + return this.getDefaultScriptFeaturesIndexes(); +}; +FeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) { + var tags = {}; + for (var i = 0; i < features.length; i++) { + var tag = features[i].tag; + var feature = features[i].feature; + tags[tag] = feature; + } + this.features[scriptTag].tags = tags; +}; +FeatureQuery.prototype.getScriptFeatures = function(scriptTag) { + var features = this.features[scriptTag]; + if (this.features.hasOwnProperty(scriptTag)) { + return features; + } + var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag); + if (!featuresIndexes) { + return null; + } + var gsub2 = this.font.tables.gsub; + features = featuresIndexes.map(function(index2) { + return gsub2.features[index2]; + }); + this.features[scriptTag] = features; + this.mapTagsToFeatures(features, scriptTag); + return features; +}; +FeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) { + var lookupType = lookupTable.lookupType.toString(); + var substFormat = subtable.substFormat.toString(); + return lookupType + substFormat; +}; +FeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) { + var this$1 = this; + var substitutionType = this.getSubstitutionType(lookupTable, subtable); + switch (substitutionType) { + case "11": + return function(glyphIndex) { + return singleSubstitutionFormat1.apply( + this$1, + [glyphIndex, subtable] + ); + }; + case "12": + return function(glyphIndex) { + return singleSubstitutionFormat2.apply( + this$1, + [glyphIndex, subtable] + ); + }; + case "63": + return function(contextParams) { + return chainingSubstitutionFormat3.apply( + this$1, + [contextParams, subtable] + ); + }; + case "41": + return function(contextParams) { + return ligatureSubstitutionFormat1.apply( + this$1, + [contextParams, subtable] + ); + }; + case "21": + return function(glyphIndex) { + return decompositionSubstitutionFormat1.apply( + this$1, + [glyphIndex, subtable] + ); + }; + default: + throw new Error( + "lookupType: " + lookupTable.lookupType + " - substFormat: " + subtable.substFormat + " is not yet supported" + ); + } +}; +FeatureQuery.prototype.lookupFeature = function(query) { + var contextParams = query.contextParams; + var currentIndex = contextParams.index; + var feature = this.getFeature({ + tag: query.tag, + script: query.script + }); + if (!feature) { + return new Error( + "font '" + this.font.names.fullName.en + "' doesn't support feature '" + query.tag + "' for script '" + query.script + "'." + ); + } + var lookups = this.getFeatureLookups(feature); + var substitutions = [].concat(contextParams.context); + for (var l2 = 0; l2 < lookups.length; l2++) { + var lookupTable = lookups[l2]; + var subtables = this.getLookupSubtables(lookupTable); + for (var s = 0; s < subtables.length; s++) { + var subtable = subtables[s]; + var substType = this.getSubstitutionType(lookupTable, subtable); + var lookup = this.getLookupMethod(lookupTable, subtable); + var substitution = void 0; + switch (substType) { + case "11": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 11, + tag: query.tag, + substitution + })); + } + break; + case "12": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 12, + tag: query.tag, + substitution + })); + } + break; + case "63": + substitution = lookup(contextParams); + if (Array.isArray(substitution) && substitution.length) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 63, + tag: query.tag, + substitution + })); + } + break; + case "41": + substitution = lookup(contextParams); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 41, + tag: query.tag, + substitution + })); + } + break; + case "21": + substitution = lookup(contextParams.current); + if (substitution) { + substitutions.splice(currentIndex, 1, new SubstitutionAction({ + id: 21, + tag: query.tag, + substitution + })); + } + break; + } + contextParams = new ContextParams(substitutions, currentIndex); + if (Array.isArray(substitution) && !substitution.length) { + continue; + } + substitution = null; + } + } + return substitutions.length ? substitutions : null; +}; +FeatureQuery.prototype.supports = function(query) { + if (!query.script) { + return false; + } + this.getScriptFeatures(query.script); + var supportedScript = this.features.hasOwnProperty(query.script); + if (!query.tag) { + return supportedScript; + } + var supportedFeature = this.features[query.script].some(function(feature) { + return feature.tag === query.tag; + }); + return supportedScript && supportedFeature; +}; +FeatureQuery.prototype.getLookupSubtables = function(lookupTable) { + return lookupTable.subtables || null; +}; +FeatureQuery.prototype.getLookupByIndex = function(index2) { + var lookups = this.font.tables.gsub.lookups; + return lookups[index2] || null; +}; +FeatureQuery.prototype.getFeatureLookups = function(feature) { + return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this)); +}; +FeatureQuery.prototype.getFeature = function getFeature(query) { + if (!this.font) { + return { FAIL: "No font was found" }; + } + if (!this.features.hasOwnProperty(query.script)) { + this.getScriptFeatures(query.script); + } + var scriptFeatures = this.features[query.script]; + if (!scriptFeatures) { + return { FAIL: "No feature for script " + query.script }; + } + if (!scriptFeatures.tags[query.tag]) { + return null; + } + return this.features[query.script].tags[query.tag]; +}; +function arabicWordStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? arabic first char + prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char + !isArabicChar(prevChar) && isArabicChar(char) + ); +} +function arabicWordEndCheck(contextParams) { + var nextChar = contextParams.get(1); + return ( + // ? last arabic char + nextChar === null || // ? next char is not arabic + !isArabicChar(nextChar) + ); +} +var arabicWordCheck = { + startCheck: arabicWordStartCheck, + endCheck: arabicWordEndCheck +}; +function arabicSentenceStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? an arabic char preceded with a non arabic char + (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar) + ); +} +function arabicSentenceEndCheck(contextParams) { + var nextChar = contextParams.get(1); + switch (true) { + case nextChar === null: + return true; + case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)): + var nextIsWhitespace = isWhiteSpace(nextChar); + if (!nextIsWhitespace) { + return true; + } + if (nextIsWhitespace) { + var arabicCharAhead = false; + arabicCharAhead = contextParams.lookahead.some( + function(c2) { + return isArabicChar(c2) || isTashkeelArabicChar(c2); + } + ); + if (!arabicCharAhead) { + return true; + } + } + break; + default: + return false; + } +} +var arabicSentenceCheck = { + startCheck: arabicSentenceStartCheck, + endCheck: arabicSentenceEndCheck +}; +function singleSubstitutionFormat1$1(action, tokens, index2) { + tokens[index2].setState(action.tag, action.substitution); +} +function singleSubstitutionFormat2$1(action, tokens, index2) { + tokens[index2].setState(action.tag, action.substitution); +} +function chainingSubstitutionFormat3$1(action, tokens, index2) { + action.substitution.forEach(function(subst, offset) { + var token = tokens[index2 + offset]; + token.setState(action.tag, subst); + }); +} +function ligatureSubstitutionFormat1$1(action, tokens, index2) { + var token = tokens[index2]; + token.setState(action.tag, action.substitution.ligGlyph); + var compsCount = action.substitution.components.length; + for (var i = 0; i < compsCount; i++) { + token = tokens[index2 + i + 1]; + token.setState("deleted", true); + } +} +var SUBSTITUTIONS = { + 11: singleSubstitutionFormat1$1, + 12: singleSubstitutionFormat2$1, + 63: chainingSubstitutionFormat3$1, + 41: ligatureSubstitutionFormat1$1 +}; +function applySubstitution(action, tokens, index2) { + if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) { + SUBSTITUTIONS[action.id](action, tokens, index2); + } +} +function willConnectPrev(charContextParams) { + var backtrack = [].concat(charContextParams.backtrack); + for (var i = backtrack.length - 1; i >= 0; i--) { + var prevChar = backtrack[i]; + var isolated = isIsolatedArabicChar(prevChar); + var tashkeel = isTashkeelArabicChar(prevChar); + if (!isolated && !tashkeel) { + return true; + } + if (isolated) { + return false; + } + } + return false; +} +function willConnectNext(charContextParams) { + if (isIsolatedArabicChar(charContextParams.current)) { + return false; + } + for (var i = 0; i < charContextParams.lookahead.length; i++) { + var nextChar = charContextParams.lookahead[i]; + var tashkeel = isTashkeelArabicChar(nextChar); + if (!tashkeel) { + return true; + } + } + return false; +} +function arabicPresentationForms(range) { + var this$1 = this; + var script = "arab"; + var tags = this.featuresTags[script]; + var tokens = this.tokenizer.getRangeTokens(range); + if (tokens.length === 1) { + return; + } + var contextParams = new ContextParams( + tokens.map( + function(token) { + return token.getState("glyphIndex"); + } + ), + 0 + ); + var charContextParams = new ContextParams( + tokens.map( + function(token) { + return token.char; + } + ), + 0 + ); + tokens.forEach(function(token, index2) { + if (isTashkeelArabicChar(token.char)) { + return; + } + contextParams.setCurrentIndex(index2); + charContextParams.setCurrentIndex(index2); + var CONNECT = 0; + if (willConnectPrev(charContextParams)) { + CONNECT |= 1; + } + if (willConnectNext(charContextParams)) { + CONNECT |= 2; + } + var tag; + switch (CONNECT) { + case 1: + tag = "fina"; + break; + case 2: + tag = "init"; + break; + case 3: + tag = "medi"; + break; + } + if (tags.indexOf(tag) === -1) { + return; + } + var substitutions = this$1.query.lookupFeature({ + tag, + script, + contextParams + }); + if (substitutions instanceof Error) { + return console.info(substitutions.message); + } + substitutions.forEach(function(action, index3) { + if (action instanceof SubstitutionAction) { + applySubstitution(action, tokens, index3); + contextParams.context[index3] = action.substitution; + } + }); + }); +} +function getContextParams(tokens, index2) { + var context = tokens.map(function(token) { + return token.activeState.value; + }); + return new ContextParams(context, index2 || 0); +} +function arabicRequiredLigatures(range) { + var this$1 = this; + var script = "arab"; + var tokens = this.tokenizer.getRangeTokens(range); + var contextParams = getContextParams(tokens); + contextParams.context.forEach(function(glyphIndex, index2) { + contextParams.setCurrentIndex(index2); + var substitutions = this$1.query.lookupFeature({ + tag: "rlig", + script, + contextParams + }); + if (substitutions.length) { + substitutions.forEach( + function(action) { + return applySubstitution(action, tokens, index2); + } + ); + contextParams = getContextParams(tokens); + } + }); +} +function latinWordStartCheck(contextParams) { + var char = contextParams.current; + var prevChar = contextParams.get(-1); + return ( + // ? latin first char + prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char + !isLatinChar(prevChar) && isLatinChar(char) + ); +} +function latinWordEndCheck(contextParams) { + var nextChar = contextParams.get(1); + return ( + // ? last latin char + nextChar === null || // ? next char is not latin + !isLatinChar(nextChar) + ); +} +var latinWordCheck = { + startCheck: latinWordStartCheck, + endCheck: latinWordEndCheck +}; +function getContextParams$1(tokens, index2) { + var context = tokens.map(function(token) { + return token.activeState.value; + }); + return new ContextParams(context, index2 || 0); +} +function latinLigature(range) { + var this$1 = this; + var script = "latn"; + var tokens = this.tokenizer.getRangeTokens(range); + var contextParams = getContextParams$1(tokens); + contextParams.context.forEach(function(glyphIndex, index2) { + contextParams.setCurrentIndex(index2); + var substitutions = this$1.query.lookupFeature({ + tag: "liga", + script, + contextParams + }); + if (substitutions.length) { + substitutions.forEach( + function(action) { + return applySubstitution(action, tokens, index2); + } + ); + contextParams = getContextParams$1(tokens); + } + }); +} +function Bidi(baseDir) { + this.baseDir = baseDir || "ltr"; + this.tokenizer = new Tokenizer(); + this.featuresTags = {}; +} +Bidi.prototype.setText = function(text2) { + this.text = text2; +}; +Bidi.prototype.contextChecks = { + latinWordCheck, + arabicWordCheck, + arabicSentenceCheck +}; +function registerContextChecker(checkId) { + var check2 = this.contextChecks[checkId + "Check"]; + return this.tokenizer.registerContextChecker( + checkId, + check2.startCheck, + check2.endCheck + ); +} +function tokenizeText() { + registerContextChecker.call(this, "latinWord"); + registerContextChecker.call(this, "arabicWord"); + registerContextChecker.call(this, "arabicSentence"); + return this.tokenizer.tokenize(this.text); +} +function reverseArabicSentences() { + var this$1 = this; + var ranges = this.tokenizer.getContextRanges("arabicSentence"); + ranges.forEach(function(range) { + var rangeTokens = this$1.tokenizer.getRangeTokens(range); + this$1.tokenizer.replaceRange( + range.startIndex, + range.endOffset, + rangeTokens.reverse() + ); + }); +} +Bidi.prototype.registerFeatures = function(script, tags) { + var this$1 = this; + var supportedTags = tags.filter( + function(tag) { + return this$1.query.supports({ script, tag }); + } + ); + if (!this.featuresTags.hasOwnProperty(script)) { + this.featuresTags[script] = supportedTags; + } else { + this.featuresTags[script] = this.featuresTags[script].concat(supportedTags); + } +}; +Bidi.prototype.applyFeatures = function(font, features) { + if (!font) { + throw new Error( + "No valid font was provided to apply features" + ); + } + if (!this.query) { + this.query = new FeatureQuery(font); + } + for (var f = 0; f < features.length; f++) { + var feature = features[f]; + if (!this.query.supports({ script: feature.script })) { + continue; + } + this.registerFeatures(feature.script, feature.tags); + } +}; +Bidi.prototype.registerModifier = function(modifierId, condition, modifier) { + this.tokenizer.registerModifier(modifierId, condition, modifier); +}; +function checkGlyphIndexStatus() { + if (this.tokenizer.registeredModifiers.indexOf("glyphIndex") === -1) { + throw new Error( + "glyphIndex modifier is required to apply arabic presentation features." + ); + } +} +function applyArabicPresentationForms() { + var this$1 = this; + var script = "arab"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("arabicWord"); + ranges.forEach(function(range) { + arabicPresentationForms.call(this$1, range); + }); +} +function applyArabicRequireLigatures() { + var this$1 = this; + var script = "arab"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + var tags = this.featuresTags[script]; + if (tags.indexOf("rlig") === -1) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("arabicWord"); + ranges.forEach(function(range) { + arabicRequiredLigatures.call(this$1, range); + }); +} +function applyLatinLigatures() { + var this$1 = this; + var script = "latn"; + if (!this.featuresTags.hasOwnProperty(script)) { + return; + } + var tags = this.featuresTags[script]; + if (tags.indexOf("liga") === -1) { + return; + } + checkGlyphIndexStatus.call(this); + var ranges = this.tokenizer.getContextRanges("latinWord"); + ranges.forEach(function(range) { + latinLigature.call(this$1, range); + }); +} +Bidi.prototype.checkContextReady = function(contextId) { + return !!this.tokenizer.getContext(contextId); +}; +Bidi.prototype.applyFeaturesToContexts = function() { + if (this.checkContextReady("arabicWord")) { + applyArabicPresentationForms.call(this); + applyArabicRequireLigatures.call(this); + } + if (this.checkContextReady("latinWord")) { + applyLatinLigatures.call(this); + } + if (this.checkContextReady("arabicSentence")) { + reverseArabicSentences.call(this); + } +}; +Bidi.prototype.processText = function(text2) { + if (!this.text || this.text !== text2) { + this.setText(text2); + tokenizeText.call(this); + this.applyFeaturesToContexts(); + } +}; +Bidi.prototype.getBidiText = function(text2) { + this.processText(text2); + return this.tokenizer.getText(); +}; +Bidi.prototype.getTextGlyphs = function(text2) { + this.processText(text2); + var indexes = []; + for (var i = 0; i < this.tokenizer.tokens.length; i++) { + var token = this.tokenizer.tokens[i]; + if (token.state.deleted) { + continue; + } + var index2 = token.activeState.value; + indexes.push(Array.isArray(index2) ? index2[0] : index2); + } + return indexes; +}; +function Font2(options) { + options = options || {}; + options.tables = options.tables || {}; + if (!options.empty) { + checkArgument(options.familyName, "When creating a new Font object, familyName is required."); + checkArgument(options.styleName, "When creating a new Font object, styleName is required."); + checkArgument(options.unitsPerEm, "When creating a new Font object, unitsPerEm is required."); + checkArgument(options.ascender, "When creating a new Font object, ascender is required."); + checkArgument(options.descender <= 0, "When creating a new Font object, negative descender value is required."); + this.names = { + fontFamily: { en: options.familyName || " " }, + fontSubfamily: { en: options.styleName || " " }, + fullName: { en: options.fullName || options.familyName + " " + options.styleName }, + // postScriptName may not contain any whitespace + postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\s/g, "") }, + designer: { en: options.designer || " " }, + designerURL: { en: options.designerURL || " " }, + manufacturer: { en: options.manufacturer || " " }, + manufacturerURL: { en: options.manufacturerURL || " " }, + license: { en: options.license || " " }, + licenseURL: { en: options.licenseURL || " " }, + version: { en: options.version || "Version 0.1" }, + description: { en: options.description || " " }, + copyright: { en: options.copyright || " " }, + trademark: { en: options.trademark || " " } + }; + this.unitsPerEm = options.unitsPerEm || 1e3; + this.ascender = options.ascender; + this.descender = options.descender; + this.createdTimestamp = options.createdTimestamp; + this.tables = Object.assign(options.tables, { + os2: Object.assign({ + usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM, + usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM, + fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR + }, options.tables.os2) + }); + } + this.supported = true; + this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []); + this.encoding = new DefaultEncoding(this); + this.position = new Position(this); + this.substitution = new Substitution(this); + this.tables = this.tables || {}; + this._push = null; + this._hmtxTableData = {}; + Object.defineProperty(this, "hinting", { + get: function() { + if (this._hinting) { + return this._hinting; + } + if (this.outlinesFormat === "truetype") { + return this._hinting = new Hinting(this); + } + } + }); +} +Font2.prototype.hasChar = function(c2) { + return this.encoding.charToGlyphIndex(c2) !== null; +}; +Font2.prototype.charToGlyphIndex = function(s) { + return this.encoding.charToGlyphIndex(s); +}; +Font2.prototype.charToGlyph = function(c2) { + var glyphIndex = this.charToGlyphIndex(c2); + var glyph = this.glyphs.get(glyphIndex); + if (!glyph) { + glyph = this.glyphs.get(0); + } + return glyph; +}; +Font2.prototype.updateFeatures = function(options) { + return this.defaultRenderOptions.features.map(function(feature) { + if (feature.script === "latn") { + return { + script: "latn", + tags: feature.tags.filter(function(tag) { + return options[tag]; + }) + }; + } else { + return feature; + } + }); +}; +Font2.prototype.stringToGlyphs = function(s, options) { + var this$1 = this; + var bidi = new Bidi(); + var charToGlyphIndexMod = function(token) { + return this$1.charToGlyphIndex(token.char); + }; + bidi.registerModifier("glyphIndex", null, charToGlyphIndexMod); + var features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features; + bidi.applyFeatures(this, features); + var indexes = bidi.getTextGlyphs(s); + var length2 = indexes.length; + var glyphs = new Array(length2); + var notdef = this.glyphs.get(0); + for (var i = 0; i < length2; i += 1) { + glyphs[i] = this.glyphs.get(indexes[i]) || notdef; + } + return glyphs; +}; +Font2.prototype.nameToGlyphIndex = function(name2) { + return this.glyphNames.nameToGlyphIndex(name2); +}; +Font2.prototype.nameToGlyph = function(name2) { + var glyphIndex = this.nameToGlyphIndex(name2); + var glyph = this.glyphs.get(glyphIndex); + if (!glyph) { + glyph = this.glyphs.get(0); + } + return glyph; +}; +Font2.prototype.glyphIndexToName = function(gid) { + if (!this.glyphNames.glyphIndexToName) { + return ""; + } + return this.glyphNames.glyphIndexToName(gid); +}; +Font2.prototype.getKerningValue = function(leftGlyph, rightGlyph) { + leftGlyph = leftGlyph.index || leftGlyph; + rightGlyph = rightGlyph.index || rightGlyph; + var gposKerning = this.position.defaultKerningTables; + if (gposKerning) { + return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph); + } + return this.kerningPairs[leftGlyph + "," + rightGlyph] || 0; +}; +Font2.prototype.defaultRenderOptions = { + kerning: true, + features: [ + /** + * these 4 features are required to render Arabic text properly + * and shouldn't be turned off when rendering arabic text. + */ + { script: "arab", tags: ["init", "medi", "fina", "rlig"] }, + { script: "latn", tags: ["liga", "rlig"] } + ] +}; +Font2.prototype.forEachGlyph = function(text2, x2, y2, fontSize, options, callback) { + x2 = x2 !== void 0 ? x2 : 0; + y2 = y2 !== void 0 ? y2 : 0; + fontSize = fontSize !== void 0 ? fontSize : 72; + options = Object.assign({}, this.defaultRenderOptions, options); + var fontScale = 1 / this.unitsPerEm * fontSize; + var glyphs = this.stringToGlyphs(text2, options); + var kerningLookups; + if (options.kerning) { + var script = options.script || this.position.getDefaultScriptName(); + kerningLookups = this.position.getKerningTables(script, options.language); + } + for (var i = 0; i < glyphs.length; i += 1) { + var glyph = glyphs[i]; + callback.call(this, glyph, x2, y2, fontSize, options); + if (glyph.advanceWidth) { + x2 += glyph.advanceWidth * fontScale; + } + if (options.kerning && i < glyphs.length - 1) { + var kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]); + x2 += kerningValue * fontScale; + } + if (options.letterSpacing) { + x2 += options.letterSpacing * fontSize; + } else if (options.tracking) { + x2 += options.tracking / 1e3 * fontSize; + } + } + return x2; +}; +Font2.prototype.getPath = function(text2, x2, y2, fontSize, options) { + var fullPath = new Path2(); + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); + fullPath.extend(glyphPath); + }); + return fullPath; +}; +Font2.prototype.getPaths = function(text2, x2, y2, fontSize, options) { + var glyphPaths = []; + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); + glyphPaths.push(glyphPath); + }); + return glyphPaths; +}; +Font2.prototype.getAdvanceWidth = function(text2, fontSize, options) { + return this.forEachGlyph(text2, 0, 0, fontSize, options, function() { + }); +}; +Font2.prototype.draw = function(ctx, text2, x2, y2, fontSize, options) { + this.getPath(text2, x2, y2, fontSize, options).draw(ctx); +}; +Font2.prototype.drawPoints = function(ctx, text2, x2, y2, fontSize, options) { + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + glyph.drawPoints(ctx, gX, gY, gFontSize); + }); +}; +Font2.prototype.drawMetrics = function(ctx, text2, x2, y2, fontSize, options) { + this.forEachGlyph(text2, x2, y2, fontSize, options, function(glyph, gX, gY, gFontSize) { + glyph.drawMetrics(ctx, gX, gY, gFontSize); + }); +}; +Font2.prototype.getEnglishName = function(name2) { + var translations = this.names[name2]; + if (translations) { + return translations.en; + } +}; +Font2.prototype.validate = function() { + var _this = this; + function assert(predicate, message) { + } + function assertNamePresent(name2) { + var englishName = _this.getEnglishName(name2); + assert(englishName && englishName.trim().length > 0); + } + assertNamePresent("fontFamily"); + assertNamePresent("weightName"); + assertNamePresent("manufacturer"); + assertNamePresent("copyright"); + assertNamePresent("version"); + assert(this.unitsPerEm > 0); +}; +Font2.prototype.toTables = function() { + return sfnt.fontToTable(this); +}; +Font2.prototype.toBuffer = function() { + console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."); + return this.toArrayBuffer(); +}; +Font2.prototype.toArrayBuffer = function() { + var sfntTable = this.toTables(); + var bytes = sfntTable.encode(); + var buffer = new ArrayBuffer(bytes.length); + var intArray = new Uint8Array(buffer); + for (var i = 0; i < bytes.length; i++) { + intArray[i] = bytes[i]; + } + return buffer; +}; +Font2.prototype.download = function(fileName) { + var familyName = this.getEnglishName("fontFamily"); + var styleName = this.getEnglishName("fontSubfamily"); + fileName = fileName || familyName.replace(/\s/g, "") + "-" + styleName + ".otf"; + var arrayBuffer = this.toArrayBuffer(); + window.URL = window.URL || window.webkitURL; + if (window.URL) { + var dataView = new DataView(arrayBuffer); + var blob = new Blob([dataView], { type: "font/opentype" }); + var link = document.createElement("a"); + link.href = window.URL.createObjectURL(blob); + link.download = fileName; + var event = document.createEvent("MouseEvents"); + event.initEvent("click", true, false); + link.dispatchEvent(event); + } else { + console.warn("Font file could not be downloaded. Try using a different browser."); + } +}; +Font2.prototype.fsSelectionValues = { + ITALIC: 1, + //1 + UNDERSCORE: 2, + //2 + NEGATIVE: 4, + //4 + OUTLINED: 8, + //8 + STRIKEOUT: 16, + //16 + BOLD: 32, + //32 + REGULAR: 64, + //64 + USER_TYPO_METRICS: 128, + //128 + WWS: 256, + //256 + OBLIQUE: 512 + //512 +}; +Font2.prototype.usWidthClasses = { + ULTRA_CONDENSED: 1, + EXTRA_CONDENSED: 2, + CONDENSED: 3, + SEMI_CONDENSED: 4, + MEDIUM: 5, + SEMI_EXPANDED: 6, + EXPANDED: 7, + EXTRA_EXPANDED: 8, + ULTRA_EXPANDED: 9 +}; +Font2.prototype.usWeightClasses = { + THIN: 100, + EXTRA_LIGHT: 200, + LIGHT: 300, + NORMAL: 400, + MEDIUM: 500, + SEMI_BOLD: 600, + BOLD: 700, + EXTRA_BOLD: 800, + BLACK: 900 +}; +function addName(name2, names) { + var nameString = JSON.stringify(name2); + var nameID = 256; + for (var nameKey in names) { + var n2 = parseInt(nameKey); + if (!n2 || n2 < 256) { + continue; + } + if (JSON.stringify(names[nameKey]) === nameString) { + return n2; + } + if (nameID <= n2) { + nameID = n2 + 1; + } + } + names[nameID] = name2; + return nameID; +} +function makeFvarAxis(n2, axis, names) { + var nameID = addName(axis.name, names); + return [ + { name: "tag_" + n2, type: "TAG", value: axis.tag }, + { name: "minValue_" + n2, type: "FIXED", value: axis.minValue << 16 }, + { name: "defaultValue_" + n2, type: "FIXED", value: axis.defaultValue << 16 }, + { name: "maxValue_" + n2, type: "FIXED", value: axis.maxValue << 16 }, + { name: "flags_" + n2, type: "USHORT", value: 0 }, + { name: "nameID_" + n2, type: "USHORT", value: nameID } + ]; +} +function parseFvarAxis(data2, start, names) { + var axis = {}; + var p2 = new parse.Parser(data2, start); + axis.tag = p2.parseTag(); + axis.minValue = p2.parseFixed(); + axis.defaultValue = p2.parseFixed(); + axis.maxValue = p2.parseFixed(); + p2.skip("uShort", 1); + axis.name = names[p2.parseUShort()] || {}; + return axis; +} +function makeFvarInstance(n2, inst, axes, names) { + var nameID = addName(inst.name, names); + var fields = [ + { name: "nameID_" + n2, type: "USHORT", value: nameID }, + { name: "flags_" + n2, type: "USHORT", value: 0 } + ]; + for (var i = 0; i < axes.length; ++i) { + var axisTag = axes[i].tag; + fields.push({ + name: "axis_" + n2 + " " + axisTag, + type: "FIXED", + value: inst.coordinates[axisTag] << 16 + }); + } + return fields; +} +function parseFvarInstance(data2, start, axes, names) { + var inst = {}; + var p2 = new parse.Parser(data2, start); + inst.name = names[p2.parseUShort()] || {}; + p2.skip("uShort", 1); + inst.coordinates = {}; + for (var i = 0; i < axes.length; ++i) { + inst.coordinates[axes[i].tag] = p2.parseFixed(); + } + return inst; +} +function makeFvarTable(fvar2, names) { + var result = new table.Table("fvar", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "offsetToData", type: "USHORT", value: 0 }, + { name: "countSizePairs", type: "USHORT", value: 2 }, + { name: "axisCount", type: "USHORT", value: fvar2.axes.length }, + { name: "axisSize", type: "USHORT", value: 20 }, + { name: "instanceCount", type: "USHORT", value: fvar2.instances.length }, + { name: "instanceSize", type: "USHORT", value: 4 + fvar2.axes.length * 4 } + ]); + result.offsetToData = result.sizeOf(); + for (var i = 0; i < fvar2.axes.length; i++) { + result.fields = result.fields.concat(makeFvarAxis(i, fvar2.axes[i], names)); + } + for (var j = 0; j < fvar2.instances.length; j++) { + result.fields = result.fields.concat(makeFvarInstance(j, fvar2.instances[j], fvar2.axes, names)); + } + return result; +} +function parseFvarTable(data2, start, names) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseULong(); + check.argument(tableVersion === 65536, "Unsupported fvar table version."); + var offsetToData = p2.parseOffset16(); + p2.skip("uShort", 1); + var axisCount = p2.parseUShort(); + var axisSize = p2.parseUShort(); + var instanceCount = p2.parseUShort(); + var instanceSize = p2.parseUShort(); + var axes = []; + for (var i = 0; i < axisCount; i++) { + axes.push(parseFvarAxis(data2, start + offsetToData + i * axisSize, names)); + } + var instances = []; + var instanceStart = start + offsetToData + axisCount * axisSize; + for (var j = 0; j < instanceCount; j++) { + instances.push(parseFvarInstance(data2, instanceStart + j * instanceSize, axes, names)); + } + return { axes, instances }; +} +var fvar = { make: makeFvarTable, parse: parseFvarTable }; +var attachList = function() { + return { + coverage: this.parsePointer(Parser2.coverage), + attachPoints: this.parseList(Parser2.pointer(Parser2.uShortList)) + }; +}; +var caretValue = function() { + var format = this.parseUShort(); + check.argument( + format === 1 || format === 2 || format === 3, + "Unsupported CaretValue table version." + ); + if (format === 1) { + return { coordinate: this.parseShort() }; + } else if (format === 2) { + return { pointindex: this.parseShort() }; + } else if (format === 3) { + return { coordinate: this.parseShort() }; + } +}; +var ligGlyph = function() { + return this.parseList(Parser2.pointer(caretValue)); +}; +var ligCaretList = function() { + return { + coverage: this.parsePointer(Parser2.coverage), + ligGlyphs: this.parseList(Parser2.pointer(ligGlyph)) + }; +}; +var markGlyphSets = function() { + this.parseUShort(); + return this.parseList(Parser2.pointer(Parser2.coverage)); +}; +function parseGDEFTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument( + tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3, + "Unsupported GDEF table version." + ); + var gdef2 = { + version: tableVersion, + classDef: p2.parsePointer(Parser2.classDef), + attachList: p2.parsePointer(attachList), + ligCaretList: p2.parsePointer(ligCaretList), + markAttachClassDef: p2.parsePointer(Parser2.classDef) + }; + if (tableVersion >= 1.2) { + gdef2.markGlyphSets = p2.parsePointer(markGlyphSets); + } + return gdef2; +} +var gdef = { parse: parseGDEFTable }; +var subtableParsers$1 = new Array(10); +subtableParsers$1[1] = function parseLookup12() { + var start = this.offset + this.relativeOffset; + var posformat = this.parseUShort(); + if (posformat === 1) { + return { + posFormat: 1, + coverage: this.parsePointer(Parser2.coverage), + value: this.parseValueRecord() + }; + } else if (posformat === 2) { + return { + posFormat: 2, + coverage: this.parsePointer(Parser2.coverage), + values: this.parseValueRecordList() + }; + } + check.assert(false, "0x" + start.toString(16) + ": GPOS lookup type 1 format must be 1 or 2."); +}; +subtableParsers$1[2] = function parseLookup22() { + var start = this.offset + this.relativeOffset; + var posFormat = this.parseUShort(); + check.assert(posFormat === 1 || posFormat === 2, "0x" + start.toString(16) + ": GPOS lookup type 2 format must be 1 or 2."); + var coverage = this.parsePointer(Parser2.coverage); + var valueFormat1 = this.parseUShort(); + var valueFormat2 = this.parseUShort(); + if (posFormat === 1) { + return { + posFormat, + coverage, + valueFormat1, + valueFormat2, + pairSets: this.parseList(Parser2.pointer(Parser2.list(function() { + return { + // pairValueRecord + secondGlyph: this.parseUShort(), + value1: this.parseValueRecord(valueFormat1), + value2: this.parseValueRecord(valueFormat2) + }; + }))) + }; + } else if (posFormat === 2) { + var classDef1 = this.parsePointer(Parser2.classDef); + var classDef2 = this.parsePointer(Parser2.classDef); + var class1Count = this.parseUShort(); + var class2Count = this.parseUShort(); + return { + // Class Pair Adjustment + posFormat, + coverage, + valueFormat1, + valueFormat2, + classDef1, + classDef2, + class1Count, + class2Count, + classRecords: this.parseList(class1Count, Parser2.list(class2Count, function() { + return { + value1: this.parseValueRecord(valueFormat1), + value2: this.parseValueRecord(valueFormat2) + }; + })) + }; + } +}; +subtableParsers$1[3] = function parseLookup32() { + return { error: "GPOS Lookup 3 not supported" }; +}; +subtableParsers$1[4] = function parseLookup42() { + return { error: "GPOS Lookup 4 not supported" }; +}; +subtableParsers$1[5] = function parseLookup52() { + return { error: "GPOS Lookup 5 not supported" }; +}; +subtableParsers$1[6] = function parseLookup62() { + return { error: "GPOS Lookup 6 not supported" }; +}; +subtableParsers$1[7] = function parseLookup72() { + return { error: "GPOS Lookup 7 not supported" }; +}; +subtableParsers$1[8] = function parseLookup82() { + return { error: "GPOS Lookup 8 not supported" }; +}; +subtableParsers$1[9] = function parseLookup9() { + return { error: "GPOS Lookup 9 not supported" }; +}; +function parseGposTable(data2, start) { + start = start || 0; + var p2 = new Parser2(data2, start); + var tableVersion = p2.parseVersion(1); + check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GPOS table version " + tableVersion); + if (tableVersion === 1) { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers$1) + }; + } else { + return { + version: tableVersion, + scripts: p2.parseScriptList(), + features: p2.parseFeatureList(), + lookups: p2.parseLookupList(subtableParsers$1), + variations: p2.parseFeatureVariationsList() + }; + } +} +var subtableMakers$1 = new Array(10); +function makeGposTable(gpos2) { + return new table.Table("GPOS", [ + { name: "version", type: "ULONG", value: 65536 }, + { name: "scripts", type: "TABLE", value: new table.ScriptList(gpos2.scripts) }, + { name: "features", type: "TABLE", value: new table.FeatureList(gpos2.features) }, + { name: "lookups", type: "TABLE", value: new table.LookupList(gpos2.lookups, subtableMakers$1) } + ]); +} +var gpos = { parse: parseGposTable, make: makeGposTable }; +function parseWindowsKernTable(p2) { + var pairs = {}; + p2.skip("uShort"); + var subtableVersion = p2.parseUShort(); + check.argument(subtableVersion === 0, "Unsupported kern sub-table version."); + p2.skip("uShort", 2); + var nPairs = p2.parseUShort(); + p2.skip("uShort", 3); + for (var i = 0; i < nPairs; i += 1) { + var leftIndex = p2.parseUShort(); + var rightIndex = p2.parseUShort(); + var value2 = p2.parseShort(); + pairs[leftIndex + "," + rightIndex] = value2; + } + return pairs; +} +function parseMacKernTable(p2) { + var pairs = {}; + p2.skip("uShort"); + var nTables = p2.parseULong(); + if (nTables > 1) { + console.warn("Only the first kern subtable is supported."); + } + p2.skip("uLong"); + var coverage = p2.parseUShort(); + var subtableVersion = coverage & 255; + p2.skip("uShort"); + if (subtableVersion === 0) { + var nPairs = p2.parseUShort(); + p2.skip("uShort", 3); + for (var i = 0; i < nPairs; i += 1) { + var leftIndex = p2.parseUShort(); + var rightIndex = p2.parseUShort(); + var value2 = p2.parseShort(); + pairs[leftIndex + "," + rightIndex] = value2; + } + } + return pairs; +} +function parseKernTable(data2, start) { + var p2 = new parse.Parser(data2, start); + var tableVersion = p2.parseUShort(); + if (tableVersion === 0) { + return parseWindowsKernTable(p2); + } else if (tableVersion === 1) { + return parseMacKernTable(p2); + } else { + throw new Error("Unsupported kern table version (" + tableVersion + ")."); + } +} +var kern = { parse: parseKernTable }; +function parseLocaTable(data2, start, numGlyphs, shortVersion) { + var p2 = new parse.Parser(data2, start); + var parseFn = shortVersion ? p2.parseUShort : p2.parseULong; + var glyphOffsets = []; + for (var i = 0; i < numGlyphs + 1; i += 1) { + var glyphOffset = parseFn.call(p2); + if (shortVersion) { + glyphOffset *= 2; + } + glyphOffsets.push(glyphOffset); + } + return glyphOffsets; +} +var loca = { parse: parseLocaTable }; +function loadFromUrl(url, callback) { + var request = new XMLHttpRequest(); + request.open("get", url, true); + request.responseType = "arraybuffer"; + request.onload = function() { + if (request.response) { + return callback(null, request.response); + } else { + return callback("Font could not be loaded: " + request.statusText); + } + }; + request.onerror = function() { + callback("Font could not be loaded"); + }; + request.send(); +} +function parseOpenTypeTableEntries(data2, numTables) { + var tableEntries = []; + var p2 = 12; + for (var i = 0; i < numTables; i += 1) { + var tag = parse.getTag(data2, p2); + var checksum = parse.getULong(data2, p2 + 4); + var offset = parse.getULong(data2, p2 + 8); + var length2 = parse.getULong(data2, p2 + 12); + tableEntries.push({ tag, checksum, offset, length: length2, compression: false }); + p2 += 16; + } + return tableEntries; +} +function parseWOFFTableEntries(data2, numTables) { + var tableEntries = []; + var p2 = 44; + for (var i = 0; i < numTables; i += 1) { + var tag = parse.getTag(data2, p2); + var offset = parse.getULong(data2, p2 + 4); + var compLength = parse.getULong(data2, p2 + 8); + var origLength = parse.getULong(data2, p2 + 12); + var compression = void 0; + if (compLength < origLength) { + compression = "WOFF"; + } else { + compression = false; + } + tableEntries.push({ + tag, + offset, + compression, + compressedLength: compLength, + length: origLength + }); + p2 += 20; + } + return tableEntries; +} +function uncompressTable(data2, tableEntry) { + if (tableEntry.compression === "WOFF") { + var inBuffer = new Uint8Array(data2.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2); + var outBuffer = new Uint8Array(tableEntry.length); + tinyInflate(inBuffer, outBuffer); + if (outBuffer.byteLength !== tableEntry.length) { + throw new Error("Decompression error: " + tableEntry.tag + " decompressed length doesn't match recorded length"); + } + var view = new DataView(outBuffer.buffer, 0); + return { data: view, offset: 0 }; + } else { + return { data: data2, offset: tableEntry.offset }; + } +} +function parseBuffer(buffer, opt) { + opt = opt === void 0 || opt === null ? {} : opt; + var indexToLocFormat; + var ltagTable; + var font = new Font2({ empty: true }); + var data2 = new DataView(buffer, 0); + var numTables; + var tableEntries = []; + var signature = parse.getTag(data2, 0); + if (signature === String.fromCharCode(0, 1, 0, 0) || signature === "true" || signature === "typ1") { + font.outlinesFormat = "truetype"; + numTables = parse.getUShort(data2, 4); + tableEntries = parseOpenTypeTableEntries(data2, numTables); + } else if (signature === "OTTO") { + font.outlinesFormat = "cff"; + numTables = parse.getUShort(data2, 4); + tableEntries = parseOpenTypeTableEntries(data2, numTables); + } else if (signature === "wOFF") { + var flavor = parse.getTag(data2, 4); + if (flavor === String.fromCharCode(0, 1, 0, 0)) { + font.outlinesFormat = "truetype"; + } else if (flavor === "OTTO") { + font.outlinesFormat = "cff"; + } else { + throw new Error("Unsupported OpenType flavor " + signature); + } + numTables = parse.getUShort(data2, 12); + tableEntries = parseWOFFTableEntries(data2, numTables); + } else { + throw new Error("Unsupported OpenType signature " + signature); + } + var cffTableEntry; + var fvarTableEntry; + var glyfTableEntry; + var gdefTableEntry; + var gposTableEntry; + var gsubTableEntry; + var hmtxTableEntry; + var kernTableEntry; + var locaTableEntry; + var nameTableEntry; + var metaTableEntry; + var p2; + for (var i = 0; i < numTables; i += 1) { + var tableEntry = tableEntries[i]; + var table2 = void 0; + switch (tableEntry.tag) { + case "cmap": + table2 = uncompressTable(data2, tableEntry); + font.tables.cmap = cmap.parse(table2.data, table2.offset); + font.encoding = new CmapEncoding(font.tables.cmap); + break; + case "cvt ": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.cvt = p2.parseShortList(tableEntry.length / 2); + break; + case "fvar": + fvarTableEntry = tableEntry; + break; + case "fpgm": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.fpgm = p2.parseByteList(tableEntry.length); + break; + case "head": + table2 = uncompressTable(data2, tableEntry); + font.tables.head = head.parse(table2.data, table2.offset); + font.unitsPerEm = font.tables.head.unitsPerEm; + indexToLocFormat = font.tables.head.indexToLocFormat; + break; + case "hhea": + table2 = uncompressTable(data2, tableEntry); + font.tables.hhea = hhea.parse(table2.data, table2.offset); + font.ascender = font.tables.hhea.ascender; + font.descender = font.tables.hhea.descender; + font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics; + break; + case "hmtx": + hmtxTableEntry = tableEntry; + break; + case "ltag": + table2 = uncompressTable(data2, tableEntry); + ltagTable = ltag.parse(table2.data, table2.offset); + break; + case "COLR": + table2 = uncompressTable(data2, tableEntry); + font.tables.colr = colr.parse(table2.data, table2.offset); + break; + case "CPAL": + table2 = uncompressTable(data2, tableEntry); + font.tables.cpal = cpal.parse(table2.data, table2.offset); + break; + case "maxp": + table2 = uncompressTable(data2, tableEntry); + font.tables.maxp = maxp.parse(table2.data, table2.offset); + font.numGlyphs = font.tables.maxp.numGlyphs; + break; + case "name": + nameTableEntry = tableEntry; + break; + case "OS/2": + table2 = uncompressTable(data2, tableEntry); + font.tables.os2 = os2.parse(table2.data, table2.offset); + break; + case "post": + table2 = uncompressTable(data2, tableEntry); + font.tables.post = post.parse(table2.data, table2.offset); + font.glyphNames = new GlyphNames(font.tables.post); + break; + case "prep": + table2 = uncompressTable(data2, tableEntry); + p2 = new parse.Parser(table2.data, table2.offset); + font.tables.prep = p2.parseByteList(tableEntry.length); + break; + case "glyf": + glyfTableEntry = tableEntry; + break; + case "loca": + locaTableEntry = tableEntry; + break; + case "CFF ": + cffTableEntry = tableEntry; + break; + case "kern": + kernTableEntry = tableEntry; + break; + case "GDEF": + gdefTableEntry = tableEntry; + break; + case "GPOS": + gposTableEntry = tableEntry; + break; + case "GSUB": + gsubTableEntry = tableEntry; + break; + case "meta": + metaTableEntry = tableEntry; + break; + } + } + var nameTable = uncompressTable(data2, nameTableEntry); + font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable); + font.names = font.tables.name; + if (glyfTableEntry && locaTableEntry) { + var shortVersion = indexToLocFormat === 0; + var locaTable = uncompressTable(data2, locaTableEntry); + var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion); + var glyfTable = uncompressTable(data2, glyfTableEntry); + font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt); + } else if (cffTableEntry) { + var cffTable = uncompressTable(data2, cffTableEntry); + cff.parse(cffTable.data, cffTable.offset, font, opt); + } else { + throw new Error("Font doesn't contain TrueType or CFF outlines."); + } + var hmtxTable = uncompressTable(data2, hmtxTableEntry); + hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt); + addGlyphNames(font, opt); + if (kernTableEntry) { + var kernTable = uncompressTable(data2, kernTableEntry); + font.kerningPairs = kern.parse(kernTable.data, kernTable.offset); + } else { + font.kerningPairs = {}; + } + if (gdefTableEntry) { + var gdefTable = uncompressTable(data2, gdefTableEntry); + font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset); + } + if (gposTableEntry) { + var gposTable = uncompressTable(data2, gposTableEntry); + font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset); + font.position.init(); + } + if (gsubTableEntry) { + var gsubTable = uncompressTable(data2, gsubTableEntry); + font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset); + } + if (fvarTableEntry) { + var fvarTable = uncompressTable(data2, fvarTableEntry); + font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names); + } + if (metaTableEntry) { + var metaTable = uncompressTable(data2, metaTableEntry); + font.tables.meta = meta.parse(metaTable.data, metaTable.offset); + font.metas = font.tables.meta; + } + return font; +} +function load(url, callback, opt) { + opt = opt === void 0 || opt === null ? {} : opt; + return new Promise(function(resolve, reject2) { + loadFromUrl(url, function(err2, arrayBuffer) { + if (err2) { + if (callback) { + return callback(err2); + } else { + reject2(err2); + } + } + var font; + try { + font = parseBuffer(arrayBuffer, opt); + } catch (e) { + if (callback) { + return callback(e, null); + } else { + reject2(e); + } + } + if (callback) { + return callback(null, font); + } else { + resolve(font); + } + }); + }); +} +var opentype = Object.freeze({ + __proto__: null, + Font: Font2, + Glyph, + Path: Path2, + BoundingBox, + _parse: parse, + parse: parseBuffer, + load +}); +var opentype_module_default = opentype; + +// node_modules/three/examples/jsm/loaders/TTFLoader.js +var TTFLoader = class extends Loader { + constructor(manager) { + super(manager); + this.reversed = false; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(arraybuffer) { + function convert(font, reversed) { + const round = Math.round; + const glyphs = {}; + const scale2 = 1e5 / ((font.unitsPerEm || 2048) * 72); + const glyphIndexMap = font.encoding.cmap.glyphIndexMap; + const unicodes = Object.keys(glyphIndexMap); + for (let i = 0; i < unicodes.length; i++) { + const unicode = unicodes[i]; + const glyph = font.glyphs.glyphs[glyphIndexMap[unicode]]; + if (unicode !== void 0) { + const token = { + ha: round(glyph.advanceWidth * scale2), + x_min: round(glyph.xMin * scale2), + x_max: round(glyph.xMax * scale2), + o: "" + }; + if (reversed) { + glyph.path.commands = reverseCommands(glyph.path.commands); + } + glyph.path.commands.forEach(function(command) { + if (command.type.toLowerCase() === "c") { + command.type = "b"; + } + token.o += command.type.toLowerCase() + " "; + if (command.x !== void 0 && command.y !== void 0) { + token.o += round(command.x * scale2) + " " + round(command.y * scale2) + " "; + } + if (command.x1 !== void 0 && command.y1 !== void 0) { + token.o += round(command.x1 * scale2) + " " + round(command.y1 * scale2) + " "; + } + if (command.x2 !== void 0 && command.y2 !== void 0) { + token.o += round(command.x2 * scale2) + " " + round(command.y2 * scale2) + " "; + } + }); + glyphs[String.fromCodePoint(glyph.unicode)] = token; + } + } + return { + glyphs, + familyName: font.getEnglishName("fullName"), + ascender: round(font.ascender * scale2), + descender: round(font.descender * scale2), + underlinePosition: font.tables.post.underlinePosition, + underlineThickness: font.tables.post.underlineThickness, + boundingBox: { + xMin: font.tables.head.xMin, + xMax: font.tables.head.xMax, + yMin: font.tables.head.yMin, + yMax: font.tables.head.yMax + }, + resolution: 1e3, + original_font_information: font.tables.name + }; + } + function reverseCommands(commands) { + const paths = []; + let path; + commands.forEach(function(c2) { + if (c2.type.toLowerCase() === "m") { + path = [c2]; + paths.push(path); + } else if (c2.type.toLowerCase() !== "z") { + path.push(c2); + } + }); + const reversed = []; + paths.forEach(function(p2) { + const result = { + type: "m", + x: p2[p2.length - 1].x, + y: p2[p2.length - 1].y + }; + reversed.push(result); + for (let i = p2.length - 1; i > 0; i--) { + const command = p2[i]; + const result2 = { type: command.type }; + if (command.x2 !== void 0 && command.y2 !== void 0) { + result2.x1 = command.x2; + result2.y1 = command.y2; + result2.x2 = command.x1; + result2.y2 = command.y1; + } else if (command.x1 !== void 0 && command.y1 !== void 0) { + result2.x1 = command.x1; + result2.y1 = command.y1; + } + result2.x = p2[i - 1].x; + result2.y = p2[i - 1].y; + reversed.push(result2); + } + }); + return reversed; + } + return convert(opentype_module_default.parse(arraybuffer), this.reversed); + } +}; + +// node_modules/three/examples/jsm/loaders/TiltLoader.js +var TiltLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const group = new Group(); + const zip = unzipSync(new Uint8Array(buffer.slice(16))); + const metadata = JSON.parse(strFromU8(zip["metadata.json"])); + const data2 = new DataView(zip["data.sketch"].buffer); + const num_strokes = data2.getInt32(16, true); + const brushes = {}; + let offset = 20; + for (let i = 0; i < num_strokes; i++) { + const brush_index = data2.getInt32(offset, true); + const brush_color = [ + data2.getFloat32(offset + 4, true), + data2.getFloat32(offset + 8, true), + data2.getFloat32(offset + 12, true), + data2.getFloat32(offset + 16, true) + ]; + const brush_size = data2.getFloat32(offset + 20, true); + const stroke_mask = data2.getUint32(offset + 24, true); + const controlpoint_mask = data2.getUint32(offset + 28, true); + let offset_stroke_mask = 0; + let offset_controlpoint_mask = 0; + for (let j = 0; j < 4; j++) { + const byte = 1 << j; + if ((stroke_mask & byte) > 0) offset_stroke_mask += 4; + if ((controlpoint_mask & byte) > 0) offset_controlpoint_mask += 4; + } + offset = offset + 28 + offset_stroke_mask + 4; + const num_control_points = data2.getInt32(offset, true); + const positions = new Float32Array(num_control_points * 3); + const quaternions = new Float32Array(num_control_points * 4); + offset = offset + 4; + for (let j = 0, k2 = 0; j < positions.length; j += 3, k2 += 4) { + positions[j + 0] = data2.getFloat32(offset + 0, true); + positions[j + 1] = data2.getFloat32(offset + 4, true); + positions[j + 2] = data2.getFloat32(offset + 8, true); + quaternions[k2 + 0] = data2.getFloat32(offset + 12, true); + quaternions[k2 + 1] = data2.getFloat32(offset + 16, true); + quaternions[k2 + 2] = data2.getFloat32(offset + 20, true); + quaternions[k2 + 3] = data2.getFloat32(offset + 24, true); + offset = offset + 28 + offset_controlpoint_mask; + } + if (brush_index in brushes === false) { + brushes[brush_index] = []; + } + brushes[brush_index].push([positions, quaternions, brush_size, brush_color]); + } + for (const brush_index in brushes) { + const geometry = new StrokeGeometry(brushes[brush_index]); + const material = getMaterial(metadata.BrushIndex[brush_index]); + group.add(new Mesh(geometry, material)); + } + return group; + } +}; +var StrokeGeometry = class extends BufferGeometry { + constructor(strokes) { + super(); + const vertices = []; + const colors = []; + const uvs = []; + const position2 = new Vector3(); + const prevPosition = new Vector3(); + const quaternion = new Quaternion(); + const prevQuaternion = new Quaternion(); + const vector1 = new Vector3(); + const vector2 = new Vector3(); + const vector3 = new Vector3(); + const vector4 = new Vector3(); + const color = new Color(); + for (const k2 in strokes) { + const stroke = strokes[k2]; + const positions = stroke[0]; + const quaternions = stroke[1]; + const size2 = stroke[2]; + const rgba = stroke[3]; + const alpha = stroke[3][3]; + color.fromArray(rgba).convertSRGBToLinear(); + prevPosition.fromArray(positions, 0); + prevQuaternion.fromArray(quaternions, 0); + for (let i = 3, j = 4, l2 = positions.length; i < l2; i += 3, j += 4) { + position2.fromArray(positions, i); + quaternion.fromArray(quaternions, j); + vector1.set(-size2, 0, 0); + vector1.applyQuaternion(quaternion); + vector1.add(position2); + vector2.set(size2, 0, 0); + vector2.applyQuaternion(quaternion); + vector2.add(position2); + vector3.set(size2, 0, 0); + vector3.applyQuaternion(prevQuaternion); + vector3.add(prevPosition); + vector4.set(-size2, 0, 0); + vector4.applyQuaternion(prevQuaternion); + vector4.add(prevPosition); + vertices.push(vector1.x, vector1.y, -vector1.z); + vertices.push(vector2.x, vector2.y, -vector2.z); + vertices.push(vector4.x, vector4.y, -vector4.z); + vertices.push(vector2.x, vector2.y, -vector2.z); + vertices.push(vector3.x, vector3.y, -vector3.z); + vertices.push(vector4.x, vector4.y, -vector4.z); + prevPosition.copy(position2); + prevQuaternion.copy(quaternion); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + colors.push(...color, alpha); + const p1 = i / l2; + const p2 = (i - 3) / l2; + uvs.push(p1, 0); + uvs.push(p1, 1); + uvs.push(p2, 0); + uvs.push(p1, 1); + uvs.push(p2, 1); + uvs.push(p2, 0); + } + } + this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); + this.setAttribute("color", new BufferAttribute(new Float32Array(colors), 4)); + this.setAttribute("uv", new BufferAttribute(new Float32Array(uvs), 2)); + } +}; +var BRUSH_LIST_ARRAY = { + "89d104cd-d012-426b-b5b3-bbaee63ac43c": "Bubbles", + "700f3aa8-9a7c-2384-8b8a-ea028905dd8c": "CelVinyl", + "0f0ff7b2-a677-45eb-a7d6-0cd7206f4816": "ChromaticWave", + "1161af82-50cf-47db-9706-0c3576d43c43": "CoarseBristles", + "79168f10-6961-464a-8be1-57ed364c5600": "CoarseBristlesSingleSided", + "1caa6d7d-f015-3f54-3a4b-8b5354d39f81": "Comet", + "c8313697-2563-47fc-832e-290f4c04b901": "DiamondHull", + "4391aaaa-df73-4396-9e33-31e4e4930b27": "Disco", + "d1d991f2-e7a0-4cf1-b328-f57e915e6260": "DotMarker", + "6a1cf9f9-032c-45ec-9b1d-a6680bee30f7": "Dots", + "0d3889f3-3ede-470c-8af4-f44813306126": "DoubleTaperedFlat", + "0d3889f3-3ede-470c-8af4-de4813306126": "DoubleTaperedMarker", + "d0262945-853c-4481-9cbd-88586bed93cb": "DuctTape", + "3ca16e2f-bdcd-4da2-8631-dcef342f40f1": "DuctTapeSingleSided", + "f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51": "Electricity", + "02ffb866-7fb2-4d15-b761-1012cefb1360": "Embers", + "cb92b597-94ca-4255-b017-0e3f42f12f9e": "Fire", + "2d35bcf0-e4d8-452c-97b1-3311be063130": "Flat", + "55303bc4-c749-4a72-98d9-d23e68e76e18": "FlatDeprecated", + "280c0a7a-aad8-416c-a7d2-df63d129ca70": "FlatSingleSided", + "cf019139-d41c-4eb0-a1d0-5cf54b0a42f3": "Highlighter", + "6a1cf9f9-032c-45ec-9b6e-a6680bee32e9": "HyperGrid", + "dce872c2-7b49-4684-b59b-c45387949c5c": "Hypercolor", + "e8ef32b1-baa8-460a-9c2c-9cf8506794f5": "HypercolorSingleSided", + "2f212815-f4d3-c1a4-681a-feeaf9c6dc37": "Icing", + "f5c336cf-5108-4b40-ade9-c687504385ab": "Ink", + "c0012095-3ffd-4040-8ee1-fc180d346eaa": "InkSingleSided", + "4a76a27a-44d8-4bfe-9a8c-713749a499b0": "Leaves", + "ea19de07-d0c0-4484-9198-18489a3c1487": "LeavesSingleSided", + "2241cd32-8ba2-48a5-9ee7-2caef7e9ed62": "Light", + "4391aaaa-df81-4396-9e33-31e4e4930b27": "LightWire", + "d381e0f5-3def-4a0d-8853-31e9200bcbda": "Lofted", + "429ed64a-4e97-4466-84d3-145a861ef684": "Marker", + "79348357-432d-4746-8e29-0e25c112e3aa": "MatteHull", + "b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6": "NeonPulse", + "f72ec0e7-a844-4e38-82e3-140c44772699": "OilPaint", + "c515dad7-4393-4681-81ad-162ef052241b": "OilPaintSingleSided", + "f1114e2e-eb8d-4fde-915a-6e653b54e9f5": "Paper", + "759f1ebd-20cd-4720-8d41-234e0da63716": "PaperSingleSided", + "e0abbc80-0f80-e854-4970-8924a0863dcc": "Petal", + "c33714d1-b2f9-412e-bd50-1884c9d46336": "Plasma", + "ad1ad437-76e2-450d-a23a-e17f8310b960": "Rainbow", + "faaa4d44-fcfb-4177-96be-753ac0421ba3": "ShinyHull", + "70d79cca-b159-4f35-990c-f02193947fe8": "Smoke", + "d902ed8b-d0d1-476c-a8de-878a79e3a34c": "Snow", + "accb32f5-4509-454f-93f8-1df3fd31df1b": "SoftHighlighter", + "cf7f0059-7aeb-53a4-2b67-c83d863a9ffa": "Spikes", + "8dc4a70c-d558-4efd-a5ed-d4e860f40dc3": "Splatter", + "7a1c8107-50c5-4b70-9a39-421576d6617e": "SplatterSingleSided", + "0eb4db27-3f82-408d-b5a1-19ebd7d5b711": "Stars", + "44bb800a-fbc3-4592-8426-94ecb05ddec3": "Streamers", + "0077f88c-d93a-42f3-b59b-b31c50cdb414": "Taffy", + "b468c1fb-f254-41ed-8ec9-57030bc5660c": "TaperedFlat", + "c8ccb53d-ae13-45ef-8afb-b730d81394eb": "TaperedFlatSingleSided", + "d90c6ad8-af0f-4b54-b422-e0f92abe1b3c": "TaperedMarker", + "1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0": "TaperedMarker_Flat", + "75b32cf0-fdd6-4d89-a64b-e2a00b247b0f": "ThickPaint", + "fdf0326a-c0d1-4fed-b101-9db0ff6d071f": "ThickPaintSingleSided", + "4391385a-df73-4396-9e33-31e4e4930b27": "Toon", + "a8fea537-da7c-4d4b-817f-24f074725d6d": "UnlitHull", + "d229d335-c334-495a-a801-660ac8a87360": "VelvetInk", + "10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab": "Waveform", + "b67c0e81-ce6d-40a8-aeb0-ef036b081aa3": "WetPaint", + "dea67637-cd1a-27e4-c9b1-52f4bbcb84e5": "WetPaintSingleSided", + "5347acf0-a8e2-47b6-8346-30c70719d763": "WigglyGraphite", + "e814fef1-97fd-7194-4a2f-50c2bb918be2": "WigglyGraphiteSingleSided", + "4391385a-cf83-4396-9e33-31e4e4930b27": "Wire" +}; +var common = { + "colors": { + "BloomColor": ` + vec3 BloomColor(vec3 color, float gain) { + // Guarantee that there's at least a little bit of all 3 channels. + // This makes fully-saturated strokes (which only have 2 non-zero + // color channels) eventually clip to white rather than to a secondary. + float cmin = length(color.rgb) * .05; + color.rgb = max(color.rgb, vec3(cmin, cmin, cmin)); + // If we try to remove this pow() from .a, it brightens up + // pressure-sensitive strokes; looks better as-is. + color = pow(color, vec3(2.2)); + color.rgb *= 2. * exp(gain * 10.); + return color; + } + `, + "LinearToSrgb": ` + vec3 LinearToSrgb(vec3 color) { + // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html + vec3 linearColor = color.rgb; + vec3 S1 = sqrt(linearColor); + vec3 S2 = sqrt(S1); + vec3 S3 = sqrt(S2); + color.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor; + return color; + } + `, + "hsv": ` + // uniform sampler2D lookupTex; + vec4 lookup(vec4 textureColor) { + return textureColor; + } + + vec3 lookup(vec3 textureColor) { + return textureColor; + } + + vec3 hsv2rgb( vec3 hsv ) { + vec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 ); + return hsv.z * mix( vec3(1.0), rgb, hsv.y); + } + + vec3 rgb2hsv( vec3 rgb ) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g)); + vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); + } + `, + "SrgbToLinear": ` + vec3 SrgbToLinear(vec3 color) { + // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html + vec3 sRGB = color.rgb; + color.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878); + return color; + } + ` + } +}; +var shaders = null; +function getShaders() { + if (shaders === null) { + const loader = new TextureLoader().setPath("./textures/tiltbrush/"); + shaders = { + "Light": { + uniforms: { + mainTex: { value: loader.load("Light.webp") }, + alphaTest: { value: 0.067 }, + emission_gain: { value: 0.45 }, + alpha: { value: 1 } + }, + vertexShader: ` + precision highp float; + precision highp int; + + attribute vec2 uv; + attribute vec4 color; + attribute vec3 position; + + uniform mat4 modelMatrix; + uniform mat4 modelViewMatrix; + uniform mat4 projectionMatrix; + uniform mat4 viewMatrix; + uniform mat3 normalMatrix; + uniform vec3 cameraPosition; + + varying vec2 vUv; + varying vec3 vColor; + + ${common.colors.LinearToSrgb} + ${common.colors.hsv} + + void main() { + + vUv = uv; + + vColor = lookup(color.rgb); + + vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); + + gl_Position = projectionMatrix * mvPosition; + + } + `, + fragmentShader: ` + precision highp float; + precision highp int; + + uniform float emission_gain; + + uniform sampler2D mainTex; + uniform float alphaTest; + + varying vec2 vUv; + varying vec3 vColor; + + ${common.colors.BloomColor} + ${common.colors.SrgbToLinear} + + void main(){ + vec4 col = texture2D(mainTex, vUv); + vec3 color = vColor; + color = BloomColor(color, emission_gain); + color = color * col.rgb; + color = color * col.a; + color = SrgbToLinear(color); + gl_FragColor = vec4(color, 1.0); + } + `, + side: 2, + transparent: true, + depthFunc: 2, + depthWrite: true, + depthTest: false, + blending: 5, + blendDst: 201, + blendDstAlpha: 201, + blendEquation: 100, + blendEquationAlpha: 100, + blendSrc: 201, + blendSrcAlpha: 201 + } + }; + } + return shaders; +} +function getMaterial(GUID) { + const name2 = BRUSH_LIST_ARRAY[GUID]; + switch (name2) { + case "Light": + return new RawShaderMaterial(getShaders().Light); + default: + return new MeshBasicMaterial({ vertexColors: true, side: DoubleSide }); + } +} + +// node_modules/three/examples/jsm/loaders/USDZLoader.js +var USDAParser = class { + parse(text2) { + const data2 = {}; + const lines = text2.split("\n"); + let string = null; + let target = data2; + const stack = [data2]; + for (const line2 of lines) { + if (line2.includes("=")) { + const assignment = line2.split("="); + const lhs = assignment[0].trim(); + const rhs = assignment[1].trim(); + if (rhs.endsWith("{")) { + const group = {}; + stack.push(group); + target[lhs] = group; + target = group; + } else if (rhs.endsWith("(")) { + const values2 = rhs.slice(0, -1); + target[lhs] = values2; + const meta2 = {}; + stack.push(meta2); + target = meta2; + } else { + target[lhs] = rhs; + } + } else if (line2.endsWith("{")) { + const group = target[string] || {}; + stack.push(group); + target[string] = group; + target = group; + } else if (line2.endsWith("}")) { + stack.pop(); + if (stack.length === 0) continue; + target = stack[stack.length - 1]; + } else if (line2.endsWith("(")) { + const meta2 = {}; + stack.push(meta2); + string = line2.split("(")[0].trim() || string; + target[string] = meta2; + target = meta2; + } else if (line2.endsWith(")")) { + stack.pop(); + target = stack[stack.length - 1]; + } else { + string = line2.trim(); + } + } + return data2; + } +}; +var USDZLoader = class extends Loader { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text2) { + try { + onLoad(scope.parse(text2)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const parser = new USDAParser(); + function parseAssets(zip2) { + const data2 = {}; + const loader = new FileLoader(); + loader.setResponseType("arraybuffer"); + for (const filename in zip2) { + if (filename.endsWith("png")) { + const blob = new Blob([zip2[filename]], { type: { type: "image/png" } }); + data2[filename] = URL.createObjectURL(blob); + } + if (filename.endsWith("usd") || filename.endsWith("usda")) { + if (isCrateFile(zip2[filename])) { + throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported."); + } + const text3 = strFromU8(zip2[filename]); + data2[filename] = parser.parse(text3); + } + } + return data2; + } + function isCrateFile(buffer2) { + const fileHeader = buffer2.slice(0, 7); + const crateHeader = new Uint8Array([80, 88, 82, 45, 85, 83, 68, 67]); + return fileHeader.every((value2, index2) => value2 === crateHeader[index2]); + } + function findUSD(zip2) { + if (zip2.length < 1) return void 0; + const firstFileName = Object.keys(zip2)[0]; + let isCrate = false; + if (firstFileName.endsWith("usda")) return zip2[firstFileName]; + if (firstFileName.endsWith("usdc")) { + isCrate = true; + } else if (firstFileName.endsWith("usd")) { + if (!isCrateFile(zip2[firstFileName])) { + return zip2[firstFileName]; + } else { + isCrate = true; + } + } + if (isCrate) { + throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported."); + } + } + const zip = unzipSync(new Uint8Array(buffer)); + const assets = parseAssets(zip); + const file = findUSD(zip); + const text2 = strFromU8(file); + const root = parser.parse(text2); + function findMeshGeometry(data2) { + if (!data2) return void 0; + if ("prepend references" in data2) { + const reference = data2["prepend references"]; + const parts = reference.split("@"); + const path = parts[1].replace(/^.\//, ""); + const id = parts[2].replace(/^<\//, "").replace(/>$/, ""); + return findGeometry(assets[path], id); + } + return findGeometry(data2); + } + function findGeometry(data2, id) { + if (!data2) return void 0; + if (id !== void 0) { + const def = `def Mesh "${id}"`; + if (def in data2) { + return data2[def]; + } + } + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith("def Mesh")) { + return object; + } + if (typeof object === "object") { + const geometry = findGeometry(object); + if (geometry) return geometry; + } + } + } + function buildGeometry(data2) { + if (!data2) return void 0; + const geometry = new BufferGeometry(); + let indices = null; + let counts = null; + let uvs = null; + let positionsLength = -1; + if ("int[] faceVertexIndices" in data2) { + indices = JSON.parse(data2["int[] faceVertexIndices"]); + } + if ("int[] faceVertexCounts" in data2) { + counts = JSON.parse(data2["int[] faceVertexCounts"]); + indices = toTriangleIndices(indices, counts); + } + if ("point3f[] points" in data2) { + const positions = JSON.parse(data2["point3f[] points"].replace(/[()]*/g, "")); + positionsLength = positions.length; + let attribute = new BufferAttribute(new Float32Array(positions), 3); + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + geometry.setAttribute("position", attribute); + } + if ("float2[] primvars:st" in data2) { + data2["texCoord2f[] primvars:st"] = data2["float2[] primvars:st"]; + } + if ("texCoord2f[] primvars:st" in data2) { + uvs = JSON.parse(data2["texCoord2f[] primvars:st"].replace(/[()]*/g, "")); + let attribute = new BufferAttribute(new Float32Array(uvs), 2); + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + geometry.setAttribute("uv", attribute); + } + if ("int[] primvars:st:indices" in data2 && uvs !== null) { + const attribute = new BufferAttribute(new Float32Array(uvs), 2); + let indices2 = JSON.parse(data2["int[] primvars:st:indices"]); + indices2 = toTriangleIndices(indices2, counts); + geometry.setAttribute("uv", toFlatBufferAttribute(attribute, indices2)); + } + if ("normal3f[] normals" in data2) { + const normals = JSON.parse(data2["normal3f[] normals"].replace(/[()]*/g, "")); + let attribute = new BufferAttribute(new Float32Array(normals), 3); + if (normals.length === positionsLength) { + if (indices !== null) attribute = toFlatBufferAttribute(attribute, indices); + } else { + let indices2 = Array.from(Array(normals.length / 3).keys()); + indices2 = toTriangleIndices(indices2, counts); + attribute = toFlatBufferAttribute(attribute, indices2); + } + geometry.setAttribute("normal", attribute); + } else { + geometry.computeVertexNormals(); + } + return geometry; + } + function toTriangleIndices(rawIndices, counts) { + const indices = []; + for (let i = 0; i < counts.length; i++) { + const count = counts[i]; + const stride = i * count; + if (count === 3) { + const a2 = rawIndices[stride + 0]; + const b3 = rawIndices[stride + 1]; + const c2 = rawIndices[stride + 2]; + indices.push(a2, b3, c2); + } else if (count === 4) { + const a2 = rawIndices[stride + 0]; + const b3 = rawIndices[stride + 1]; + const c2 = rawIndices[stride + 2]; + const d = rawIndices[stride + 3]; + indices.push(a2, b3, c2); + indices.push(a2, c2, d); + } else { + console.warn("THREE.USDZLoader: Face vertex count of %s unsupported.", count); + } + } + return indices; + } + function toFlatBufferAttribute(attribute, indices) { + const array = attribute.array; + const itemSize = attribute.itemSize; + const array2 = new array.constructor(indices.length * itemSize); + let index2 = 0, index22 = 0; + for (let i = 0, l2 = indices.length; i < l2; i++) { + index2 = indices[i] * itemSize; + for (let j = 0; j < itemSize; j++) { + array2[index22++] = array[index2++]; + } + } + return new BufferAttribute(array2, itemSize); + } + function findMeshMaterial(data2) { + if (!data2) return void 0; + if ("rel material:binding" in data2) { + const reference = data2["rel material:binding"]; + const id = reference.replace(/^<\//, "").replace(/>$/, ""); + const parts = id.split("/"); + return findMaterial(root, ` "${parts[1]}"`); + } + return findMaterial(data2); + } + function findMaterial(data2, id = "") { + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith("def Material" + id)) { + return object; + } + if (typeof object === "object") { + const material = findMaterial(object, id); + if (material) return material; + } + } + } + function setTextureParams(map2, data_value) { + if (data_value["float inputs:rotation"]) { + map2.rotation = parseFloat(data_value["float inputs:rotation"]); + } + if (data_value["float2 inputs:scale"]) { + map2.repeat = new Vector2().fromArray(JSON.parse("[" + data_value["float2 inputs:scale"].replace(/[()]*/g, "") + "]")); + } + if (data_value["float2 inputs:translation"]) { + map2.offset = new Vector2().fromArray(JSON.parse("[" + data_value["float2 inputs:translation"].replace(/[()]*/g, "") + "]")); + } + } + function buildMaterial2(data2) { + const material = new MeshPhysicalMaterial(); + if (data2 !== void 0) { + const surfaceConnection = data2["token outputs:surface.connect"]; + const surfaceName = /(\w+).output/.exec(surfaceConnection)[1]; + const surface = data2[`def Shader "${surfaceName}"`]; + if (surface !== void 0) { + if ("color3f inputs:diffuseColor.connect" in surface) { + const path = surface["color3f inputs:diffuseColor.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.map = buildTexture(sampler); + material.map.colorSpace = SRGBColorSpace; + if ('def Shader "Transform2d_diffuse"' in data2) { + setTextureParams(material.map, data2['def Shader "Transform2d_diffuse"']); + } + } else if ("color3f inputs:diffuseColor" in surface) { + const color = surface["color3f inputs:diffuseColor"].replace(/[()]*/g, ""); + material.color.fromArray(JSON.parse("[" + color + "]")); + } + if ("color3f inputs:emissiveColor.connect" in surface) { + const path = surface["color3f inputs:emissiveColor.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.emissiveMap = buildTexture(sampler); + material.emissiveMap.colorSpace = SRGBColorSpace; + material.emissive.set(16777215); + if ('def Shader "Transform2d_emissive"' in data2) { + setTextureParams(material.emissiveMap, data2['def Shader "Transform2d_emissive"']); + } + } else if ("color3f inputs:emissiveColor" in surface) { + const color = surface["color3f inputs:emissiveColor"].replace(/[()]*/g, ""); + material.emissive.fromArray(JSON.parse("[" + color + "]")); + } + if ("normal3f inputs:normal.connect" in surface) { + const path = surface["normal3f inputs:normal.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.normalMap = buildTexture(sampler); + material.normalMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_normal"' in data2) { + setTextureParams(material.normalMap, data2['def Shader "Transform2d_normal"']); + } + } + if ("float inputs:roughness.connect" in surface) { + const path = surface["float inputs:roughness.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.roughness = 1; + material.roughnessMap = buildTexture(sampler); + material.roughnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_roughness"' in data2) { + setTextureParams(material.roughnessMap, data2['def Shader "Transform2d_roughness"']); + } + } else if ("float inputs:roughness" in surface) { + material.roughness = parseFloat(surface["float inputs:roughness"]); + } + if ("float inputs:metallic.connect" in surface) { + const path = surface["float inputs:metallic.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.metalness = 1; + material.metalnessMap = buildTexture(sampler); + material.metalnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_metallic"' in data2) { + setTextureParams(material.metalnessMap, data2['def Shader "Transform2d_metallic"']); + } + } else if ("float inputs:metallic" in surface) { + material.metalness = parseFloat(surface["float inputs:metallic"]); + } + if ("float inputs:clearcoat.connect" in surface) { + const path = surface["float inputs:clearcoat.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.clearcoat = 1; + material.clearcoatMap = buildTexture(sampler); + material.clearcoatMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_clearcoat"' in data2) { + setTextureParams(material.clearcoatMap, data2['def Shader "Transform2d_clearcoat"']); + } + } else if ("float inputs:clearcoat" in surface) { + material.clearcoat = parseFloat(surface["float inputs:clearcoat"]); + } + if ("float inputs:clearcoatRoughness.connect" in surface) { + const path = surface["float inputs:clearcoatRoughness.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.clearcoatRoughness = 1; + material.clearcoatRoughnessMap = buildTexture(sampler); + material.clearcoatRoughnessMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_clearcoatRoughness"' in data2) { + setTextureParams(material.clearcoatRoughnessMap, data2['def Shader "Transform2d_clearcoatRoughness"']); + } + } else if ("float inputs:clearcoatRoughness" in surface) { + material.clearcoatRoughness = parseFloat(surface["float inputs:clearcoatRoughness"]); + } + if ("float inputs:ior" in surface) { + material.ior = parseFloat(surface["float inputs:ior"]); + } + if ("float inputs:occlusion.connect" in surface) { + const path = surface["float inputs:occlusion.connect"]; + const sampler = findTexture(root, /(\w+).output/.exec(path)[1]); + material.aoMap = buildTexture(sampler); + material.aoMap.colorSpace = NoColorSpace; + if ('def Shader "Transform2d_occlusion"' in data2) { + setTextureParams(material.aoMap, data2['def Shader "Transform2d_occlusion"']); + } + } + } + } + return material; + } + function findTexture(data2, id) { + for (const name2 in data2) { + const object = data2[name2]; + if (name2.startsWith(`def Shader "${id}"`)) { + return object; + } + if (typeof object === "object") { + const texture = findTexture(object, id); + if (texture) return texture; + } + } + } + function buildTexture(data2) { + if ("asset inputs:file" in data2) { + const path = data2["asset inputs:file"].replace(/@*/g, "").trim(); + const loader = new TextureLoader(); + const texture = loader.load(assets[path]); + const map2 = { + '"clamp"': ClampToEdgeWrapping, + '"mirror"': MirroredRepeatWrapping, + '"repeat"': RepeatWrapping + }; + if ("token inputs:wrapS" in data2) { + texture.wrapS = map2[data2["token inputs:wrapS"]]; + } + if ("token inputs:wrapT" in data2) { + texture.wrapT = map2[data2["token inputs:wrapT"]]; + } + return texture; + } + return null; + } + function buildObject(data2) { + const geometry = buildGeometry(findMeshGeometry(data2)); + const material = buildMaterial2(findMeshMaterial(data2)); + const mesh = geometry ? new Mesh(geometry, material) : new Object3D(); + if ("matrix4d xformOp:transform" in data2) { + const array = JSON.parse("[" + data2["matrix4d xformOp:transform"].replace(/[()]*/g, "") + "]"); + mesh.matrix.fromArray(array); + mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale); + } + return mesh; + } + function buildHierarchy(data2, group2) { + for (const name2 in data2) { + if (name2.startsWith("def Scope")) { + buildHierarchy(data2[name2], group2); + } else if (name2.startsWith("def Xform")) { + const mesh = buildObject(data2[name2]); + if (/def Xform "(\w+)"/.test(name2)) { + mesh.name = /def Xform "(\w+)"/.exec(name2)[1]; + } + group2.add(mesh); + buildHierarchy(data2[name2], mesh); + } + } + } + const group = new Group(); + buildHierarchy(root, group); + return group; + } +}; + +// node_modules/three/examples/jsm/loaders/VOXLoader.js +var VOXLoader = class extends Loader { + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer)); + } catch (e) { + if (onError) { + onError(e); + } else { + console.error(e); + } + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(buffer) { + const data2 = new DataView(buffer); + const id = data2.getUint32(0, true); + const version = data2.getUint32(4, true); + if (id !== 542658390) { + console.error("THREE.VOXLoader: Invalid VOX file."); + return; + } + if (version !== 150) { + console.error("THREE.VOXLoader: Invalid VOX file. Unsupported version:", version); + return; + } + const DEFAULT_PALETTE = [ + 0, + 4294967295, + 4291624959, + 4288282623, + 4284940287, + 4281597951, + 4278255615, + 4294954239, + 4291611903, + 4288269567, + 4284927231, + 4281584895, + 4278242559, + 4294941183, + 4291598847, + 4288256511, + 4284914175, + 4281571839, + 4278229503, + 4294928127, + 4291585791, + 4288243455, + 4284901119, + 4281558783, + 4278216447, + 4294915071, + 4291572735, + 4288230399, + 4284888063, + 4281545727, + 4278203391, + 4294902015, + 4291559679, + 4288217343, + 4284875007, + 4281532671, + 4278190335, + 4294967244, + 4291624908, + 4288282572, + 4284940236, + 4281597900, + 4278255564, + 4294954188, + 4291611852, + 4288269516, + 4284927180, + 4281584844, + 4278242508, + 4294941132, + 4291598796, + 4288256460, + 4284914124, + 4281571788, + 4278229452, + 4294928076, + 4291585740, + 4288243404, + 4284901068, + 4281558732, + 4278216396, + 4294915020, + 4291572684, + 4288230348, + 4284888012, + 4281545676, + 4278203340, + 4294901964, + 4291559628, + 4288217292, + 4284874956, + 4281532620, + 4278190284, + 4294967193, + 4291624857, + 4288282521, + 4284940185, + 4281597849, + 4278255513, + 4294954137, + 4291611801, + 4288269465, + 4284927129, + 4281584793, + 4278242457, + 4294941081, + 4291598745, + 4288256409, + 4284914073, + 4281571737, + 4278229401, + 4294928025, + 4291585689, + 4288243353, + 4284901017, + 4281558681, + 4278216345, + 4294914969, + 4291572633, + 4288230297, + 4284887961, + 4281545625, + 4278203289, + 4294901913, + 4291559577, + 4288217241, + 4284874905, + 4281532569, + 4278190233, + 4294967142, + 4291624806, + 4288282470, + 4284940134, + 4281597798, + 4278255462, + 4294954086, + 4291611750, + 4288269414, + 4284927078, + 4281584742, + 4278242406, + 4294941030, + 4291598694, + 4288256358, + 4284914022, + 4281571686, + 4278229350, + 4294927974, + 4291585638, + 4288243302, + 4284900966, + 4281558630, + 4278216294, + 4294914918, + 4291572582, + 4288230246, + 4284887910, + 4281545574, + 4278203238, + 4294901862, + 4291559526, + 4288217190, + 4284874854, + 4281532518, + 4278190182, + 4294967091, + 4291624755, + 4288282419, + 4284940083, + 4281597747, + 4278255411, + 4294954035, + 4291611699, + 4288269363, + 4284927027, + 4281584691, + 4278242355, + 4294940979, + 4291598643, + 4288256307, + 4284913971, + 4281571635, + 4278229299, + 4294927923, + 4291585587, + 4288243251, + 4284900915, + 4281558579, + 4278216243, + 4294914867, + 4291572531, + 4288230195, + 4284887859, + 4281545523, + 4278203187, + 4294901811, + 4291559475, + 4288217139, + 4284874803, + 4281532467, + 4278190131, + 4294967040, + 4291624704, + 4288282368, + 4284940032, + 4281597696, + 4278255360, + 4294953984, + 4291611648, + 4288269312, + 4284926976, + 4281584640, + 4278242304, + 4294940928, + 4291598592, + 4288256256, + 4284913920, + 4281571584, + 4278229248, + 4294927872, + 4291585536, + 4288243200, + 4284900864, + 4281558528, + 4278216192, + 4294914816, + 4291572480, + 4288230144, + 4284887808, + 4281545472, + 4278203136, + 4294901760, + 4291559424, + 4288217088, + 4284874752, + 4281532416, + 4278190318, + 4278190301, + 4278190267, + 4278190250, + 4278190216, + 4278190199, + 4278190165, + 4278190148, + 4278190114, + 4278190097, + 4278251008, + 4278246656, + 4278237952, + 4278233600, + 4278224896, + 4278220544, + 4278211840, + 4278207488, + 4278198784, + 4278194432, + 4293787648, + 4292673536, + 4290445312, + 4289331200, + 4287102976, + 4285988864, + 4283760640, + 4282646528, + 4280418304, + 4279304192, + 4293848814, + 4292730333, + 4290493371, + 4289374890, + 4287137928, + 4286019447, + 4283782485, + 4282664004, + 4280427042, + 4279308561 + ]; + let i = 8; + let chunk; + const chunks = []; + while (i < data2.byteLength) { + let id2 = ""; + for (let j = 0; j < 4; j++) { + id2 += String.fromCharCode(data2.getUint8(i++)); + } + const chunkSize = data2.getUint32(i, true); + i += 4; + i += 4; + if (id2 === "SIZE") { + const x2 = data2.getUint32(i, true); + i += 4; + const y2 = data2.getUint32(i, true); + i += 4; + const z = data2.getUint32(i, true); + i += 4; + chunk = { + palette: DEFAULT_PALETTE, + size: { x: x2, y: y2, z } + }; + chunks.push(chunk); + i += chunkSize - 3 * 4; + } else if (id2 === "XYZI") { + const numVoxels = data2.getUint32(i, true); + i += 4; + chunk.data = new Uint8Array(buffer, i, numVoxels * 4); + i += numVoxels * 4; + } else if (id2 === "RGBA") { + const palette = [0]; + for (let j = 0; j < 256; j++) { + palette[j + 1] = data2.getUint32(i, true); + i += 4; + } + chunk.palette = palette; + } else { + i += chunkSize; + } + } + return chunks; + } +}; +var VOXMesh = class extends Mesh { + constructor(chunk) { + const data2 = chunk.data; + const size2 = chunk.size; + const palette = chunk.palette; + const vertices = []; + const colors = []; + const nx = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1]; + const px = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0]; + const py = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1]; + const ny = [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0]; + const nz = [0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0]; + const pz = [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1]; + const _color5 = new Color(); + function add2(tile, x2, y2, z, r, g2, b3) { + x2 -= size2.x / 2; + y2 -= size2.z / 2; + z += size2.y / 2; + for (let i = 0; i < 18; i += 3) { + _color5.setRGB(r, g2, b3, SRGBColorSpace); + vertices.push(tile[i + 0] + x2, tile[i + 1] + y2, tile[i + 2] + z); + colors.push(_color5.r, _color5.g, _color5.b); + } + } + const offsety = size2.x; + const offsetz = size2.x * size2.y; + const array = new Uint8Array(size2.x * size2.y * size2.z); + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const index2 = x2 + y2 * offsety + z * offsetz; + array[index2] = 255; + } + let hasColors = false; + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const c2 = data2[j + 3]; + const hex = palette[c2]; + const r = (hex >> 0 & 255) / 255; + const g2 = (hex >> 8 & 255) / 255; + const b3 = (hex >> 16 & 255) / 255; + if (r > 0 || g2 > 0 || b3 > 0) hasColors = true; + const index2 = x2 + y2 * offsety + z * offsetz; + if (array[index2 + 1] === 0 || x2 === size2.x - 1) add2(px, x2, z, -y2, r, g2, b3); + if (array[index2 - 1] === 0 || x2 === 0) add2(nx, x2, z, -y2, r, g2, b3); + if (array[index2 + offsety] === 0 || y2 === size2.y - 1) add2(ny, x2, z, -y2, r, g2, b3); + if (array[index2 - offsety] === 0 || y2 === 0) add2(py, x2, z, -y2, r, g2, b3); + if (array[index2 + offsetz] === 0 || z === size2.z - 1) add2(pz, x2, z, -y2, r, g2, b3); + if (array[index2 - offsetz] === 0 || z === 0) add2(nz, x2, z, -y2, r, g2, b3); + } + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.computeVertexNormals(); + const material = new MeshStandardMaterial(); + if (hasColors) { + geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); + material.vertexColors = true; + } + super(geometry, material); + } +}; +var VOXData3DTexture = class extends Data3DTexture { + constructor(chunk) { + const data2 = chunk.data; + const size2 = chunk.size; + const offsety = size2.x; + const offsetz = size2.x * size2.y; + const array = new Uint8Array(size2.x * size2.y * size2.z); + for (let j = 0; j < data2.length; j += 4) { + const x2 = data2[j + 0]; + const y2 = data2[j + 1]; + const z = data2[j + 2]; + const index2 = x2 + y2 * offsety + z * offsetz; + array[index2] = 255; + } + super(array, size2.x, size2.y, size2.z); + this.format = RedFormat; + this.minFilter = NearestFilter; + this.magFilter = LinearFilter; + this.unpackAlignment = 1; + this.needsUpdate = true; + } +}; + +// node_modules/three/examples/jsm/libs/chevrotain.module.min.js +var R2 = (t3, e) => () => (e || (e = { exports: {} }, t3(e.exports, e)), e.exports); +var Er = R2((Pt) => { + "use strict"; + Object.defineProperty(Pt, "__esModule", { value: true }); + Pt.VERSION = void 0; + Pt.VERSION = "9.0.1"; +}); +var k = R2((exports, module) => { + "use strict"; + var __spreadArray = exports && exports.__spreadArray || function(t3, e) { + for (var r = 0, n2 = e.length, i = t3.length; r < n2; r++, i++) t3[i] = e[r]; + return t3; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.toFastProperties = exports.timer = exports.peek = exports.isES2015MapSupported = exports.PRINT_WARNING = exports.PRINT_ERROR = exports.packArray = exports.IDENTITY = exports.NOOP = exports.merge = exports.groupBy = exports.defaults = exports.assignNoOverwrite = exports.assign = exports.zipObject = exports.sortBy = exports.indexOf = exports.some = exports.difference = exports.every = exports.isObject = exports.isRegExp = exports.isArray = exports.partial = exports.uniq = exports.compact = exports.reduce = exports.findAll = exports.find = exports.cloneObj = exports.cloneArr = exports.contains = exports.has = exports.pick = exports.reject = exports.filter = exports.dropRight = exports.drop = exports.isFunction = exports.isUndefined = exports.isString = exports.forEach = exports.last = exports.first = exports.flatten = exports.map = exports.mapValues = exports.values = exports.keys = exports.isEmpty = void 0; + function isEmpty(t3) { + return t3 && t3.length === 0; + } + exports.isEmpty = isEmpty; + function keys(t3) { + return t3 == null ? [] : Object.keys(t3); + } + exports.keys = keys; + function values(t3) { + for (var e = [], r = Object.keys(t3), n2 = 0; n2 < r.length; n2++) e.push(t3[r[n2]]); + return e; + } + exports.values = values; + function mapValues(t3, e) { + for (var r = [], n2 = keys(t3), i = 0; i < n2.length; i++) { + var a2 = n2[i]; + r.push(e.call(null, t3[a2], a2)); + } + return r; + } + exports.mapValues = mapValues; + function map(t3, e) { + for (var r = [], n2 = 0; n2 < t3.length; n2++) r.push(e.call(null, t3[n2], n2)); + return r; + } + exports.map = map; + function flatten(t3) { + for (var e = [], r = 0; r < t3.length; r++) { + var n2 = t3[r]; + Array.isArray(n2) ? e = e.concat(flatten(n2)) : e.push(n2); + } + return e; + } + exports.flatten = flatten; + function first(t3) { + return isEmpty(t3) ? void 0 : t3[0]; + } + exports.first = first; + function last(t3) { + var e = t3 && t3.length; + return e ? t3[e - 1] : void 0; + } + exports.last = last; + function forEach(t3, e) { + if (Array.isArray(t3)) for (var r = 0; r < t3.length; r++) e.call(null, t3[r], r); + else if (isObject(t3)) for (var n2 = keys(t3), r = 0; r < n2.length; r++) { + var i = n2[r], a2 = t3[i]; + e.call(null, a2, i); + } + else throw Error("non exhaustive match"); + } + exports.forEach = forEach; + function isString(t3) { + return typeof t3 == "string"; + } + exports.isString = isString; + function isUndefined(t3) { + return t3 === void 0; + } + exports.isUndefined = isUndefined; + function isFunction(t3) { + return t3 instanceof Function; + } + exports.isFunction = isFunction; + function drop(t3, e) { + return e === void 0 && (e = 1), t3.slice(e, t3.length); + } + exports.drop = drop; + function dropRight(t3, e) { + return e === void 0 && (e = 1), t3.slice(0, t3.length - e); + } + exports.dropRight = dropRight; + function filter(t3, e) { + var r = []; + if (Array.isArray(t3)) for (var n2 = 0; n2 < t3.length; n2++) { + var i = t3[n2]; + e.call(null, i) && r.push(i); + } + return r; + } + exports.filter = filter; + function reject(t3, e) { + return filter(t3, function(r) { + return !e(r); + }); + } + exports.reject = reject; + function pick(t3, e) { + for (var r = Object.keys(t3), n2 = {}, i = 0; i < r.length; i++) { + var a2 = r[i], o = t3[a2]; + e(o) && (n2[a2] = o); + } + return n2; + } + exports.pick = pick; + function has(t3, e) { + return isObject(t3) ? t3.hasOwnProperty(e) : false; + } + exports.has = has; + function contains(t3, e) { + return find(t3, function(r) { + return r === e; + }) !== void 0; + } + exports.contains = contains; + function cloneArr(t3) { + for (var e = [], r = 0; r < t3.length; r++) e.push(t3[r]); + return e; + } + exports.cloneArr = cloneArr; + function cloneObj(t3) { + var e = {}; + for (var r in t3) Object.prototype.hasOwnProperty.call(t3, r) && (e[r] = t3[r]); + return e; + } + exports.cloneObj = cloneObj; + function find(t3, e) { + for (var r = 0; r < t3.length; r++) { + var n2 = t3[r]; + if (e.call(null, n2)) return n2; + } + } + exports.find = find; + function findAll(t3, e) { + for (var r = [], n2 = 0; n2 < t3.length; n2++) { + var i = t3[n2]; + e.call(null, i) && r.push(i); + } + return r; + } + exports.findAll = findAll; + function reduce(t3, e, r) { + for (var n2 = Array.isArray(t3), i = n2 ? t3 : values(t3), a2 = n2 ? [] : keys(t3), o = r, s = 0; s < i.length; s++) o = e.call(null, o, i[s], n2 ? s : a2[s]); + return o; + } + exports.reduce = reduce; + function compact(t3) { + return reject(t3, function(e) { + return e == null; + }); + } + exports.compact = compact; + function uniq(t3, e) { + e === void 0 && (e = function(n2) { + return n2; + }); + var r = []; + return reduce(t3, function(n2, i) { + var a2 = e(i); + return contains(r, a2) ? n2 : (r.push(a2), n2.concat(i)); + }, []); + } + exports.uniq = uniq; + function partial(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + var n2 = [null], i = n2.concat(e); + return Function.bind.apply(t3, i); + } + exports.partial = partial; + function isArray(t3) { + return Array.isArray(t3); + } + exports.isArray = isArray; + function isRegExp(t3) { + return t3 instanceof RegExp; + } + exports.isRegExp = isRegExp; + function isObject(t3) { + return t3 instanceof Object; + } + exports.isObject = isObject; + function every(t3, e) { + for (var r = 0; r < t3.length; r++) if (!e(t3[r], r)) return false; + return true; + } + exports.every = every; + function difference(t3, e) { + return reject(t3, function(r) { + return contains(e, r); + }); + } + exports.difference = difference; + function some(t3, e) { + for (var r = 0; r < t3.length; r++) if (e(t3[r])) return true; + return false; + } + exports.some = some; + function indexOf(t3, e) { + for (var r = 0; r < t3.length; r++) if (t3[r] === e) return r; + return -1; + } + exports.indexOf = indexOf; + function sortBy(t3, e) { + var r = cloneArr(t3); + return r.sort(function(n2, i) { + return e(n2) - e(i); + }), r; + } + exports.sortBy = sortBy; + function zipObject(t3, e) { + if (t3.length !== e.length) throw Error("can't zipObject with different number of keys and values!"); + for (var r = {}, n2 = 0; n2 < t3.length; n2++) r[t3[n2]] = e[n2]; + return r; + } + exports.zipObject = zipObject; + function assign(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + for (var n2 = 0; n2 < e.length; n2++) for (var i = e[n2], a2 = keys(i), o = 0; o < a2.length; o++) { + var s = a2[o]; + t3[s] = i[s]; + } + return t3; + } + exports.assign = assign; + function assignNoOverwrite(t3) { + for (var e = [], r = 1; r < arguments.length; r++) e[r - 1] = arguments[r]; + for (var n2 = 0; n2 < e.length; n2++) for (var i = e[n2], a2 = keys(i), o = 0; o < a2.length; o++) { + var s = a2[o]; + has(t3, s) || (t3[s] = i[s]); + } + return t3; + } + exports.assignNoOverwrite = assignNoOverwrite; + function defaults() { + for (var t3 = [], e = 0; e < arguments.length; e++) t3[e] = arguments[e]; + return assignNoOverwrite.apply(void 0, __spreadArray([{}], t3)); + } + exports.defaults = defaults; + function groupBy(t3, e) { + var r = {}; + return forEach(t3, function(n2) { + var i = e(n2), a2 = r[i]; + a2 ? a2.push(n2) : r[i] = [n2]; + }), r; + } + exports.groupBy = groupBy; + function merge(t3, e) { + for (var r = cloneObj(t3), n2 = keys(e), i = 0; i < n2.length; i++) { + var a2 = n2[i], o = e[a2]; + r[a2] = o; + } + return r; + } + exports.merge = merge; + function NOOP() { + } + exports.NOOP = NOOP; + function IDENTITY(t3) { + return t3; + } + exports.IDENTITY = IDENTITY; + function packArray(t3) { + for (var e = [], r = 0; r < t3.length; r++) { + var n2 = t3[r]; + e.push(n2 !== void 0 ? n2 : void 0); + } + return e; + } + exports.packArray = packArray; + function PRINT_ERROR(t3) { + console && console.error && console.error("Error: " + t3); + } + exports.PRINT_ERROR = PRINT_ERROR; + function PRINT_WARNING(t3) { + console && console.warn && console.warn("Warning: " + t3); + } + exports.PRINT_WARNING = PRINT_WARNING; + function isES2015MapSupported() { + return typeof Map == "function"; + } + exports.isES2015MapSupported = isES2015MapSupported; + function peek(t3) { + return t3[t3.length - 1]; + } + exports.peek = peek; + function timer(t3) { + var e = (/* @__PURE__ */ new Date()).getTime(), r = t3(), n2 = (/* @__PURE__ */ new Date()).getTime(), i = n2 - e; + return { time: i, value: r }; + } + exports.timer = timer; + function toFastProperties(toBecomeFast) { + function FakeConstructor() { + } + FakeConstructor.prototype = toBecomeFast; + var fakeInstance = new FakeConstructor(); + function fakeAccess() { + return typeof fakeInstance.bar; + } + return fakeAccess(), fakeAccess(), toBecomeFast; + eval(toBecomeFast); + } + exports.toFastProperties = toFastProperties; +}); +var xt = R2((sn, St) => { + (function(t3, e) { + typeof define == "function" && define.amd ? define([], e) : typeof St == "object" && St.exports ? St.exports = e() : t3.regexpToAst = e(); + })(typeof self != "undefined" ? self : sn, function() { + function t3() { + } + t3.prototype.saveState = function() { + return { idx: this.idx, input: this.input, groupIdx: this.groupIdx }; + }, t3.prototype.restoreState = function(u) { + this.idx = u.idx, this.input = u.input, this.groupIdx = u.groupIdx; + }, t3.prototype.pattern = function(u) { + this.idx = 0, this.input = u, this.groupIdx = 0, this.consumeChar("/"); + var d = this.disjunction(); + this.consumeChar("/"); + for (var A2 = { type: "Flags", loc: { begin: this.idx, end: u.length }, global: false, ignoreCase: false, multiLine: false, unicode: false, sticky: false }; this.isRegExpFlag(); ) switch (this.popChar()) { + case "g": + o(A2, "global"); + break; + case "i": + o(A2, "ignoreCase"); + break; + case "m": + o(A2, "multiLine"); + break; + case "u": + o(A2, "unicode"); + break; + case "y": + o(A2, "sticky"); + break; + } + if (this.idx !== this.input.length) throw Error("Redundant input: " + this.input.substring(this.idx)); + return { type: "Pattern", flags: A2, value: d, loc: this.loc(0) }; + }, t3.prototype.disjunction = function() { + var u = [], d = this.idx; + for (u.push(this.alternative()); this.peekChar() === "|"; ) this.consumeChar("|"), u.push(this.alternative()); + return { type: "Disjunction", value: u, loc: this.loc(d) }; + }, t3.prototype.alternative = function() { + for (var u = [], d = this.idx; this.isTerm(); ) u.push(this.term()); + return { type: "Alternative", value: u, loc: this.loc(d) }; + }, t3.prototype.term = function() { + return this.isAssertion() ? this.assertion() : this.atom(); + }, t3.prototype.assertion = function() { + var u = this.idx; + switch (this.popChar()) { + case "^": + return { type: "StartAnchor", loc: this.loc(u) }; + case "$": + return { type: "EndAnchor", loc: this.loc(u) }; + case "\\": + switch (this.popChar()) { + case "b": + return { type: "WordBoundary", loc: this.loc(u) }; + case "B": + return { type: "NonWordBoundary", loc: this.loc(u) }; + } + throw Error("Invalid Assertion Escape"); + case "(": + this.consumeChar("?"); + var d; + switch (this.popChar()) { + case "=": + d = "Lookahead"; + break; + case "!": + d = "NegativeLookahead"; + break; + } + s(d); + var A2 = this.disjunction(); + return this.consumeChar(")"), { type: d, value: A2, loc: this.loc(u) }; + } + c2(); + }, t3.prototype.quantifier = function(u) { + var d, A2 = this.idx; + switch (this.popChar()) { + case "*": + d = { atLeast: 0, atMost: Infinity }; + break; + case "+": + d = { atLeast: 1, atMost: Infinity }; + break; + case "?": + d = { atLeast: 0, atMost: 1 }; + break; + case "{": + var _ = this.integerIncludingZero(); + switch (this.popChar()) { + case "}": + d = { atLeast: _, atMost: _ }; + break; + case ",": + var g2; + this.isDigit() ? (g2 = this.integerIncludingZero(), d = { atLeast: _, atMost: g2 }) : d = { atLeast: _, atMost: Infinity }, this.consumeChar("}"); + break; + } + if (u === true && d === void 0) return; + s(d); + break; + } + if (!(u === true && d === void 0)) return s(d), this.peekChar(0) === "?" ? (this.consumeChar("?"), d.greedy = false) : d.greedy = true, d.type = "Quantifier", d.loc = this.loc(A2), d; + }, t3.prototype.atom = function() { + var u, d = this.idx; + switch (this.peekChar()) { + case ".": + u = this.dotAll(); + break; + case "\\": + u = this.atomEscape(); + break; + case "[": + u = this.characterClass(); + break; + case "(": + u = this.group(); + break; + } + return u === void 0 && this.isPatternCharacter() && (u = this.patternCharacter()), s(u), u.loc = this.loc(d), this.isQuantifier() && (u.quantifier = this.quantifier()), u; + }, t3.prototype.dotAll = function() { + return this.consumeChar("."), { type: "Set", complement: true, value: [i(` +`), i("\r"), i("\u2028"), i("\u2029")] }; + }, t3.prototype.atomEscape = function() { + switch (this.consumeChar("\\"), this.peekChar()) { + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + return this.decimalEscapeAtom(); + case "d": + case "D": + case "s": + case "S": + case "w": + case "W": + return this.characterClassEscape(); + case "f": + case "n": + case "r": + case "t": + case "v": + return this.controlEscapeAtom(); + case "c": + return this.controlLetterEscapeAtom(); + case "0": + return this.nulCharacterAtom(); + case "x": + return this.hexEscapeSequenceAtom(); + case "u": + return this.regExpUnicodeEscapeSequenceAtom(); + default: + return this.identityEscapeAtom(); + } + }, t3.prototype.decimalEscapeAtom = function() { + var u = this.positiveInteger(); + return { type: "GroupBackReference", value: u }; + }, t3.prototype.characterClassEscape = function() { + var u, d = false; + switch (this.popChar()) { + case "d": + u = p2; + break; + case "D": + u = p2, d = true; + break; + case "s": + u = m; + break; + case "S": + u = m, d = true; + break; + case "w": + u = l2; + break; + case "W": + u = l2, d = true; + break; + } + return s(u), { type: "Set", value: u, complement: d }; + }, t3.prototype.controlEscapeAtom = function() { + var u; + switch (this.popChar()) { + case "f": + u = i("\f"); + break; + case "n": + u = i(` +`); + break; + case "r": + u = i("\r"); + break; + case "t": + u = i(" "); + break; + case "v": + u = i("\v"); + break; + } + return s(u), { type: "Character", value: u }; + }, t3.prototype.controlLetterEscapeAtom = function() { + this.consumeChar("c"); + var u = this.popChar(); + if (/[a-zA-Z]/.test(u) === false) throw Error("Invalid "); + var d = u.toUpperCase().charCodeAt(0) - 64; + return { type: "Character", value: d }; + }, t3.prototype.nulCharacterAtom = function() { + return this.consumeChar("0"), { type: "Character", value: i("\0") }; + }, t3.prototype.hexEscapeSequenceAtom = function() { + return this.consumeChar("x"), this.parseHexDigits(2); + }, t3.prototype.regExpUnicodeEscapeSequenceAtom = function() { + return this.consumeChar("u"), this.parseHexDigits(4); + }, t3.prototype.identityEscapeAtom = function() { + var u = this.popChar(); + return { type: "Character", value: i(u) }; + }, t3.prototype.classPatternCharacterAtom = function() { + switch (this.peekChar()) { + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + case "\\": + case "]": + throw Error("TBD"); + default: + var u = this.popChar(); + return { type: "Character", value: i(u) }; + } + }, t3.prototype.characterClass = function() { + var u = [], d = false; + for (this.consumeChar("["), this.peekChar(0) === "^" && (this.consumeChar("^"), d = true); this.isClassAtom(); ) { + var A2 = this.classAtom(), _ = A2.type === "Character"; + if (_ && this.isRangeDash()) { + this.consumeChar("-"); + var g2 = this.classAtom(), y2 = g2.type === "Character"; + if (y2) { + if (g2.value < A2.value) throw Error("Range out of order in character class"); + u.push({ from: A2.value, to: g2.value }); + } else a2(A2.value, u), u.push(i("-")), a2(g2.value, u); + } else a2(A2.value, u); + } + return this.consumeChar("]"), { type: "Set", complement: d, value: u }; + }, t3.prototype.classAtom = function() { + switch (this.peekChar()) { + case "]": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + throw Error("TBD"); + case "\\": + return this.classEscape(); + default: + return this.classPatternCharacterAtom(); + } + }, t3.prototype.classEscape = function() { + switch (this.consumeChar("\\"), this.peekChar()) { + case "b": + return this.consumeChar("b"), { type: "Character", value: i("\b") }; + case "d": + case "D": + case "s": + case "S": + case "w": + case "W": + return this.characterClassEscape(); + case "f": + case "n": + case "r": + case "t": + case "v": + return this.controlEscapeAtom(); + case "c": + return this.controlLetterEscapeAtom(); + case "0": + return this.nulCharacterAtom(); + case "x": + return this.hexEscapeSequenceAtom(); + case "u": + return this.regExpUnicodeEscapeSequenceAtom(); + default: + return this.identityEscapeAtom(); + } + }, t3.prototype.group = function() { + var u = true; + switch (this.consumeChar("("), this.peekChar(0)) { + case "?": + this.consumeChar("?"), this.consumeChar(":"), u = false; + break; + default: + this.groupIdx++; + break; + } + var d = this.disjunction(); + this.consumeChar(")"); + var A2 = { type: "Group", capturing: u, value: d }; + return u && (A2.idx = this.groupIdx), A2; + }, t3.prototype.positiveInteger = function() { + var u = this.popChar(); + if (n2.test(u) === false) throw Error("Expecting a positive integer"); + for (; r.test(this.peekChar(0)); ) u += this.popChar(); + return parseInt(u, 10); + }, t3.prototype.integerIncludingZero = function() { + var u = this.popChar(); + if (r.test(u) === false) throw Error("Expecting an integer"); + for (; r.test(this.peekChar(0)); ) u += this.popChar(); + return parseInt(u, 10); + }, t3.prototype.patternCharacter = function() { + var u = this.popChar(); + switch (u) { + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + case "^": + case "$": + case "\\": + case ".": + case "*": + case "+": + case "?": + case "(": + case ")": + case "[": + case "|": + throw Error("TBD"); + default: + return { type: "Character", value: i(u) }; + } + }, t3.prototype.isRegExpFlag = function() { + switch (this.peekChar(0)) { + case "g": + case "i": + case "m": + case "u": + case "y": + return true; + default: + return false; + } + }, t3.prototype.isRangeDash = function() { + return this.peekChar() === "-" && this.isClassAtom(1); + }, t3.prototype.isDigit = function() { + return r.test(this.peekChar(0)); + }, t3.prototype.isClassAtom = function(u) { + switch (u === void 0 && (u = 0), this.peekChar(u)) { + case "]": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + return false; + default: + return true; + } + }, t3.prototype.isTerm = function() { + return this.isAtom() || this.isAssertion(); + }, t3.prototype.isAtom = function() { + if (this.isPatternCharacter()) return true; + switch (this.peekChar(0)) { + case ".": + case "\\": + case "[": + case "(": + return true; + default: + return false; + } + }, t3.prototype.isAssertion = function() { + switch (this.peekChar(0)) { + case "^": + case "$": + return true; + case "\\": + switch (this.peekChar(1)) { + case "b": + case "B": + return true; + default: + return false; + } + case "(": + return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!"); + default: + return false; + } + }, t3.prototype.isQuantifier = function() { + var u = this.saveState(); + try { + return this.quantifier(true) !== void 0; + } catch (d) { + return false; + } finally { + this.restoreState(u); + } + }, t3.prototype.isPatternCharacter = function() { + switch (this.peekChar()) { + case "^": + case "$": + case "\\": + case ".": + case "*": + case "+": + case "?": + case "(": + case ")": + case "[": + case "|": + case "/": + case ` +`: + case "\r": + case "\u2028": + case "\u2029": + return false; + default: + return true; + } + }, t3.prototype.parseHexDigits = function(u) { + for (var d = "", A2 = 0; A2 < u; A2++) { + var _ = this.popChar(); + if (e.test(_) === false) throw Error("Expecting a HexDecimal digits"); + d += _; + } + var g2 = parseInt(d, 16); + return { type: "Character", value: g2 }; + }, t3.prototype.peekChar = function(u) { + return u === void 0 && (u = 0), this.input[this.idx + u]; + }, t3.prototype.popChar = function() { + var u = this.peekChar(0); + return this.consumeChar(), u; + }, t3.prototype.consumeChar = function(u) { + if (u !== void 0 && this.input[this.idx] !== u) throw Error("Expected: '" + u + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx); + if (this.idx >= this.input.length) throw Error("Unexpected end of input"); + this.idx++; + }, t3.prototype.loc = function(u) { + return { begin: u, end: this.idx }; + }; + var e = /[0-9a-fA-F]/, r = /[0-9]/, n2 = /[1-9]/; + function i(u) { + return u.charCodeAt(0); + } + function a2(u, d) { + u.length !== void 0 ? u.forEach(function(A2) { + d.push(A2); + }) : d.push(u); + } + function o(u, d) { + if (u[d] === true) throw "duplicate flag " + d; + u[d] = true; + } + function s(u) { + if (u === void 0) throw Error("Internal Error - Should never get here!"); + } + function c2() { + throw Error("Internal Error - Should never get here!"); + } + var f, p2 = []; + for (f = i("0"); f <= i("9"); f++) p2.push(f); + var l2 = [i("_")].concat(p2); + for (f = i("a"); f <= i("z"); f++) l2.push(f); + for (f = i("A"); f <= i("Z"); f++) l2.push(f); + var m = [i(" "), i("\f"), i(` +`), i("\r"), i(" "), i("\v"), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i(" "), i("\u2028"), i("\u2029"), i(" "), i(" "), i(" "), i("\uFEFF")]; + function v() { + } + return v.prototype.visitChildren = function(u) { + for (var d in u) { + var A2 = u[d]; + u.hasOwnProperty(d) && (A2.type !== void 0 ? this.visit(A2) : Array.isArray(A2) && A2.forEach(function(_) { + this.visit(_); + }, this)); + } + }, v.prototype.visit = function(u) { + switch (u.type) { + case "Pattern": + this.visitPattern(u); + break; + case "Flags": + this.visitFlags(u); + break; + case "Disjunction": + this.visitDisjunction(u); + break; + case "Alternative": + this.visitAlternative(u); + break; + case "StartAnchor": + this.visitStartAnchor(u); + break; + case "EndAnchor": + this.visitEndAnchor(u); + break; + case "WordBoundary": + this.visitWordBoundary(u); + break; + case "NonWordBoundary": + this.visitNonWordBoundary(u); + break; + case "Lookahead": + this.visitLookahead(u); + break; + case "NegativeLookahead": + this.visitNegativeLookahead(u); + break; + case "Character": + this.visitCharacter(u); + break; + case "Set": + this.visitSet(u); + break; + case "Group": + this.visitGroup(u); + break; + case "GroupBackReference": + this.visitGroupBackReference(u); + break; + case "Quantifier": + this.visitQuantifier(u); + break; + } + this.visitChildren(u); + }, v.prototype.visitPattern = function(u) { + }, v.prototype.visitFlags = function(u) { + }, v.prototype.visitDisjunction = function(u) { + }, v.prototype.visitAlternative = function(u) { + }, v.prototype.visitStartAnchor = function(u) { + }, v.prototype.visitEndAnchor = function(u) { + }, v.prototype.visitWordBoundary = function(u) { + }, v.prototype.visitNonWordBoundary = function(u) { + }, v.prototype.visitLookahead = function(u) { + }, v.prototype.visitNegativeLookahead = function(u) { + }, v.prototype.visitCharacter = function(u) { + }, v.prototype.visitSet = function(u) { + }, v.prototype.visitGroup = function(u) { + }, v.prototype.visitGroupBackReference = function(u) { + }, v.prototype.visitQuantifier = function(u) { + }, { RegExpParser: t3, BaseRegExpVisitor: v, VERSION: "0.5.0" }; + }); +}); +var Lt = R2((He) => { + "use strict"; + Object.defineProperty(He, "__esModule", { value: true }); + He.clearRegExpParserCache = He.getRegExpAst = void 0; + var Ga = xt(), Ct = {}, Wa = new Ga.RegExpParser(); + function Ba(t3) { + var e = t3.toString(); + if (Ct.hasOwnProperty(e)) return Ct[e]; + var r = Wa.pattern(e); + return Ct[e] = r, r; + } + He.getRegExpAst = Ba; + function qa() { + Ct = {}; + } + He.clearRegExpParserCache = qa; +}); +var pn = R2((re) => { + "use strict"; + var ja = re && re.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(re, "__esModule", { value: true }); + re.canMatchCharCode = re.firstCharOptimizedIndices = re.getOptimizedStartCodesIndices = re.failedOptimizationPrefixMsg = void 0; + var un = xt(), pe2 = k(), cn = Lt(), Ce = Tr(), ln2 = "Complement Sets are not supported for first char optimization"; + re.failedOptimizationPrefixMsg = `Unable to use "first char" lexer optimizations: +`; + function Va(t3, e) { + e === void 0 && (e = false); + try { + var r = cn.getRegExpAst(t3), n2 = Mt(r.value, {}, r.flags.ignoreCase); + return n2; + } catch (a2) { + if (a2.message === ln2) e && pe2.PRINT_WARNING("" + re.failedOptimizationPrefixMsg + (" Unable to optimize: < " + t3.toString() + ` > +`) + ` Complement Sets cannot be automatically optimized. + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`); + else { + var i = ""; + e && (i = ` + This will disable the lexer's first char optimizations. + See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`), pe2.PRINT_ERROR(re.failedOptimizationPrefixMsg + ` +` + (" Failed parsing: < " + t3.toString() + ` > +`) + (" Using the regexp-to-ast library version: " + un.VERSION + ` +`) + " Please open an issue at: https://github.com/bd82/regexp-to-ast/issues" + i); + } + } + return []; + } + re.getOptimizedStartCodesIndices = Va; + function Mt(t3, e, r) { + switch (t3.type) { + case "Disjunction": + for (var n2 = 0; n2 < t3.value.length; n2++) Mt(t3.value[n2], e, r); + break; + case "Alternative": + for (var i = t3.value, n2 = 0; n2 < i.length; n2++) { + var a2 = i[n2]; + switch (a2.type) { + case "EndAnchor": + case "GroupBackReference": + case "Lookahead": + case "NegativeLookahead": + case "StartAnchor": + case "WordBoundary": + case "NonWordBoundary": + continue; + } + var o = a2; + switch (o.type) { + case "Character": + bt(o.value, e, r); + break; + case "Set": + if (o.complement === true) throw Error(ln2); + pe2.forEach(o.value, function(f) { + if (typeof f == "number") bt(f, e, r); + else { + var p2 = f; + if (r === true) for (var l2 = p2.from; l2 <= p2.to; l2++) bt(l2, e, r); + else { + for (var l2 = p2.from; l2 <= p2.to && l2 < Ce.minOptimizationVal; l2++) bt(l2, e, r); + if (p2.to >= Ce.minOptimizationVal) for (var m = p2.from >= Ce.minOptimizationVal ? p2.from : Ce.minOptimizationVal, v = p2.to, u = Ce.charCodeToOptimizedIndex(m), d = Ce.charCodeToOptimizedIndex(v), A2 = u; A2 <= d; A2++) e[A2] = A2; + } + } + }); + break; + case "Group": + Mt(o.value, e, r); + break; + default: + throw Error("Non Exhaustive Match"); + } + var s = o.quantifier !== void 0 && o.quantifier.atLeast === 0; + if (o.type === "Group" && yr(o) === false || o.type !== "Group" && s === false) break; + } + break; + default: + throw Error("non exhaustive match!"); + } + return pe2.values(e); + } + re.firstCharOptimizedIndices = Mt; + function bt(t3, e, r) { + var n2 = Ce.charCodeToOptimizedIndex(t3); + e[n2] = n2, r === true && Ka(t3, e); + } + function Ka(t3, e) { + var r = String.fromCharCode(t3), n2 = r.toUpperCase(); + if (n2 !== r) { + var i = Ce.charCodeToOptimizedIndex(n2.charCodeAt(0)); + e[i] = i; + } else { + var a2 = r.toLowerCase(); + if (a2 !== r) { + var i = Ce.charCodeToOptimizedIndex(a2.charCodeAt(0)); + e[i] = i; + } + } + } + function fn(t3, e) { + return pe2.find(t3.value, function(r) { + if (typeof r == "number") return pe2.contains(e, r); + var n2 = r; + return pe2.find(e, function(i) { + return n2.from <= i && i <= n2.to; + }) !== void 0; + }); + } + function yr(t3) { + return t3.quantifier && t3.quantifier.atLeast === 0 ? true : t3.value ? pe2.isArray(t3.value) ? pe2.every(t3.value, yr) : yr(t3.value) : false; + } + var za = function(t3) { + ja(e, t3); + function e(r) { + var n2 = t3.call(this) || this; + return n2.targetCharCodes = r, n2.found = false, n2; + } + return e.prototype.visitChildren = function(r) { + if (this.found !== true) { + switch (r.type) { + case "Lookahead": + this.visitLookahead(r); + return; + case "NegativeLookahead": + this.visitNegativeLookahead(r); + return; + } + t3.prototype.visitChildren.call(this, r); + } + }, e.prototype.visitCharacter = function(r) { + pe2.contains(this.targetCharCodes, r.value) && (this.found = true); + }, e.prototype.visitSet = function(r) { + r.complement ? fn(r, this.targetCharCodes) === void 0 && (this.found = true) : fn(r, this.targetCharCodes) !== void 0 && (this.found = true); + }, e; + }(un.BaseRegExpVisitor); + function Ha(t3, e) { + if (e instanceof RegExp) { + var r = cn.getRegExpAst(e), n2 = new za(t3); + return n2.visit(r), n2.found; + } else return pe2.find(e, function(i) { + return pe2.contains(t3, i.charCodeAt(0)); + }) !== void 0; + } + re.canMatchCharCode = Ha; +}); +var Tr = R2((T) => { + "use strict"; + var hn = T && T.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(T, "__esModule", { value: true }); + T.charCodeToOptimizedIndex = T.minOptimizationVal = T.buildLineBreakIssueMessage = T.LineTerminatorOptimizedTester = T.isShortPattern = T.isCustomPattern = T.cloneEmptyGroups = T.performWarningRuntimeChecks = T.performRuntimeChecks = T.addStickyFlag = T.addStartOfInput = T.findUnreachablePatterns = T.findModesThatDoNotExist = T.findInvalidGroupType = T.findDuplicatePatterns = T.findUnsupportedFlags = T.findStartOfInputAnchor = T.findEmptyMatchRegExps = T.findEndOfInputAnchor = T.findInvalidPatterns = T.findMissingPatterns = T.validatePatterns = T.analyzeTokenTypes = T.enableSticky = T.disableSticky = T.SUPPORT_STICKY = T.MODES = T.DEFAULT_MODE = void 0; + var dn = xt(), F2 = ft(), h = k(), Ye = pn(), vn = Lt(), Ae2 = "PATTERN"; + T.DEFAULT_MODE = "defaultMode"; + T.MODES = "modes"; + T.SUPPORT_STICKY = typeof new RegExp("(?:)").sticky == "boolean"; + function Ya() { + T.SUPPORT_STICKY = false; + } + T.disableSticky = Ya; + function Xa() { + T.SUPPORT_STICKY = true; + } + T.enableSticky = Xa; + function Za(t3, e) { + e = h.defaults(e, { useSticky: T.SUPPORT_STICKY, debug: false, safeMode: false, positionTracking: "full", lineTerminatorCharacters: ["\r", ` +`], tracer: function(g2, y2) { + return y2(); + } }); + var r = e.tracer; + r("initCharCodeToOptimizedIndexMap", function() { + $a(); + }); + var n2; + r("Reject Lexer.NA", function() { + n2 = h.reject(t3, function(g2) { + return g2[Ae2] === F2.Lexer.NA; + }); + }); + var i = false, a2; + r("Transform Patterns", function() { + i = false, a2 = h.map(n2, function(g2) { + var y2 = g2[Ae2]; + if (h.isRegExp(y2)) { + var b3 = y2.source; + return b3.length === 1 && b3 !== "^" && b3 !== "$" && b3 !== "." && !y2.ignoreCase ? b3 : b3.length === 2 && b3[0] === "\\" && !h.contains(["d", "D", "s", "S", "t", "r", "n", "t", "0", "c", "b", "B", "f", "v", "w", "W"], b3[1]) ? b3[1] : e.useSticky ? gr(y2) : _r(y2); + } else { + if (h.isFunction(y2)) return i = true, { exec: y2 }; + if (h.has(y2, "exec")) return i = true, y2; + if (typeof y2 == "string") { + if (y2.length === 1) return y2; + var L = y2.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&"), se2 = new RegExp(L); + return e.useSticky ? gr(se2) : _r(se2); + } else throw Error("non exhaustive match"); + } + }); + }); + var o, s, c2, f, p2; + r("misc mapping", function() { + o = h.map(n2, function(g2) { + return g2.tokenTypeIdx; + }), s = h.map(n2, function(g2) { + var y2 = g2.GROUP; + if (y2 !== F2.Lexer.SKIPPED) { + if (h.isString(y2)) return y2; + if (h.isUndefined(y2)) return false; + throw Error("non exhaustive match"); + } + }), c2 = h.map(n2, function(g2) { + var y2 = g2.LONGER_ALT; + if (y2) { + var b3 = h.indexOf(n2, y2); + return b3; + } + }), f = h.map(n2, function(g2) { + return g2.PUSH_MODE; + }), p2 = h.map(n2, function(g2) { + return h.has(g2, "POP_MODE"); + }); + }); + var l2; + r("Line Terminator Handling", function() { + var g2 = Tn(e.lineTerminatorCharacters); + l2 = h.map(n2, function(y2) { + return false; + }), e.positionTracking !== "onlyOffset" && (l2 = h.map(n2, function(y2) { + if (h.has(y2, "LINE_BREAKS")) return y2.LINE_BREAKS; + if (En(y2, g2) === false) return Ye.canMatchCharCode(g2, y2.PATTERN); + })); + }); + var m, v, u, d; + r("Misc Mapping #2", function() { + m = h.map(n2, Ar), v = h.map(a2, mn), u = h.reduce(n2, function(g2, y2) { + var b3 = y2.GROUP; + return h.isString(b3) && b3 !== F2.Lexer.SKIPPED && (g2[b3] = []), g2; + }, {}), d = h.map(a2, function(g2, y2) { + return { pattern: a2[y2], longerAlt: c2[y2], canLineTerminator: l2[y2], isCustom: m[y2], short: v[y2], group: s[y2], push: f[y2], pop: p2[y2], tokenTypeIdx: o[y2], tokenType: n2[y2] }; + }); + }); + var A2 = true, _ = []; + return e.safeMode || r("First Char Optimization", function() { + _ = h.reduce(n2, function(g2, y2, b3) { + if (typeof y2.PATTERN == "string") { + var L = y2.PATTERN.charCodeAt(0), se2 = Or(L); + Rr(g2, se2, d[b3]); + } else if (h.isArray(y2.START_CHARS_HINT)) { + var fe; + h.forEach(y2.START_CHARS_HINT, function(ue) { + var Q3 = typeof ue == "string" ? ue.charCodeAt(0) : ue, te2 = Or(Q3); + fe !== te2 && (fe = te2, Rr(g2, te2, d[b3])); + }); + } else if (h.isRegExp(y2.PATTERN)) if (y2.PATTERN.unicode) A2 = false, e.ensureOptimizations && h.PRINT_ERROR("" + Ye.failedOptimizationPrefixMsg + (" Unable to analyze < " + y2.PATTERN.toString() + ` > pattern. +`) + ` The regexp unicode flag is not currently supported by the regexp-to-ast library. + This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`); + else { + var Z2 = Ye.getOptimizedStartCodesIndices(y2.PATTERN, e.ensureOptimizations); + h.isEmpty(Z2) && (A2 = false), h.forEach(Z2, function(ue) { + Rr(g2, ue, d[b3]); + }); + } + else e.ensureOptimizations && h.PRINT_ERROR("" + Ye.failedOptimizationPrefixMsg + (" TokenType: <" + y2.name + `> is using a custom token pattern without providing parameter. +`) + ` This will disable the lexer's first char optimizations. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`), A2 = false; + return g2; + }, []); + }), r("ArrayPacking", function() { + _ = h.packArray(_); + }), { emptyGroups: u, patternIdxToConfig: d, charCodeToPatternIdxToConfig: _, hasCustom: i, canBeOptimized: A2 }; + } + T.analyzeTokenTypes = Za; + function Ja(t3, e) { + var r = [], n2 = yn(t3); + r = r.concat(n2.errors); + var i = _n(n2.valid), a2 = i.valid; + return r = r.concat(i.errors), r = r.concat(Qa(a2)), r = r.concat(gn(a2)), r = r.concat(An(a2, e)), r = r.concat(Rn(a2)), r; + } + T.validatePatterns = Ja; + function Qa(t3) { + var e = [], r = h.filter(t3, function(n2) { + return h.isRegExp(n2[Ae2]); + }); + return e = e.concat(On(r)), e = e.concat(In2(r)), e = e.concat(kn(r)), e = e.concat(Pn(r)), e = e.concat(Nn(r)), e; + } + function yn(t3) { + var e = h.filter(t3, function(i) { + return !h.has(i, Ae2); + }), r = h.map(e, function(i) { + return { message: "Token Type: ->" + i.name + "<- missing static 'PATTERN' property", type: F2.LexerDefinitionErrorType.MISSING_PATTERN, tokenTypes: [i] }; + }), n2 = h.difference(t3, e); + return { errors: r, valid: n2 }; + } + T.findMissingPatterns = yn; + function _n(t3) { + var e = h.filter(t3, function(i) { + var a2 = i[Ae2]; + return !h.isRegExp(a2) && !h.isFunction(a2) && !h.has(a2, "exec") && !h.isString(a2); + }), r = h.map(e, function(i) { + return { message: "Token Type: ->" + i.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.", type: F2.LexerDefinitionErrorType.INVALID_PATTERN, tokenTypes: [i] }; + }), n2 = h.difference(t3, e); + return { errors: r, valid: n2 }; + } + T.findInvalidPatterns = _n; + var eo = /[^\\][\$]/; + function On(t3) { + var e = function(i) { + hn(a2, i); + function a2() { + var o = i !== null && i.apply(this, arguments) || this; + return o.found = false, o; + } + return a2.prototype.visitEndAnchor = function(o) { + this.found = true; + }, a2; + }(dn.BaseRegExpVisitor), r = h.filter(t3, function(i) { + var a2 = i[Ae2]; + try { + var o = vn.getRegExpAst(a2), s = new e(); + return s.visit(o), s.found; + } catch (c2) { + return eo.test(a2.source); + } + }), n2 = h.map(r, function(i) { + return { message: `Unexpected RegExp Anchor Error: + Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain end of input anchor '$' + See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`, type: F2.LexerDefinitionErrorType.EOI_ANCHOR_FOUND, tokenTypes: [i] }; + }); + return n2; + } + T.findEndOfInputAnchor = On; + function Nn(t3) { + var e = h.filter(t3, function(n2) { + var i = n2[Ae2]; + return i.test(""); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'PATTERN' must not match an empty string", type: F2.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN, tokenTypes: [n2] }; + }); + return r; + } + T.findEmptyMatchRegExps = Nn; + var to = /[^\\[][\^]|^\^/; + function In2(t3) { + var e = function(i) { + hn(a2, i); + function a2() { + var o = i !== null && i.apply(this, arguments) || this; + return o.found = false, o; + } + return a2.prototype.visitStartAnchor = function(o) { + this.found = true; + }, a2; + }(dn.BaseRegExpVisitor), r = h.filter(t3, function(i) { + var a2 = i[Ae2]; + try { + var o = vn.getRegExpAst(a2), s = new e(); + return s.visit(o), s.found; + } catch (c2) { + return to.test(a2.source); + } + }), n2 = h.map(r, function(i) { + return { message: `Unexpected RegExp Anchor Error: + Token Type: ->` + i.name + `<- static 'PATTERN' cannot contain start of input anchor '^' + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`, type: F2.LexerDefinitionErrorType.SOI_ANCHOR_FOUND, tokenTypes: [i] }; + }); + return n2; + } + T.findStartOfInputAnchor = In2; + function kn(t3) { + var e = h.filter(t3, function(n2) { + var i = n2[Ae2]; + return i instanceof RegExp && (i.multiline || i.global); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')", type: F2.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND, tokenTypes: [n2] }; + }); + return r; + } + T.findUnsupportedFlags = kn; + function Pn(t3) { + var e = [], r = h.map(t3, function(a2) { + return h.reduce(t3, function(o, s) { + return a2.PATTERN.source === s.PATTERN.source && !h.contains(e, s) && s.PATTERN !== F2.Lexer.NA && (e.push(s), o.push(s)), o; + }, []); + }); + r = h.compact(r); + var n2 = h.filter(r, function(a2) { + return a2.length > 1; + }), i = h.map(n2, function(a2) { + var o = h.map(a2, function(c2) { + return c2.name; + }), s = h.first(a2).PATTERN; + return { message: "The same RegExp pattern ->" + s + "<-" + ("has been used in all of the following Token Types: " + o.join(", ") + " <-"), type: F2.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND, tokenTypes: a2 }; + }); + return i; + } + T.findDuplicatePatterns = Pn; + function gn(t3) { + var e = h.filter(t3, function(n2) { + if (!h.has(n2, "GROUP")) return false; + var i = n2.GROUP; + return i !== F2.Lexer.SKIPPED && i !== F2.Lexer.NA && !h.isString(i); + }), r = h.map(e, function(n2) { + return { message: "Token Type: ->" + n2.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String", type: F2.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND, tokenTypes: [n2] }; + }); + return r; + } + T.findInvalidGroupType = gn; + function An(t3, e) { + var r = h.filter(t3, function(i) { + return i.PUSH_MODE !== void 0 && !h.contains(e, i.PUSH_MODE); + }), n2 = h.map(r, function(i) { + var a2 = "Token Type: ->" + i.name + "<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->" + i.PUSH_MODE + "<-which does not exist"; + return { message: a2, type: F2.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST, tokenTypes: [i] }; + }); + return n2; + } + T.findModesThatDoNotExist = An; + function Rn(t3) { + var e = [], r = h.reduce(t3, function(n2, i, a2) { + var o = i.PATTERN; + return o === F2.Lexer.NA || (h.isString(o) ? n2.push({ str: o, idx: a2, tokenType: i }) : h.isRegExp(o) && no(o) && n2.push({ str: o.source, idx: a2, tokenType: i })), n2; + }, []); + return h.forEach(t3, function(n2, i) { + h.forEach(r, function(a2) { + var o = a2.str, s = a2.idx, c2 = a2.tokenType; + if (i < s && ro(o, n2.PATTERN)) { + var f = "Token: ->" + c2.name + `<- can never be matched. +` + ("Because it appears AFTER the Token Type ->" + n2.name + "<-") + `in the lexer's definition. +See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`; + e.push({ message: f, type: F2.LexerDefinitionErrorType.UNREACHABLE_PATTERN, tokenTypes: [n2, c2] }); + } + }); + }), e; + } + T.findUnreachablePatterns = Rn; + function ro(t3, e) { + if (h.isRegExp(e)) { + var r = e.exec(t3); + return r !== null && r.index === 0; + } else { + if (h.isFunction(e)) return e(t3, 0, [], {}); + if (h.has(e, "exec")) return e.exec(t3, 0, [], {}); + if (typeof e == "string") return e === t3; + throw Error("non exhaustive match"); + } + } + function no(t3) { + var e = [".", "\\", "[", "]", "|", "^", "$", "(", ")", "?", "*", "+", "{"]; + return h.find(e, function(r) { + return t3.source.indexOf(r) !== -1; + }) === void 0; + } + function _r(t3) { + var e = t3.ignoreCase ? "i" : ""; + return new RegExp("^(?:" + t3.source + ")", e); + } + T.addStartOfInput = _r; + function gr(t3) { + var e = t3.ignoreCase ? "iy" : "y"; + return new RegExp("" + t3.source, e); + } + T.addStickyFlag = gr; + function io(t3, e, r) { + var n2 = []; + return h.has(t3, T.DEFAULT_MODE) || n2.push({ message: "A MultiMode Lexer cannot be initialized without a <" + T.DEFAULT_MODE + `> property in its definition +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE }), h.has(t3, T.MODES) || n2.push({ message: "A MultiMode Lexer cannot be initialized without a <" + T.MODES + `> property in its definition +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY }), h.has(t3, T.MODES) && h.has(t3, T.DEFAULT_MODE) && !h.has(t3.modes, t3.defaultMode) && n2.push({ message: "A MultiMode Lexer cannot be initialized with a " + T.DEFAULT_MODE + ": <" + t3.defaultMode + `>which does not exist +`, type: F2.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST }), h.has(t3, T.MODES) && h.forEach(t3.modes, function(i, a2) { + h.forEach(i, function(o, s) { + h.isUndefined(o) && n2.push({ message: "A Lexer cannot be initialized using an undefined Token Type. Mode:" + ("<" + a2 + "> at index: <" + s + `> +`), type: F2.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED }); + }); + }), n2; + } + T.performRuntimeChecks = io; + function ao(t3, e, r) { + var n2 = [], i = false, a2 = h.compact(h.flatten(h.mapValues(t3.modes, function(c2) { + return c2; + }))), o = h.reject(a2, function(c2) { + return c2[Ae2] === F2.Lexer.NA; + }), s = Tn(r); + return e && h.forEach(o, function(c2) { + var f = En(c2, s); + if (f !== false) { + var p2 = Sn2(c2, f), l2 = { message: p2, type: f.issue, tokenType: c2 }; + n2.push(l2); + } else h.has(c2, "LINE_BREAKS") ? c2.LINE_BREAKS === true && (i = true) : Ye.canMatchCharCode(s, c2.PATTERN) && (i = true); + }), e && !i && n2.push({ message: `Warning: No LINE_BREAKS Found. + This Lexer has been defined to track line and column information, + But none of the Token Types can be identified as matching a line terminator. + See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS + for details.`, type: F2.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS }), n2; + } + T.performWarningRuntimeChecks = ao; + function oo(t3) { + var e = {}, r = h.keys(t3); + return h.forEach(r, function(n2) { + var i = t3[n2]; + if (h.isArray(i)) e[n2] = []; + else throw Error("non exhaustive match"); + }), e; + } + T.cloneEmptyGroups = oo; + function Ar(t3) { + var e = t3.PATTERN; + if (h.isRegExp(e)) return false; + if (h.isFunction(e)) return true; + if (h.has(e, "exec")) return true; + if (h.isString(e)) return false; + throw Error("non exhaustive match"); + } + T.isCustomPattern = Ar; + function mn(t3) { + return h.isString(t3) && t3.length === 1 ? t3.charCodeAt(0) : false; + } + T.isShortPattern = mn; + T.LineTerminatorOptimizedTester = { test: function(t3) { + for (var e = t3.length, r = this.lastIndex; r < e; r++) { + var n2 = t3.charCodeAt(r); + if (n2 === 10) return this.lastIndex = r + 1, true; + if (n2 === 13) return t3.charCodeAt(r + 1) === 10 ? this.lastIndex = r + 2 : this.lastIndex = r + 1, true; + } + return false; + }, lastIndex: 0 }; + function En(t3, e) { + if (h.has(t3, "LINE_BREAKS")) return false; + if (h.isRegExp(t3.PATTERN)) { + try { + Ye.canMatchCharCode(e, t3.PATTERN); + } catch (r) { + return { issue: F2.LexerDefinitionErrorType.IDENTIFY_TERMINATOR, errMsg: r.message }; + } + return false; + } else { + if (h.isString(t3.PATTERN)) return false; + if (Ar(t3)) return { issue: F2.LexerDefinitionErrorType.CUSTOM_LINE_BREAK }; + throw Error("non exhaustive match"); + } + } + function Sn2(t3, e) { + if (e.issue === F2.LexerDefinitionErrorType.IDENTIFY_TERMINATOR) return `Warning: unable to identify line terminator usage in pattern. +` + (" The problem is in the <" + t3.name + `> Token Type +`) + (" Root cause: " + e.errMsg + `. +`) + " For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR"; + if (e.issue === F2.LexerDefinitionErrorType.CUSTOM_LINE_BREAK) return `Warning: A Custom Token Pattern should specify the option. +` + (" The problem is in the <" + t3.name + `> Token Type +`) + " For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK"; + throw Error("non exhaustive match"); + } + T.buildLineBreakIssueMessage = Sn2; + function Tn(t3) { + var e = h.map(t3, function(r) { + return h.isString(r) && r.length > 0 ? r.charCodeAt(0) : r; + }); + return e; + } + function Rr(t3, e, r) { + t3[e] === void 0 ? t3[e] = [r] : t3[e].push(r); + } + T.minOptimizationVal = 256; + var Ft2 = []; + function Or(t3) { + return t3 < T.minOptimizationVal ? t3 : Ft2[t3]; + } + T.charCodeToOptimizedIndex = Or; + function $a() { + if (h.isEmpty(Ft2)) { + Ft2 = new Array(65536); + for (var t3 = 0; t3 < 65536; t3++) Ft2[t3] = t3 > 255 ? 255 + ~~(t3 / 255) : t3; + } + } +}); +var Xe = R2((N) => { + "use strict"; + Object.defineProperty(N, "__esModule", { value: true }); + N.isTokenType = N.hasExtendingTokensTypesMapProperty = N.hasExtendingTokensTypesProperty = N.hasCategoriesProperty = N.hasShortKeyProperty = N.singleAssignCategoriesToksMap = N.assignCategoriesMapProp = N.assignCategoriesTokensProp = N.assignTokenDefaultProps = N.expandCategories = N.augmentTokenTypes = N.tokenIdxToClass = N.tokenShortNameIdx = N.tokenStructuredMatcherNoCategories = N.tokenStructuredMatcher = void 0; + var V = k(); + function so(t3, e) { + var r = t3.tokenTypeIdx; + return r === e.tokenTypeIdx ? true : e.isParent === true && e.categoryMatchesMap[r] === true; + } + N.tokenStructuredMatcher = so; + function uo(t3, e) { + return t3.tokenTypeIdx === e.tokenTypeIdx; + } + N.tokenStructuredMatcherNoCategories = uo; + N.tokenShortNameIdx = 1; + N.tokenIdxToClass = {}; + function co(t3) { + var e = xn(t3); + Cn(e), Mn(e), Ln(e), V.forEach(e, function(r) { + r.isParent = r.categoryMatches.length > 0; + }); + } + N.augmentTokenTypes = co; + function xn(t3) { + for (var e = V.cloneArr(t3), r = t3, n2 = true; n2; ) { + r = V.compact(V.flatten(V.map(r, function(a2) { + return a2.CATEGORIES; + }))); + var i = V.difference(r, e); + e = e.concat(i), V.isEmpty(i) ? n2 = false : r = i; + } + return e; + } + N.expandCategories = xn; + function Cn(t3) { + V.forEach(t3, function(e) { + bn(e) || (N.tokenIdxToClass[N.tokenShortNameIdx] = e, e.tokenTypeIdx = N.tokenShortNameIdx++), Nr(e) && !V.isArray(e.CATEGORIES) && (e.CATEGORIES = [e.CATEGORIES]), Nr(e) || (e.CATEGORIES = []), Fn(e) || (e.categoryMatches = []), wn(e) || (e.categoryMatchesMap = {}); + }); + } + N.assignTokenDefaultProps = Cn; + function Ln(t3) { + V.forEach(t3, function(e) { + e.categoryMatches = [], V.forEach(e.categoryMatchesMap, function(r, n2) { + e.categoryMatches.push(N.tokenIdxToClass[n2].tokenTypeIdx); + }); + }); + } + N.assignCategoriesTokensProp = Ln; + function Mn(t3) { + V.forEach(t3, function(e) { + Ir([], e); + }); + } + N.assignCategoriesMapProp = Mn; + function Ir(t3, e) { + V.forEach(t3, function(r) { + e.categoryMatchesMap[r.tokenTypeIdx] = true; + }), V.forEach(e.CATEGORIES, function(r) { + var n2 = t3.concat(e); + V.contains(n2, r) || Ir(n2, r); + }); + } + N.singleAssignCategoriesToksMap = Ir; + function bn(t3) { + return V.has(t3, "tokenTypeIdx"); + } + N.hasShortKeyProperty = bn; + function Nr(t3) { + return V.has(t3, "CATEGORIES"); + } + N.hasCategoriesProperty = Nr; + function Fn(t3) { + return V.has(t3, "categoryMatches"); + } + N.hasExtendingTokensTypesProperty = Fn; + function wn(t3) { + return V.has(t3, "categoryMatchesMap"); + } + N.hasExtendingTokensTypesMapProperty = wn; + function lo(t3) { + return V.has(t3, "tokenTypeIdx"); + } + N.isTokenType = lo; +}); +var kr = R2((wt) => { + "use strict"; + Object.defineProperty(wt, "__esModule", { value: true }); + wt.defaultLexerErrorProvider = void 0; + wt.defaultLexerErrorProvider = { buildUnableToPopLexerModeMessage: function(t3) { + return "Unable to pop Lexer Mode after encountering Token ->" + t3.image + "<- The Mode Stack is empty"; + }, buildUnexpectedCharactersMessage: function(t3, e, r, n2, i) { + return "unexpected character: ->" + t3.charAt(e) + "<- at offset: " + e + "," + (" skipped " + r + " characters."); + } }; +}); +var ft = R2((qe) => { + "use strict"; + Object.defineProperty(qe, "__esModule", { value: true }); + qe.Lexer = qe.LexerDefinitionErrorType = void 0; + var Ee = Tr(), w = k(), fo = Xe(), po = kr(), ho = Lt(), vo; + (function(t3) { + t3[t3.MISSING_PATTERN = 0] = "MISSING_PATTERN", t3[t3.INVALID_PATTERN = 1] = "INVALID_PATTERN", t3[t3.EOI_ANCHOR_FOUND = 2] = "EOI_ANCHOR_FOUND", t3[t3.UNSUPPORTED_FLAGS_FOUND = 3] = "UNSUPPORTED_FLAGS_FOUND", t3[t3.DUPLICATE_PATTERNS_FOUND = 4] = "DUPLICATE_PATTERNS_FOUND", t3[t3.INVALID_GROUP_TYPE_FOUND = 5] = "INVALID_GROUP_TYPE_FOUND", t3[t3.PUSH_MODE_DOES_NOT_EXIST = 6] = "PUSH_MODE_DOES_NOT_EXIST", t3[t3.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE", t3[t3.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY", t3[t3.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST", t3[t3.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED", t3[t3.SOI_ANCHOR_FOUND = 11] = "SOI_ANCHOR_FOUND", t3[t3.EMPTY_MATCH_PATTERN = 12] = "EMPTY_MATCH_PATTERN", t3[t3.NO_LINE_BREAKS_FLAGS = 13] = "NO_LINE_BREAKS_FLAGS", t3[t3.UNREACHABLE_PATTERN = 14] = "UNREACHABLE_PATTERN", t3[t3.IDENTIFY_TERMINATOR = 15] = "IDENTIFY_TERMINATOR", t3[t3.CUSTOM_LINE_BREAK = 16] = "CUSTOM_LINE_BREAK"; + })(vo = qe.LexerDefinitionErrorType || (qe.LexerDefinitionErrorType = {})); + var pt = { deferDefinitionErrorsHandling: false, positionTracking: "full", lineTerminatorsPattern: /\n|\r\n?/g, lineTerminatorCharacters: [` +`, "\r"], ensureOptimizations: false, safeMode: false, errorMessageProvider: po.defaultLexerErrorProvider, traceInitPerf: false, skipValidations: false }; + Object.freeze(pt); + var mo = function() { + function t3(e, r) { + var n2 = this; + if (r === void 0 && (r = pt), this.lexerDefinition = e, this.lexerDefinitionErrors = [], this.lexerDefinitionWarning = [], this.patternIdxToConfig = {}, this.charCodeToPatternIdxToConfig = {}, this.modes = [], this.emptyGroups = {}, this.config = void 0, this.trackStartLines = true, this.trackEndLines = true, this.hasCustom = false, this.canModeBeOptimized = {}, typeof r == "boolean") throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. +a boolean 2nd argument is no longer supported`); + this.config = w.merge(pt, r); + var i = this.config.traceInitPerf; + i === true ? (this.traceInitMaxIdent = Infinity, this.traceInitPerf = true) : typeof i == "number" && (this.traceInitMaxIdent = i, this.traceInitPerf = true), this.traceInitIndent = -1, this.TRACE_INIT("Lexer Constructor", function() { + var a2, o = true; + n2.TRACE_INIT("Lexer Config handling", function() { + if (n2.config.lineTerminatorsPattern === pt.lineTerminatorsPattern) n2.config.lineTerminatorsPattern = Ee.LineTerminatorOptimizedTester; + else if (n2.config.lineTerminatorCharacters === pt.lineTerminatorCharacters) throw Error(`Error: Missing property on the Lexer config. + For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`); + if (r.safeMode && r.ensureOptimizations) throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.'); + n2.trackStartLines = /full|onlyStart/i.test(n2.config.positionTracking), n2.trackEndLines = /full/i.test(n2.config.positionTracking), w.isArray(e) ? (a2 = { modes: {} }, a2.modes[Ee.DEFAULT_MODE] = w.cloneArr(e), a2[Ee.DEFAULT_MODE] = Ee.DEFAULT_MODE) : (o = false, a2 = w.cloneObj(e)); + }), n2.config.skipValidations === false && (n2.TRACE_INIT("performRuntimeChecks", function() { + n2.lexerDefinitionErrors = n2.lexerDefinitionErrors.concat(Ee.performRuntimeChecks(a2, n2.trackStartLines, n2.config.lineTerminatorCharacters)); + }), n2.TRACE_INIT("performWarningRuntimeChecks", function() { + n2.lexerDefinitionWarning = n2.lexerDefinitionWarning.concat(Ee.performWarningRuntimeChecks(a2, n2.trackStartLines, n2.config.lineTerminatorCharacters)); + })), a2.modes = a2.modes ? a2.modes : {}, w.forEach(a2.modes, function(p2, l2) { + a2.modes[l2] = w.reject(p2, function(m) { + return w.isUndefined(m); + }); + }); + var s = w.keys(a2.modes); + if (w.forEach(a2.modes, function(p2, l2) { + n2.TRACE_INIT("Mode: <" + l2 + "> processing", function() { + if (n2.modes.push(l2), n2.config.skipValidations === false && n2.TRACE_INIT("validatePatterns", function() { + n2.lexerDefinitionErrors = n2.lexerDefinitionErrors.concat(Ee.validatePatterns(p2, s)); + }), w.isEmpty(n2.lexerDefinitionErrors)) { + fo.augmentTokenTypes(p2); + var m; + n2.TRACE_INIT("analyzeTokenTypes", function() { + m = Ee.analyzeTokenTypes(p2, { lineTerminatorCharacters: n2.config.lineTerminatorCharacters, positionTracking: r.positionTracking, ensureOptimizations: r.ensureOptimizations, safeMode: r.safeMode, tracer: n2.TRACE_INIT.bind(n2) }); + }), n2.patternIdxToConfig[l2] = m.patternIdxToConfig, n2.charCodeToPatternIdxToConfig[l2] = m.charCodeToPatternIdxToConfig, n2.emptyGroups = w.merge(n2.emptyGroups, m.emptyGroups), n2.hasCustom = m.hasCustom || n2.hasCustom, n2.canModeBeOptimized[l2] = m.canBeOptimized; + } + }); + }), n2.defaultMode = a2.defaultMode, !w.isEmpty(n2.lexerDefinitionErrors) && !n2.config.deferDefinitionErrorsHandling) { + var c2 = w.map(n2.lexerDefinitionErrors, function(p2) { + return p2.message; + }), f = c2.join(`----------------------- +`); + throw new Error(`Errors detected in definition of Lexer: +` + f); + } + w.forEach(n2.lexerDefinitionWarning, function(p2) { + w.PRINT_WARNING(p2.message); + }), n2.TRACE_INIT("Choosing sub-methods implementations", function() { + if (Ee.SUPPORT_STICKY ? (n2.chopInput = w.IDENTITY, n2.match = n2.matchWithTest) : (n2.updateLastIndex = w.NOOP, n2.match = n2.matchWithExec), o && (n2.handleModes = w.NOOP), n2.trackStartLines === false && (n2.computeNewColumn = w.IDENTITY), n2.trackEndLines === false && (n2.updateTokenEndLineColumnLocation = w.NOOP), /full/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createFullToken; + else if (/onlyStart/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createStartOnlyToken; + else if (/onlyOffset/i.test(n2.config.positionTracking)) n2.createTokenInstance = n2.createOffsetOnlyToken; + else throw Error('Invalid config option: "' + n2.config.positionTracking + '"'); + n2.hasCustom ? (n2.addToken = n2.addTokenUsingPush, n2.handlePayload = n2.handlePayloadWithCustom) : (n2.addToken = n2.addTokenUsingMemberAccess, n2.handlePayload = n2.handlePayloadNoCustom); + }), n2.TRACE_INIT("Failed Optimization Warnings", function() { + var p2 = w.reduce(n2.canModeBeOptimized, function(l2, m, v) { + return m === false && l2.push(v), l2; + }, []); + if (r.ensureOptimizations && !w.isEmpty(p2)) throw Error("Lexer Modes: < " + p2.join(", ") + ` > cannot be optimized. + Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. + Or inspect the console log for details on how to resolve these issues.`); + }), n2.TRACE_INIT("clearRegExpParserCache", function() { + ho.clearRegExpParserCache(); + }), n2.TRACE_INIT("toFastProperties", function() { + w.toFastProperties(n2); + }); + }); + } + return t3.prototype.tokenize = function(e, r) { + if (r === void 0 && (r = this.defaultMode), !w.isEmpty(this.lexerDefinitionErrors)) { + var n2 = w.map(this.lexerDefinitionErrors, function(o) { + return o.message; + }), i = n2.join(`----------------------- +`); + throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: +` + i); + } + var a2 = this.tokenizeInternal(e, r); + return a2; + }, t3.prototype.tokenizeInternal = function(e, r) { + var n2 = this, i, a2, o, s, c2, f, p2, l2, m, v, u, d, A2, _, g2, y2 = e, b3 = y2.length, L = 0, se2 = 0, fe = this.hasCustom ? 0 : Math.floor(e.length / 10), Z2 = new Array(fe), ue = [], Q3 = this.trackStartLines ? 1 : void 0, te2 = this.trackStartLines ? 1 : void 0, xe2 = Ee.cloneEmptyGroups(this.emptyGroups), it = this.trackStartLines, at = this.config.lineTerminatorsPattern, Ke = 0, we = [], ot = [], It = [], Qr = []; + Object.freeze(Qr); + var st = void 0; + function Jr() { + return we; + } + function en(J) { + var lt = Ee.charCodeToOptimizedIndex(J), ze = ot[lt]; + return ze === void 0 ? Qr : ze; + } + var wa = function(J) { + if (It.length === 1 && J.tokenType.PUSH_MODE === void 0) { + var lt = n2.config.errorMessageProvider.buildUnableToPopLexerModeMessage(J); + ue.push({ offset: J.startOffset, line: J.startLine !== void 0 ? J.startLine : void 0, column: J.startColumn !== void 0 ? J.startColumn : void 0, length: J.image.length, message: lt }); + } else { + It.pop(); + var ze = w.last(It); + we = n2.patternIdxToConfig[ze], ot = n2.charCodeToPatternIdxToConfig[ze], Ke = we.length; + var Ua = n2.canModeBeOptimized[ze] && n2.config.safeMode === false; + ot && Ua ? st = en : st = Jr; + } + }; + function tn(J) { + It.push(J), ot = this.charCodeToPatternIdxToConfig[J], we = this.patternIdxToConfig[J], Ke = we.length, Ke = we.length; + var lt = this.canModeBeOptimized[J] && this.config.safeMode === false; + ot && lt ? st = en : st = Jr; + } + tn.call(this, r); + for (var me; L < b3; ) { + c2 = null; + var rn = y2.charCodeAt(L), nn = st(rn), Da = nn.length; + for (i = 0; i < Da; i++) { + me = nn[i]; + var De = me.pattern; + f = null; + var ut = me.short; + if (ut !== false ? rn === ut && (c2 = De) : me.isCustom === true ? (g2 = De.exec(y2, L, Z2, xe2), g2 !== null ? (c2 = g2[0], g2.payload !== void 0 && (f = g2.payload)) : c2 = null) : (this.updateLastIndex(De, L), c2 = this.match(De, e, L)), c2 !== null) { + if (s = me.longerAlt, s !== void 0) { + var fr = we[s], pr = fr.pattern; + p2 = null, fr.isCustom === true ? (g2 = pr.exec(y2, L, Z2, xe2), g2 !== null ? (o = g2[0], g2.payload !== void 0 && (p2 = g2.payload)) : o = null) : (this.updateLastIndex(pr, L), o = this.match(pr, e, L)), o && o.length > c2.length && (c2 = o, f = p2, me = fr); + } + break; + } + } + if (c2 !== null) { + if (l2 = c2.length, m = me.group, m !== void 0 && (v = me.tokenTypeIdx, u = this.createTokenInstance(c2, L, v, me.tokenType, Q3, te2, l2), this.handlePayload(u, f), m === false ? se2 = this.addToken(Z2, se2, u) : xe2[m].push(u)), e = this.chopInput(e, l2), L = L + l2, te2 = this.computeNewColumn(te2, l2), it === true && me.canLineTerminator === true) { + var kt = 0, hr = void 0, dr = void 0; + at.lastIndex = 0; + do + hr = at.test(c2), hr === true && (dr = at.lastIndex - 1, kt++); + while (hr === true); + kt !== 0 && (Q3 = Q3 + kt, te2 = l2 - dr, this.updateTokenEndLineColumnLocation(u, m, dr, kt, Q3, te2, l2)); + } + this.handleModes(me, wa, tn, u); + } else { + for (var vr = L, an = Q3, on = te2, ct2 = false; !ct2 && L < b3; ) for (A2 = y2.charCodeAt(L), e = this.chopInput(e, 1), L++, a2 = 0; a2 < Ke; a2++) { + var mr = we[a2], De = mr.pattern, ut = mr.short; + if (ut !== false ? y2.charCodeAt(L) === ut && (ct2 = true) : mr.isCustom === true ? ct2 = De.exec(y2, L, Z2, xe2) !== null : (this.updateLastIndex(De, L), ct2 = De.exec(e) !== null), ct2 === true) break; + } + d = L - vr, _ = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(y2, vr, d, an, on), ue.push({ offset: vr, line: an, column: on, length: d, message: _ }); + } + } + return this.hasCustom || (Z2.length = se2), { tokens: Z2, groups: xe2, errors: ue }; + }, t3.prototype.handleModes = function(e, r, n2, i) { + if (e.pop === true) { + var a2 = e.push; + r(i), a2 !== void 0 && n2.call(this, a2); + } else e.push !== void 0 && n2.call(this, e.push); + }, t3.prototype.chopInput = function(e, r) { + return e.substring(r); + }, t3.prototype.updateLastIndex = function(e, r) { + e.lastIndex = r; + }, t3.prototype.updateTokenEndLineColumnLocation = function(e, r, n2, i, a2, o, s) { + var c2, f; + r !== void 0 && (c2 = n2 === s - 1, f = c2 ? -1 : 0, i === 1 && c2 === true || (e.endLine = a2 + f, e.endColumn = o - 1 + -f)); + }, t3.prototype.computeNewColumn = function(e, r) { + return e + r; + }, t3.prototype.createTokenInstance = function() { + for (var e = [], r = 0; r < arguments.length; r++) e[r] = arguments[r]; + return null; + }, t3.prototype.createOffsetOnlyToken = function(e, r, n2, i) { + return { image: e, startOffset: r, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.createStartOnlyToken = function(e, r, n2, i, a2, o) { + return { image: e, startOffset: r, startLine: a2, startColumn: o, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.createFullToken = function(e, r, n2, i, a2, o, s) { + return { image: e, startOffset: r, endOffset: r + s - 1, startLine: a2, endLine: a2, startColumn: o, endColumn: o + s - 1, tokenTypeIdx: n2, tokenType: i }; + }, t3.prototype.addToken = function(e, r, n2) { + return 666; + }, t3.prototype.addTokenUsingPush = function(e, r, n2) { + return e.push(n2), r; + }, t3.prototype.addTokenUsingMemberAccess = function(e, r, n2) { + return e[r] = n2, r++, r; + }, t3.prototype.handlePayload = function(e, r) { + }, t3.prototype.handlePayloadNoCustom = function(e, r) { + }, t3.prototype.handlePayloadWithCustom = function(e, r) { + r !== null && (e.payload = r); + }, t3.prototype.match = function(e, r, n2) { + return null; + }, t3.prototype.matchWithTest = function(e, r, n2) { + var i = e.test(r); + return i === true ? r.substring(n2, e.lastIndex) : null; + }, t3.prototype.matchWithExec = function(e, r) { + var n2 = e.exec(r); + return n2 !== null ? n2[0] : n2; + }, t3.prototype.TRACE_INIT = function(e, r) { + if (this.traceInitPerf === true) { + this.traceInitIndent++; + var n2 = new Array(this.traceInitIndent + 1).join(" "); + this.traceInitIndent < this.traceInitMaxIdent && console.log(n2 + "--> <" + e + ">"); + var i = w.timer(r), a2 = i.time, o = i.value, s = a2 > 10 ? console.warn : console.log; + return this.traceInitIndent < this.traceInitMaxIdent && s(n2 + "<-- <" + e + "> time: " + a2 + "ms"), this.traceInitIndent--, o; + } else return r(); + }, t3.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.", t3.NA = /NOT_APPLICABLE/, t3; + }(); + qe.Lexer = mo; +}); +var Ue = R2((H) => { + "use strict"; + Object.defineProperty(H, "__esModule", { value: true }); + H.tokenMatcher = H.createTokenInstance = H.EOF = H.createToken = H.hasTokenLabel = H.tokenName = H.tokenLabel = void 0; + var Te = k(), Eo = ft(), Pr = Xe(); + function To(t3) { + return Dn(t3) ? t3.LABEL : t3.name; + } + H.tokenLabel = To; + function yo(t3) { + return t3.name; + } + H.tokenName = yo; + function Dn(t3) { + return Te.isString(t3.LABEL) && t3.LABEL !== ""; + } + H.hasTokenLabel = Dn; + var _o = "parent", Un = "categories", Gn = "label", Wn = "group", Bn = "push_mode", qn = "pop_mode", jn = "longer_alt", Vn = "line_breaks", Kn = "start_chars_hint"; + function zn(t3) { + return go(t3); + } + H.createToken = zn; + function go(t3) { + var e = t3.pattern, r = {}; + if (r.name = t3.name, Te.isUndefined(e) || (r.PATTERN = e), Te.has(t3, _o)) throw `The parent property is no longer supported. +See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`; + return Te.has(t3, Un) && (r.CATEGORIES = t3[Un]), Pr.augmentTokenTypes([r]), Te.has(t3, Gn) && (r.LABEL = t3[Gn]), Te.has(t3, Wn) && (r.GROUP = t3[Wn]), Te.has(t3, qn) && (r.POP_MODE = t3[qn]), Te.has(t3, Bn) && (r.PUSH_MODE = t3[Bn]), Te.has(t3, jn) && (r.LONGER_ALT = t3[jn]), Te.has(t3, Vn) && (r.LINE_BREAKS = t3[Vn]), Te.has(t3, Kn) && (r.START_CHARS_HINT = t3[Kn]), r; + } + H.EOF = zn({ name: "EOF", pattern: Eo.Lexer.NA }); + Pr.augmentTokenTypes([H.EOF]); + function Ao(t3, e, r, n2, i, a2, o, s) { + return { image: e, startOffset: r, endOffset: n2, startLine: i, endLine: a2, startColumn: o, endColumn: s, tokenTypeIdx: t3.tokenTypeIdx, tokenType: t3 }; + } + H.createTokenInstance = Ao; + function Ro(t3, e) { + return Pr.tokenStructuredMatcher(t3, e); + } + H.tokenMatcher = Ro; +}); +var ne = R2((S) => { + "use strict"; + var Le = S && S.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(S, "__esModule", { value: true }); + S.serializeProduction = S.serializeGrammar = S.Terminal = S.Alternation = S.RepetitionWithSeparator = S.Repetition = S.RepetitionMandatoryWithSeparator = S.RepetitionMandatory = S.Option = S.Alternative = S.Rule = S.NonTerminal = S.AbstractProduction = void 0; + var G = k(), Oo = Ue(), Re = function() { + function t3(e) { + this._definition = e; + } + return Object.defineProperty(t3.prototype, "definition", { get: function() { + return this._definition; + }, set: function(e) { + this._definition = e; + }, enumerable: false, configurable: true }), t3.prototype.accept = function(e) { + e.visit(this), G.forEach(this.definition, function(r) { + r.accept(e); + }); + }, t3; + }(); + S.AbstractProduction = Re; + var Hn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, []) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return Object.defineProperty(e.prototype, "definition", { get: function() { + return this.referencedRule !== void 0 ? this.referencedRule.definition : []; + }, set: function(r) { + }, enumerable: false, configurable: true }), e.prototype.accept = function(r) { + r.visit(this); + }, e; + }(Re); + S.NonTerminal = Hn; + var Yn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.orgText = "", G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Rule = Yn; + var Xn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.ignoreAmbiguities = false, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Alternative = Xn; + var $n = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Option = $n; + var Zn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionMandatory = Zn; + var Qn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionMandatoryWithSeparator = Qn; + var Jn = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.Repetition = Jn; + var ei = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return e; + }(Re); + S.RepetitionWithSeparator = ei; + var ti = function(t3) { + Le(e, t3); + function e(r) { + var n2 = t3.call(this, r.definition) || this; + return n2.idx = 1, n2.ignoreAmbiguities = false, n2.hasPredicates = false, G.assign(n2, G.pick(r, function(i) { + return i !== void 0; + })), n2; + } + return Object.defineProperty(e.prototype, "definition", { get: function() { + return this._definition; + }, set: function(r) { + this._definition = r; + }, enumerable: false, configurable: true }), e; + }(Re); + S.Alternation = ti; + var Dt = function() { + function t3(e) { + this.idx = 1, G.assign(this, G.pick(e, function(r) { + return r !== void 0; + })); + } + return t3.prototype.accept = function(e) { + e.visit(this); + }, t3; + }(); + S.Terminal = Dt; + function No(t3) { + return G.map(t3, ht); + } + S.serializeGrammar = No; + function ht(t3) { + function e(i) { + return G.map(i, ht); + } + if (t3 instanceof Hn) return { type: "NonTerminal", name: t3.nonTerminalName, idx: t3.idx }; + if (t3 instanceof Xn) return { type: "Alternative", definition: e(t3.definition) }; + if (t3 instanceof $n) return { type: "Option", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Zn) return { type: "RepetitionMandatory", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Qn) return { type: "RepetitionMandatoryWithSeparator", idx: t3.idx, separator: ht(new Dt({ terminalType: t3.separator })), definition: e(t3.definition) }; + if (t3 instanceof ei) return { type: "RepetitionWithSeparator", idx: t3.idx, separator: ht(new Dt({ terminalType: t3.separator })), definition: e(t3.definition) }; + if (t3 instanceof Jn) return { type: "Repetition", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof ti) return { type: "Alternation", idx: t3.idx, definition: e(t3.definition) }; + if (t3 instanceof Dt) { + var r = { type: "Terminal", name: t3.terminalType.name, label: Oo.tokenLabel(t3.terminalType), idx: t3.idx }, n2 = t3.terminalType.PATTERN; + return t3.terminalType.PATTERN && (r.pattern = G.isRegExp(n2) ? n2.source : n2), r; + } else { + if (t3 instanceof Yn) return { type: "Rule", name: t3.name, orgText: t3.orgText, definition: e(t3.definition) }; + throw Error("non exhaustive match"); + } + } + S.serializeProduction = ht; +}); +var Gt = R2((Ut) => { + "use strict"; + Object.defineProperty(Ut, "__esModule", { value: true }); + Ut.RestWalker = void 0; + var Sr = k(), ie = ne(), Io = function() { + function t3() { + } + return t3.prototype.walk = function(e, r) { + var n2 = this; + r === void 0 && (r = []), Sr.forEach(e.definition, function(i, a2) { + var o = Sr.drop(e.definition, a2 + 1); + if (i instanceof ie.NonTerminal) n2.walkProdRef(i, o, r); + else if (i instanceof ie.Terminal) n2.walkTerminal(i, o, r); + else if (i instanceof ie.Alternative) n2.walkFlat(i, o, r); + else if (i instanceof ie.Option) n2.walkOption(i, o, r); + else if (i instanceof ie.RepetitionMandatory) n2.walkAtLeastOne(i, o, r); + else if (i instanceof ie.RepetitionMandatoryWithSeparator) n2.walkAtLeastOneSep(i, o, r); + else if (i instanceof ie.RepetitionWithSeparator) n2.walkManySep(i, o, r); + else if (i instanceof ie.Repetition) n2.walkMany(i, o, r); + else if (i instanceof ie.Alternation) n2.walkOr(i, o, r); + else throw Error("non exhaustive match"); + }); + }, t3.prototype.walkTerminal = function(e, r, n2) { + }, t3.prototype.walkProdRef = function(e, r, n2) { + }, t3.prototype.walkFlat = function(e, r, n2) { + var i = r.concat(n2); + this.walk(e, i); + }, t3.prototype.walkOption = function(e, r, n2) { + var i = r.concat(n2); + this.walk(e, i); + }, t3.prototype.walkAtLeastOne = function(e, r, n2) { + var i = [new ie.Option({ definition: e.definition })].concat(r, n2); + this.walk(e, i); + }, t3.prototype.walkAtLeastOneSep = function(e, r, n2) { + var i = ri(e, r, n2); + this.walk(e, i); + }, t3.prototype.walkMany = function(e, r, n2) { + var i = [new ie.Option({ definition: e.definition })].concat(r, n2); + this.walk(e, i); + }, t3.prototype.walkManySep = function(e, r, n2) { + var i = ri(e, r, n2); + this.walk(e, i); + }, t3.prototype.walkOr = function(e, r, n2) { + var i = this, a2 = r.concat(n2); + Sr.forEach(e.definition, function(o) { + var s = new ie.Alternative({ definition: [o] }); + i.walk(s, a2); + }); + }, t3; + }(); + Ut.RestWalker = Io; + function ri(t3, e, r) { + var n2 = [new ie.Option({ definition: [new ie.Terminal({ terminalType: t3.separator })].concat(t3.definition) })], i = n2.concat(e, r); + return i; + } +}); +var $e = R2((Wt) => { + "use strict"; + Object.defineProperty(Wt, "__esModule", { value: true }); + Wt.GAstVisitor = void 0; + var Oe = ne(), ko = function() { + function t3() { + } + return t3.prototype.visit = function(e) { + var r = e; + switch (r.constructor) { + case Oe.NonTerminal: + return this.visitNonTerminal(r); + case Oe.Alternative: + return this.visitAlternative(r); + case Oe.Option: + return this.visitOption(r); + case Oe.RepetitionMandatory: + return this.visitRepetitionMandatory(r); + case Oe.RepetitionMandatoryWithSeparator: + return this.visitRepetitionMandatoryWithSeparator(r); + case Oe.RepetitionWithSeparator: + return this.visitRepetitionWithSeparator(r); + case Oe.Repetition: + return this.visitRepetition(r); + case Oe.Alternation: + return this.visitAlternation(r); + case Oe.Terminal: + return this.visitTerminal(r); + case Oe.Rule: + return this.visitRule(r); + default: + throw Error("non exhaustive match"); + } + }, t3.prototype.visitNonTerminal = function(e) { + }, t3.prototype.visitAlternative = function(e) { + }, t3.prototype.visitOption = function(e) { + }, t3.prototype.visitRepetition = function(e) { + }, t3.prototype.visitRepetitionMandatory = function(e) { + }, t3.prototype.visitRepetitionMandatoryWithSeparator = function(e) { + }, t3.prototype.visitRepetitionWithSeparator = function(e) { + }, t3.prototype.visitAlternation = function(e) { + }, t3.prototype.visitTerminal = function(e) { + }, t3.prototype.visitRule = function(e) { + }, t3; + }(); + Wt.GAstVisitor = ko; +}); +var vt = R2((X2) => { + "use strict"; + var Po = X2 && X2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(X2, "__esModule", { value: true }); + X2.collectMethods = X2.DslMethodsCollectorVisitor = X2.getProductionDslName = X2.isBranchingProd = X2.isOptionalProd = X2.isSequenceProd = void 0; + var dt2 = k(), W = ne(), So = $e(); + function xo(t3) { + return t3 instanceof W.Alternative || t3 instanceof W.Option || t3 instanceof W.Repetition || t3 instanceof W.RepetitionMandatory || t3 instanceof W.RepetitionMandatoryWithSeparator || t3 instanceof W.RepetitionWithSeparator || t3 instanceof W.Terminal || t3 instanceof W.Rule; + } + X2.isSequenceProd = xo; + function xr(t3, e) { + e === void 0 && (e = []); + var r = t3 instanceof W.Option || t3 instanceof W.Repetition || t3 instanceof W.RepetitionWithSeparator; + return r ? true : t3 instanceof W.Alternation ? dt2.some(t3.definition, function(n2) { + return xr(n2, e); + }) : t3 instanceof W.NonTerminal && dt2.contains(e, t3) ? false : t3 instanceof W.AbstractProduction ? (t3 instanceof W.NonTerminal && e.push(t3), dt2.every(t3.definition, function(n2) { + return xr(n2, e); + })) : false; + } + X2.isOptionalProd = xr; + function Co(t3) { + return t3 instanceof W.Alternation; + } + X2.isBranchingProd = Co; + function Lo(t3) { + if (t3 instanceof W.NonTerminal) return "SUBRULE"; + if (t3 instanceof W.Option) return "OPTION"; + if (t3 instanceof W.Alternation) return "OR"; + if (t3 instanceof W.RepetitionMandatory) return "AT_LEAST_ONE"; + if (t3 instanceof W.RepetitionMandatoryWithSeparator) return "AT_LEAST_ONE_SEP"; + if (t3 instanceof W.RepetitionWithSeparator) return "MANY_SEP"; + if (t3 instanceof W.Repetition) return "MANY"; + if (t3 instanceof W.Terminal) return "CONSUME"; + throw Error("non exhaustive match"); + } + X2.getProductionDslName = Lo; + var ni = function(t3) { + Po(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.separator = "-", r.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }, r; + } + return e.prototype.reset = function() { + this.dslMethods = { option: [], alternation: [], repetition: [], repetitionWithSeparator: [], repetitionMandatory: [], repetitionMandatoryWithSeparator: [] }; + }, e.prototype.visitTerminal = function(r) { + var n2 = r.terminalType.name + this.separator + "Terminal"; + dt2.has(this.dslMethods, n2) || (this.dslMethods[n2] = []), this.dslMethods[n2].push(r); + }, e.prototype.visitNonTerminal = function(r) { + var n2 = r.nonTerminalName + this.separator + "Terminal"; + dt2.has(this.dslMethods, n2) || (this.dslMethods[n2] = []), this.dslMethods[n2].push(r); + }, e.prototype.visitOption = function(r) { + this.dslMethods.option.push(r); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.dslMethods.repetitionWithSeparator.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.dslMethods.repetitionMandatory.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.dslMethods.repetitionMandatoryWithSeparator.push(r); + }, e.prototype.visitRepetition = function(r) { + this.dslMethods.repetition.push(r); + }, e.prototype.visitAlternation = function(r) { + this.dslMethods.alternation.push(r); + }, e; + }(So.GAstVisitor); + X2.DslMethodsCollectorVisitor = ni; + var Bt = new ni(); + function Mo(t3) { + Bt.reset(), t3.accept(Bt); + var e = Bt.dslMethods; + return Bt.reset(), e; + } + X2.collectMethods = Mo; +}); +var Lr = R2((Ne) => { + "use strict"; + Object.defineProperty(Ne, "__esModule", { value: true }); + Ne.firstForTerminal = Ne.firstForBranching = Ne.firstForSequence = Ne.first = void 0; + var qt = k(), ii = ne(), Cr = vt(); + function jt(t3) { + if (t3 instanceof ii.NonTerminal) return jt(t3.referencedRule); + if (t3 instanceof ii.Terminal) return si(t3); + if (Cr.isSequenceProd(t3)) return ai(t3); + if (Cr.isBranchingProd(t3)) return oi(t3); + throw Error("non exhaustive match"); + } + Ne.first = jt; + function ai(t3) { + for (var e = [], r = t3.definition, n2 = 0, i = r.length > n2, a2, o = true; i && o; ) a2 = r[n2], o = Cr.isOptionalProd(a2), e = e.concat(jt(a2)), n2 = n2 + 1, i = r.length > n2; + return qt.uniq(e); + } + Ne.firstForSequence = ai; + function oi(t3) { + var e = qt.map(t3.definition, function(r) { + return jt(r); + }); + return qt.uniq(qt.flatten(e)); + } + Ne.firstForBranching = oi; + function si(t3) { + return [t3.terminalType]; + } + Ne.firstForTerminal = si; +}); +var Mr = R2((Vt) => { + "use strict"; + Object.defineProperty(Vt, "__esModule", { value: true }); + Vt.IN = void 0; + Vt.IN = "_~IN~_"; +}); +var pi = R2((he) => { + "use strict"; + var bo = he && he.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(he, "__esModule", { value: true }); + he.buildInProdFollowPrefix = he.buildBetweenProdsFollowPrefix = he.computeAllProdsFollows = he.ResyncFollowsWalker = void 0; + var Fo = Gt(), wo = Lr(), ui = k(), ci = Mr(), Do = ne(), fi = function(t3) { + bo(e, t3); + function e(r) { + var n2 = t3.call(this) || this; + return n2.topProd = r, n2.follows = {}, n2; + } + return e.prototype.startWalking = function() { + return this.walk(this.topProd), this.follows; + }, e.prototype.walkTerminal = function(r, n2, i) { + }, e.prototype.walkProdRef = function(r, n2, i) { + var a2 = li(r.referencedRule, r.idx) + this.topProd.name, o = n2.concat(i), s = new Do.Alternative({ definition: o }), c2 = wo.first(s); + this.follows[a2] = c2; + }, e; + }(Fo.RestWalker); + he.ResyncFollowsWalker = fi; + function Uo(t3) { + var e = {}; + return ui.forEach(t3, function(r) { + var n2 = new fi(r).startWalking(); + ui.assign(e, n2); + }), e; + } + he.computeAllProdsFollows = Uo; + function li(t3, e) { + return t3.name + e + ci.IN; + } + he.buildBetweenProdsFollowPrefix = li; + function Go(t3) { + var e = t3.terminalType.name; + return e + t3.idx + ci.IN; + } + he.buildInProdFollowPrefix = Go; +}); +var mt = R2((Me) => { + "use strict"; + Object.defineProperty(Me, "__esModule", { value: true }); + Me.defaultGrammarValidatorErrorProvider = Me.defaultGrammarResolverErrorProvider = Me.defaultParserErrorProvider = void 0; + var Ze = Ue(), Wo = k(), ye = k(), br = ne(), hi = vt(); + Me.defaultParserErrorProvider = { buildMismatchTokenMessage: function(t3) { + var e = t3.expected, r = t3.actual, n2 = t3.previous, i = t3.ruleName, a2 = Ze.hasTokenLabel(e), o = a2 ? "--> " + Ze.tokenLabel(e) + " <--" : "token of type --> " + e.name + " <--", s = "Expecting " + o + " but found --> '" + r.image + "' <--"; + return s; + }, buildNotAllInputParsedMessage: function(t3) { + var e = t3.firstRedundant, r = t3.ruleName; + return "Redundant input, expecting EOF but found: " + e.image; + }, buildNoViableAltMessage: function(t3) { + var e = t3.expectedPathsPerAlt, r = t3.actual, n2 = t3.previous, i = t3.customUserDescription, a2 = t3.ruleName, o = "Expecting: ", s = ye.first(r).image, c2 = ` +but found: '` + s + "'"; + if (i) return o + i + c2; + var f = ye.reduce(e, function(v, u) { + return v.concat(u); + }, []), p2 = ye.map(f, function(v) { + return "[" + ye.map(v, function(u) { + return Ze.tokenLabel(u); + }).join(", ") + "]"; + }), l2 = ye.map(p2, function(v, u) { + return " " + (u + 1) + ". " + v; + }), m = `one of these possible Token sequences: +` + l2.join(` +`); + return o + m + c2; + }, buildEarlyExitMessage: function(t3) { + var e = t3.expectedIterationPaths, r = t3.actual, n2 = t3.customUserDescription, i = t3.ruleName, a2 = "Expecting: ", o = ye.first(r).image, s = ` +but found: '` + o + "'"; + if (n2) return a2 + n2 + s; + var c2 = ye.map(e, function(p2) { + return "[" + ye.map(p2, function(l2) { + return Ze.tokenLabel(l2); + }).join(",") + "]"; + }), f = `expecting at least one iteration which starts with one of these possible Token sequences:: + ` + ("<" + c2.join(" ,") + ">"); + return a2 + f + s; + } }; + Object.freeze(Me.defaultParserErrorProvider); + Me.defaultGrammarResolverErrorProvider = { buildRuleNotFoundError: function(t3, e) { + var r = "Invalid grammar, reference to a rule which is not defined: ->" + e.nonTerminalName + `<- +inside top level rule: ->` + t3.name + "<-"; + return r; + } }; + Me.defaultGrammarValidatorErrorProvider = { buildDuplicateFoundError: function(t3, e) { + function r(p2) { + return p2 instanceof br.Terminal ? p2.terminalType.name : p2 instanceof br.NonTerminal ? p2.nonTerminalName : ""; + } + var n2 = t3.name, i = ye.first(e), a2 = i.idx, o = hi.getProductionDslName(i), s = r(i), c2 = a2 > 0, f = "->" + o + (c2 ? a2 : "") + "<- " + (s ? "with argument: ->" + s + "<-" : "") + ` + appears more than once (` + e.length + " times) in the top level rule: ->" + n2 + `<-. + For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES + `; + return f = f.replace(/[ \t]+/g, " "), f = f.replace(/\s\s+/g, ` +`), f; + }, buildNamespaceConflictError: function(t3) { + var e = `Namespace conflict found in grammar. +` + ("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <" + t3.name + `>. +`) + `To resolve this make sure each Terminal and Non-Terminal names are unique +This is easy to accomplish by using the convention that Terminal names start with an uppercase letter +and Non-Terminal names start with a lower case letter.`; + return e; + }, buildAlternationPrefixAmbiguityError: function(t3) { + var e = ye.map(t3.prefixPath, function(i) { + return Ze.tokenLabel(i); + }).join(", "), r = t3.alternation.idx === 0 ? "" : t3.alternation.idx, n2 = "Ambiguous alternatives: <" + t3.ambiguityIndices.join(" ,") + `> due to common lookahead prefix +` + ("in inside <" + t3.topLevelRule.name + `> Rule, +`) + ("<" + e + `> may appears as a prefix path in all these alternatives. +`) + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX +For Further details.`; + return n2; + }, buildAlternationAmbiguityError: function(t3) { + var e = ye.map(t3.prefixPath, function(i) { + return Ze.tokenLabel(i); + }).join(", "), r = t3.alternation.idx === 0 ? "" : t3.alternation.idx, n2 = "Ambiguous Alternatives Detected: <" + t3.ambiguityIndices.join(" ,") + "> in " + (" inside <" + t3.topLevelRule.name + `> Rule, +`) + ("<" + e + `> may appears as a prefix path in all these alternatives. +`); + return n2 = n2 + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES +For Further details.`, n2; + }, buildEmptyRepetitionError: function(t3) { + var e = hi.getProductionDslName(t3.repetition); + t3.repetition.idx !== 0 && (e += t3.repetition.idx); + var r = "The repetition <" + e + "> within Rule <" + t3.topLevelRule.name + `> can never consume any tokens. +This could lead to an infinite loop.`; + return r; + }, buildTokenNameError: function(t3) { + return "deprecated"; + }, buildEmptyAlternationError: function(t3) { + var e = "Ambiguous empty alternative: <" + (t3.emptyChoiceIdx + 1) + ">" + (" in inside <" + t3.topLevelRule.name + `> Rule. +`) + "Only the last alternative may be an empty alternative."; + return e; + }, buildTooManyAlternativesError: function(t3) { + var e = `An Alternation cannot have more than 256 alternatives: +` + (" inside <" + t3.topLevelRule.name + `> Rule. + has ` + (t3.alternation.definition.length + 1) + " alternatives."); + return e; + }, buildLeftRecursionError: function(t3) { + var e = t3.topLevelRule.name, r = Wo.map(t3.leftRecursionPath, function(a2) { + return a2.name; + }), n2 = e + " --> " + r.concat([e]).join(" --> "), i = `Left Recursion found in grammar. +` + ("rule: <" + e + `> can be invoked from itself (directly or indirectly) +`) + (`without consuming any Tokens. The grammar path that causes this is: + ` + n2 + ` +`) + ` To fix this refactor your grammar to remove the left recursion. +see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`; + return i; + }, buildInvalidRuleNameError: function(t3) { + return "deprecated"; + }, buildDuplicateRuleNameError: function(t3) { + var e; + t3.topLevelRule instanceof br.Rule ? e = t3.topLevelRule.name : e = t3.topLevelRule; + var r = "Duplicate definition, rule: ->" + e + "<- is already defined in the grammar: ->" + t3.grammarName + "<-"; + return r; + } }; +}); +var mi = R2((Ge) => { + "use strict"; + var Bo = Ge && Ge.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(Ge, "__esModule", { value: true }); + Ge.GastRefResolverVisitor = Ge.resolveGrammar = void 0; + var qo = ce(), di = k(), jo = $e(); + function Vo(t3, e) { + var r = new vi(t3, e); + return r.resolveRefs(), r.errors; + } + Ge.resolveGrammar = Vo; + var vi = function(t3) { + Bo(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.nameToTopRule = r, i.errMsgProvider = n2, i.errors = [], i; + } + return e.prototype.resolveRefs = function() { + var r = this; + di.forEach(di.values(this.nameToTopRule), function(n2) { + r.currTopLevel = n2, n2.accept(r); + }); + }, e.prototype.visitNonTerminal = function(r) { + var n2 = this.nameToTopRule[r.nonTerminalName]; + if (n2) r.referencedRule = n2; + else { + var i = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, r); + this.errors.push({ message: i, type: qo.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF, ruleName: this.currTopLevel.name, unresolvedRefName: r.nonTerminalName }); + } + }, e; + }(jo.GAstVisitor); + Ge.GastRefResolverVisitor = vi; +}); +var Tt = R2((j) => { + "use strict"; + var je = j && j.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(j, "__esModule", { value: true }); + j.nextPossibleTokensAfter = j.possiblePathsFrom = j.NextTerminalAfterAtLeastOneSepWalker = j.NextTerminalAfterAtLeastOneWalker = j.NextTerminalAfterManySepWalker = j.NextTerminalAfterManyWalker = j.AbstractNextTerminalAfterProductionWalker = j.NextAfterTokenWalker = j.AbstractNextPossibleTokensWalker = void 0; + var Ei2 = Gt(), I2 = k(), Ko = Lr(), O = ne(), Ti2 = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.topProd = r, i.path = n2, i.possibleTokTypes = [], i.nextProductionName = "", i.nextProductionOccurrence = 0, i.found = false, i.isAtEndOfPath = false, i; + } + return e.prototype.startWalking = function() { + if (this.found = false, this.path.ruleStack[0] !== this.topProd.name) throw Error("The path does not start with the walker's top Rule!"); + return this.ruleStack = I2.cloneArr(this.path.ruleStack).reverse(), this.occurrenceStack = I2.cloneArr(this.path.occurrenceStack).reverse(), this.ruleStack.pop(), this.occurrenceStack.pop(), this.updateExpectedNext(), this.walk(this.topProd), this.possibleTokTypes; + }, e.prototype.walk = function(r, n2) { + n2 === void 0 && (n2 = []), this.found || t3.prototype.walk.call(this, r, n2); + }, e.prototype.walkProdRef = function(r, n2, i) { + if (r.referencedRule.name === this.nextProductionName && r.idx === this.nextProductionOccurrence) { + var a2 = n2.concat(i); + this.updateExpectedNext(), this.walk(r.referencedRule, a2); + } + }, e.prototype.updateExpectedNext = function() { + I2.isEmpty(this.ruleStack) ? (this.nextProductionName = "", this.nextProductionOccurrence = 0, this.isAtEndOfPath = true) : (this.nextProductionName = this.ruleStack.pop(), this.nextProductionOccurrence = this.occurrenceStack.pop()); + }, e; + }(Ei2.RestWalker); + j.AbstractNextPossibleTokensWalker = Ti2; + var zo = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this, r, n2) || this; + return i.path = n2, i.nextTerminalName = "", i.nextTerminalOccurrence = 0, i.nextTerminalName = i.path.lastTok.name, i.nextTerminalOccurrence = i.path.lastTokOccurrence, i; + } + return e.prototype.walkTerminal = function(r, n2, i) { + if (this.isAtEndOfPath && r.terminalType.name === this.nextTerminalName && r.idx === this.nextTerminalOccurrence && !this.found) { + var a2 = n2.concat(i), o = new O.Alternative({ definition: a2 }); + this.possibleTokTypes = Ko.first(o), this.found = true; + } + }, e; + }(Ti2); + j.NextAfterTokenWalker = zo; + var Et = function(t3) { + je(e, t3); + function e(r, n2) { + var i = t3.call(this) || this; + return i.topRule = r, i.occurrence = n2, i.result = { token: void 0, occurrence: void 0, isEndOfRule: void 0 }, i; + } + return e.prototype.startWalking = function() { + return this.walk(this.topRule), this.result; + }, e; + }(Ei2.RestWalker); + j.AbstractNextTerminalAfterProductionWalker = Et; + var Ho = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkMany = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkMany.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterManyWalker = Ho; + var Yo = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkManySep = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkManySep.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterManySepWalker = Yo; + var Xo = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkAtLeastOne = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkAtLeastOne.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterAtLeastOneWalker = Xo; + var $o = function(t3) { + je(e, t3); + function e() { + return t3 !== null && t3.apply(this, arguments) || this; + } + return e.prototype.walkAtLeastOneSep = function(r, n2, i) { + if (r.idx === this.occurrence) { + var a2 = I2.first(n2.concat(i)); + this.result.isEndOfRule = a2 === void 0, a2 instanceof O.Terminal && (this.result.token = a2.terminalType, this.result.occurrence = a2.idx); + } else t3.prototype.walkAtLeastOneSep.call(this, r, n2, i); + }, e; + }(Et); + j.NextTerminalAfterAtLeastOneSepWalker = $o; + function yi(t3, e, r) { + r === void 0 && (r = []), r = I2.cloneArr(r); + var n2 = [], i = 0; + function a2(f) { + return f.concat(I2.drop(t3, i + 1)); + } + function o(f) { + var p2 = yi(a2(f), e, r); + return n2.concat(p2); + } + for (; r.length < e && i < t3.length; ) { + var s = t3[i]; + if (s instanceof O.Alternative) return o(s.definition); + if (s instanceof O.NonTerminal) return o(s.definition); + if (s instanceof O.Option) n2 = o(s.definition); + else if (s instanceof O.RepetitionMandatory) { + var c2 = s.definition.concat([new O.Repetition({ definition: s.definition })]); + return o(c2); + } else if (s instanceof O.RepetitionMandatoryWithSeparator) { + var c2 = [new O.Alternative({ definition: s.definition }), new O.Repetition({ definition: [new O.Terminal({ terminalType: s.separator })].concat(s.definition) })]; + return o(c2); + } else if (s instanceof O.RepetitionWithSeparator) { + var c2 = s.definition.concat([new O.Repetition({ definition: [new O.Terminal({ terminalType: s.separator })].concat(s.definition) })]); + n2 = o(c2); + } else if (s instanceof O.Repetition) { + var c2 = s.definition.concat([new O.Repetition({ definition: s.definition })]); + n2 = o(c2); + } else { + if (s instanceof O.Alternation) return I2.forEach(s.definition, function(f) { + I2.isEmpty(f.definition) === false && (n2 = o(f.definition)); + }), n2; + if (s instanceof O.Terminal) r.push(s.terminalType); + else throw Error("non exhaustive match"); + } + i++; + } + return n2.push({ partialPath: r, suffixDef: I2.drop(t3, i) }), n2; + } + j.possiblePathsFrom = yi; + function Qo(t3, e, r, n2) { + var i = "EXIT_NONE_TERMINAL", a2 = [i], o = "EXIT_ALTERNATIVE", s = false, c2 = e.length, f = c2 - n2 - 1, p2 = [], l2 = []; + for (l2.push({ idx: -1, def: t3, ruleStack: [], occurrenceStack: [] }); !I2.isEmpty(l2); ) { + var m = l2.pop(); + if (m === o) { + s && I2.last(l2).idx <= f && l2.pop(); + continue; + } + var v = m.def, u = m.idx, d = m.ruleStack, A2 = m.occurrenceStack; + if (!I2.isEmpty(v)) { + var _ = v[0]; + if (_ === i) { + var g2 = { idx: u, def: I2.drop(v), ruleStack: I2.dropRight(d), occurrenceStack: I2.dropRight(A2) }; + l2.push(g2); + } else if (_ instanceof O.Terminal) if (u < c2 - 1) { + var y2 = u + 1, b3 = e[y2]; + if (r(b3, _.terminalType)) { + var g2 = { idx: y2, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } + } else if (u === c2 - 1) p2.push({ nextTokenType: _.terminalType, nextTokenOccurrence: _.idx, ruleStack: d, occurrenceStack: A2 }), s = true; + else throw Error("non exhaustive match"); + else if (_ instanceof O.NonTerminal) { + var L = I2.cloneArr(d); + L.push(_.nonTerminalName); + var se2 = I2.cloneArr(A2); + se2.push(_.idx); + var g2 = { idx: u, def: _.definition.concat(a2, I2.drop(v)), ruleStack: L, occurrenceStack: se2 }; + l2.push(g2); + } else if (_ instanceof O.Option) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var Z2 = { idx: u, def: _.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.RepetitionMandatory) { + var ue = new O.Repetition({ definition: _.definition, idx: _.idx }), Q3 = _.definition.concat([ue], I2.drop(v)), g2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } else if (_ instanceof O.RepetitionMandatoryWithSeparator) { + var te2 = new O.Terminal({ terminalType: _.separator }), ue = new O.Repetition({ definition: [te2].concat(_.definition), idx: _.idx }), Q3 = _.definition.concat([ue], I2.drop(v)), g2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(g2); + } else if (_ instanceof O.RepetitionWithSeparator) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var te2 = new O.Terminal({ terminalType: _.separator }), xe2 = new O.Repetition({ definition: [te2].concat(_.definition), idx: _.idx }), Q3 = _.definition.concat([xe2], I2.drop(v)), Z2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.Repetition) { + var fe = { idx: u, def: I2.drop(v), ruleStack: d, occurrenceStack: A2 }; + l2.push(fe), l2.push(o); + var xe2 = new O.Repetition({ definition: _.definition, idx: _.idx }), Q3 = _.definition.concat([xe2], I2.drop(v)), Z2 = { idx: u, def: Q3, ruleStack: d, occurrenceStack: A2 }; + l2.push(Z2); + } else if (_ instanceof O.Alternation) for (var it = _.definition.length - 1; it >= 0; it--) { + var at = _.definition[it], Ke = { idx: u, def: at.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }; + l2.push(Ke), l2.push(o); + } + else if (_ instanceof O.Alternative) l2.push({ idx: u, def: _.definition.concat(I2.drop(v)), ruleStack: d, occurrenceStack: A2 }); + else if (_ instanceof O.Rule) l2.push(Zo(_, u, d, A2)); + else throw Error("non exhaustive match"); + } + } + return p2; + } + j.nextPossibleTokensAfter = Qo; + function Zo(t3, e, r, n2) { + var i = I2.cloneArr(r); + i.push(t3.name); + var a2 = I2.cloneArr(n2); + return a2.push(1), { idx: e, def: t3.definition, ruleStack: i, occurrenceStack: a2 }; + } +}); +var yt2 = R2((C2) => { + "use strict"; + var _i = C2 && C2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(C2, "__esModule", { value: true }); + C2.areTokenCategoriesNotUsed = C2.isStrictPrefixOfPath = C2.containsPath = C2.getLookaheadPathsForOptionalProd = C2.getLookaheadPathsForOr = C2.lookAheadSequenceFromAlternatives = C2.buildSingleAlternativeLookaheadFunction = C2.buildAlternativesLookAheadFunc = C2.buildLookaheadFuncForOptionalProd = C2.buildLookaheadFuncForOr = C2.getProdType = C2.PROD_TYPE = void 0; + var D = k(), gi = Tt(), Jo = Gt(), Kt = Xe(), We = ne(), es = $e(), z; + (function(t3) { + t3[t3.OPTION = 0] = "OPTION", t3[t3.REPETITION = 1] = "REPETITION", t3[t3.REPETITION_MANDATORY = 2] = "REPETITION_MANDATORY", t3[t3.REPETITION_MANDATORY_WITH_SEPARATOR = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR", t3[t3.REPETITION_WITH_SEPARATOR = 4] = "REPETITION_WITH_SEPARATOR", t3[t3.ALTERNATION = 5] = "ALTERNATION"; + })(z = C2.PROD_TYPE || (C2.PROD_TYPE = {})); + function ts(t3) { + if (t3 instanceof We.Option) return z.OPTION; + if (t3 instanceof We.Repetition) return z.REPETITION; + if (t3 instanceof We.RepetitionMandatory) return z.REPETITION_MANDATORY; + if (t3 instanceof We.RepetitionMandatoryWithSeparator) return z.REPETITION_MANDATORY_WITH_SEPARATOR; + if (t3 instanceof We.RepetitionWithSeparator) return z.REPETITION_WITH_SEPARATOR; + if (t3 instanceof We.Alternation) return z.ALTERNATION; + throw Error("non exhaustive match"); + } + C2.getProdType = ts; + function rs(t3, e, r, n2, i, a2) { + var o = Ai(t3, e, r), s = Fr(o) ? Kt.tokenStructuredMatcherNoCategories : Kt.tokenStructuredMatcher; + return a2(o, n2, s, i); + } + C2.buildLookaheadFuncForOr = rs; + function ns(t3, e, r, n2, i, a2) { + var o = Ri(t3, e, i, r), s = Fr(o) ? Kt.tokenStructuredMatcherNoCategories : Kt.tokenStructuredMatcher; + return a2(o[0], s, n2); + } + C2.buildLookaheadFuncForOptionalProd = ns; + function is(t3, e, r, n2) { + var i = t3.length, a2 = D.every(t3, function(c2) { + return D.every(c2, function(f) { + return f.length === 1; + }); + }); + if (e) return function(c2) { + for (var f = D.map(c2, function(y2) { + return y2.GATE; + }), p2 = 0; p2 < i; p2++) { + var l2 = t3[p2], m = l2.length, v = f[p2]; + if (v !== void 0 && v.call(this) === false) continue; + e: for (var u = 0; u < m; u++) { + for (var d = l2[u], A2 = d.length, _ = 0; _ < A2; _++) { + var g2 = this.LA(_ + 1); + if (r(g2, d[_]) === false) continue e; + } + return p2; + } + } + }; + if (a2 && !n2) { + var o = D.map(t3, function(c2) { + return D.flatten(c2); + }), s = D.reduce(o, function(c2, f, p2) { + return D.forEach(f, function(l2) { + D.has(c2, l2.tokenTypeIdx) || (c2[l2.tokenTypeIdx] = p2), D.forEach(l2.categoryMatches, function(m) { + D.has(c2, m) || (c2[m] = p2); + }); + }), c2; + }, []); + return function() { + var c2 = this.LA(1); + return s[c2.tokenTypeIdx]; + }; + } else return function() { + for (var c2 = 0; c2 < i; c2++) { + var f = t3[c2], p2 = f.length; + e: for (var l2 = 0; l2 < p2; l2++) { + for (var m = f[l2], v = m.length, u = 0; u < v; u++) { + var d = this.LA(u + 1); + if (r(d, m[u]) === false) continue e; + } + return c2; + } + } + }; + } + C2.buildAlternativesLookAheadFunc = is; + function as(t3, e, r) { + var n2 = D.every(t3, function(f) { + return f.length === 1; + }), i = t3.length; + if (n2 && !r) { + var a2 = D.flatten(t3); + if (a2.length === 1 && D.isEmpty(a2[0].categoryMatches)) { + var o = a2[0], s = o.tokenTypeIdx; + return function() { + return this.LA(1).tokenTypeIdx === s; + }; + } else { + var c2 = D.reduce(a2, function(f, p2, l2) { + return f[p2.tokenTypeIdx] = true, D.forEach(p2.categoryMatches, function(m) { + f[m] = true; + }), f; + }, []); + return function() { + var f = this.LA(1); + return c2[f.tokenTypeIdx] === true; + }; + } + } else return function() { + e: for (var f = 0; f < i; f++) { + for (var p2 = t3[f], l2 = p2.length, m = 0; m < l2; m++) { + var v = this.LA(m + 1); + if (e(v, p2[m]) === false) continue e; + } + return true; + } + return false; + }; + } + C2.buildSingleAlternativeLookaheadFunction = as; + var os = function(t3) { + _i(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this) || this; + return a2.topProd = r, a2.targetOccurrence = n2, a2.targetProdType = i, a2; + } + return e.prototype.startWalking = function() { + return this.walk(this.topProd), this.restDef; + }, e.prototype.checkIsTarget = function(r, n2, i, a2) { + return r.idx === this.targetOccurrence && this.targetProdType === n2 ? (this.restDef = i.concat(a2), true) : false; + }, e.prototype.walkOption = function(r, n2, i) { + this.checkIsTarget(r, z.OPTION, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkAtLeastOne = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_MANDATORY, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkAtLeastOneSep = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_MANDATORY_WITH_SEPARATOR, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkMany = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e.prototype.walkManySep = function(r, n2, i) { + this.checkIsTarget(r, z.REPETITION_WITH_SEPARATOR, n2, i) || t3.prototype.walkOption.call(this, r, n2, i); + }, e; + }(Jo.RestWalker), Oi2 = function(t3) { + _i(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this) || this; + return a2.targetOccurrence = r, a2.targetProdType = n2, a2.targetRef = i, a2.result = [], a2; + } + return e.prototype.checkIsTarget = function(r, n2) { + r.idx === this.targetOccurrence && this.targetProdType === n2 && (this.targetRef === void 0 || r === this.targetRef) && (this.result = r.definition); + }, e.prototype.visitOption = function(r) { + this.checkIsTarget(r, z.OPTION); + }, e.prototype.visitRepetition = function(r) { + this.checkIsTarget(r, z.REPETITION); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.checkIsTarget(r, z.REPETITION_MANDATORY); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.checkIsTarget(r, z.REPETITION_MANDATORY_WITH_SEPARATOR); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.checkIsTarget(r, z.REPETITION_WITH_SEPARATOR); + }, e.prototype.visitAlternation = function(r) { + this.checkIsTarget(r, z.ALTERNATION); + }, e; + }(es.GAstVisitor); + function Ni(t3) { + for (var e = new Array(t3), r = 0; r < t3; r++) e[r] = []; + return e; + } + function wr(t3) { + for (var e = [""], r = 0; r < t3.length; r++) { + for (var n2 = t3[r], i = [], a2 = 0; a2 < e.length; a2++) { + var o = e[a2]; + i.push(o + "_" + n2.tokenTypeIdx); + for (var s = 0; s < n2.categoryMatches.length; s++) { + var c2 = "_" + n2.categoryMatches[s]; + i.push(o + c2); + } + } + e = i; + } + return e; + } + function ss(t3, e, r) { + for (var n2 = 0; n2 < t3.length; n2++) if (n2 !== r) for (var i = t3[n2], a2 = 0; a2 < e.length; a2++) { + var o = e[a2]; + if (i[o] === true) return false; + } + return true; + } + function Dr(t3, e) { + for (var r = D.map(t3, function(p2) { + return gi.possiblePathsFrom([p2], 1); + }), n2 = Ni(r.length), i = D.map(r, function(p2) { + var l2 = {}; + return D.forEach(p2, function(m) { + var v = wr(m.partialPath); + D.forEach(v, function(u) { + l2[u] = true; + }); + }), l2; + }), a2 = r, o = 1; o <= e; o++) { + var s = a2; + a2 = Ni(s.length); + for (var c2 = function(p2) { + for (var l2 = s[p2], m = 0; m < l2.length; m++) { + var v = l2[m].partialPath, u = l2[m].suffixDef, d = wr(v), A2 = ss(i, d, p2); + if (A2 || D.isEmpty(u) || v.length === e) { + var _ = n2[p2]; + if (Ii2(_, v) === false) { + _.push(v); + for (var g2 = 0; g2 < d.length; g2++) { + var y2 = d[g2]; + i[p2][y2] = true; + } + } + } else { + var b3 = gi.possiblePathsFrom(u, o + 1, v); + a2[p2] = a2[p2].concat(b3), D.forEach(b3, function(L) { + var se2 = wr(L.partialPath); + D.forEach(se2, function(fe) { + i[p2][fe] = true; + }); + }); + } + } + }, f = 0; f < s.length; f++) c2(f); + } + return n2; + } + C2.lookAheadSequenceFromAlternatives = Dr; + function Ai(t3, e, r, n2) { + var i = new Oi2(t3, z.ALTERNATION, n2); + return e.accept(i), Dr(i.result, r); + } + C2.getLookaheadPathsForOr = Ai; + function Ri(t3, e, r, n2) { + var i = new Oi2(t3, r); + e.accept(i); + var a2 = i.result, o = new os(e, t3, r), s = o.startWalking(), c2 = new We.Alternative({ definition: a2 }), f = new We.Alternative({ definition: s }); + return Dr([c2, f], n2); + } + C2.getLookaheadPathsForOptionalProd = Ri; + function Ii2(t3, e) { + e: for (var r = 0; r < t3.length; r++) { + var n2 = t3[r]; + if (n2.length === e.length) { + for (var i = 0; i < n2.length; i++) { + var a2 = e[i], o = n2[i], s = a2 === o || o.categoryMatchesMap[a2.tokenTypeIdx] !== void 0; + if (s === false) continue e; + } + return true; + } + } + return false; + } + C2.containsPath = Ii2; + function us(t3, e) { + return t3.length < e.length && D.every(t3, function(r, n2) { + var i = e[n2]; + return r === i || i.categoryMatchesMap[r.tokenTypeIdx]; + }); + } + C2.isStrictPrefixOfPath = us; + function Fr(t3) { + return D.every(t3, function(e) { + return D.every(e, function(r) { + return D.every(r, function(n2) { + return D.isEmpty(n2.categoryMatches); + }); + }); + }); + } + C2.areTokenCategoriesNotUsed = Fr; +}); +var jr = R2((x2) => { + "use strict"; + var Ur = x2 && x2.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(x2, "__esModule", { value: true }); + x2.checkPrefixAlternativesAmbiguities = x2.validateSomeNonEmptyLookaheadPath = x2.validateTooManyAlts = x2.RepetionCollector = x2.validateAmbiguousAlternationAlternatives = x2.validateEmptyOrAlternative = x2.getFirstNoneTerminal = x2.validateNoLeftRecursion = x2.validateRuleIsOverridden = x2.validateRuleDoesNotAlreadyExist = x2.OccurrenceValidationCollector = x2.identifyProductionForDuplicates = x2.validateGrammar = void 0; + var M = k(), B2 = k(), Ie = ce(), Gr = vt(), Qe = yt2(), cs = Tt(), _e = ne(), Wr = $e(); + function ps(t3, e, r, n2, i) { + var a2 = M.map(t3, function(v) { + return ls(v, n2); + }), o = M.map(t3, function(v) { + return Br(v, v, n2); + }), s = [], c2 = [], f = []; + B2.every(o, B2.isEmpty) && (s = B2.map(t3, function(v) { + return Pi2(v, n2); + }), c2 = B2.map(t3, function(v) { + return Si2(v, e, n2); + }), f = Ci2(t3, e, n2)); + var p2 = fs(t3, r, n2), l2 = B2.map(t3, function(v) { + return xi(v, n2); + }), m = B2.map(t3, function(v) { + return ki(v, t3, i, n2); + }); + return M.flatten(a2.concat(f, o, s, c2, p2, l2, m)); + } + x2.validateGrammar = ps; + function ls(t3, e) { + var r = new bi(); + t3.accept(r); + var n2 = r.allProductions, i = M.groupBy(n2, Li), a2 = M.pick(i, function(s) { + return s.length > 1; + }), o = M.map(M.values(a2), function(s) { + var c2 = M.first(s), f = e.buildDuplicateFoundError(t3, s), p2 = Gr.getProductionDslName(c2), l2 = { message: f, type: Ie.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS, ruleName: t3.name, dslName: p2, occurrence: c2.idx }, m = Mi2(c2); + return m && (l2.parameter = m), l2; + }); + return o; + } + function Li(t3) { + return Gr.getProductionDslName(t3) + "_#_" + t3.idx + "_#_" + Mi2(t3); + } + x2.identifyProductionForDuplicates = Li; + function Mi2(t3) { + return t3 instanceof _e.Terminal ? t3.terminalType.name : t3 instanceof _e.NonTerminal ? t3.nonTerminalName : ""; + } + var bi = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.allProductions = [], r; + } + return e.prototype.visitNonTerminal = function(r) { + this.allProductions.push(r); + }, e.prototype.visitOption = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetition = function(r) { + this.allProductions.push(r); + }, e.prototype.visitAlternation = function(r) { + this.allProductions.push(r); + }, e.prototype.visitTerminal = function(r) { + this.allProductions.push(r); + }, e; + }(Wr.GAstVisitor); + x2.OccurrenceValidationCollector = bi; + function ki(t3, e, r, n2) { + var i = [], a2 = B2.reduce(e, function(s, c2) { + return c2.name === t3.name ? s + 1 : s; + }, 0); + if (a2 > 1) { + var o = n2.buildDuplicateRuleNameError({ topLevelRule: t3, grammarName: r }); + i.push({ message: o, type: Ie.ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: t3.name }); + } + return i; + } + x2.validateRuleDoesNotAlreadyExist = ki; + function hs(t3, e, r) { + var n2 = [], i; + return M.contains(e, t3) || (i = "Invalid rule override, rule: ->" + t3 + "<- cannot be overridden in the grammar: ->" + r + "<-as it is not defined in any of the super grammars ", n2.push({ message: i, type: Ie.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE, ruleName: t3 })), n2; + } + x2.validateRuleIsOverridden = hs; + function Br(t3, e, r, n2) { + n2 === void 0 && (n2 = []); + var i = [], a2 = _t(e.definition); + if (M.isEmpty(a2)) return []; + var o = t3.name, s = M.contains(a2, t3); + s && i.push({ message: r.buildLeftRecursionError({ topLevelRule: t3, leftRecursionPath: n2 }), type: Ie.ParserDefinitionErrorType.LEFT_RECURSION, ruleName: o }); + var c2 = M.difference(a2, n2.concat([t3])), f = M.map(c2, function(p2) { + var l2 = M.cloneArr(n2); + return l2.push(p2), Br(t3, p2, r, l2); + }); + return i.concat(M.flatten(f)); + } + x2.validateNoLeftRecursion = Br; + function _t(t3) { + var e = []; + if (M.isEmpty(t3)) return e; + var r = M.first(t3); + if (r instanceof _e.NonTerminal) e.push(r.referencedRule); + else if (r instanceof _e.Alternative || r instanceof _e.Option || r instanceof _e.RepetitionMandatory || r instanceof _e.RepetitionMandatoryWithSeparator || r instanceof _e.RepetitionWithSeparator || r instanceof _e.Repetition) e = e.concat(_t(r.definition)); + else if (r instanceof _e.Alternation) e = M.flatten(M.map(r.definition, function(o) { + return _t(o.definition); + })); + else if (!(r instanceof _e.Terminal)) throw Error("non exhaustive match"); + var n2 = Gr.isOptionalProd(r), i = t3.length > 1; + if (n2 && i) { + var a2 = M.drop(t3); + return e.concat(_t(a2)); + } else return e; + } + x2.getFirstNoneTerminal = _t; + var qr = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.alternations = [], r; + } + return e.prototype.visitAlternation = function(r) { + this.alternations.push(r); + }, e; + }(Wr.GAstVisitor); + function Pi2(t3, e) { + var r = new qr(); + t3.accept(r); + var n2 = r.alternations, i = M.reduce(n2, function(a2, o) { + var s = M.dropRight(o.definition), c2 = M.map(s, function(f, p2) { + var l2 = cs.nextPossibleTokensAfter([f], [], null, 1); + return M.isEmpty(l2) ? { message: e.buildEmptyAlternationError({ topLevelRule: t3, alternation: o, emptyChoiceIdx: p2 }), type: Ie.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT, ruleName: t3.name, occurrence: o.idx, alternative: p2 + 1 } : null; + }); + return a2.concat(M.compact(c2)); + }, []); + return i; + } + x2.validateEmptyOrAlternative = Pi2; + function Si2(t3, e, r) { + var n2 = new qr(); + t3.accept(n2); + var i = n2.alternations; + i = B2.reject(i, function(o) { + return o.ignoreAmbiguities === true; + }); + var a2 = M.reduce(i, function(o, s) { + var c2 = s.idx, f = s.maxLookahead || e, p2 = Qe.getLookaheadPathsForOr(c2, t3, f, s), l2 = ds(p2, s, t3, r), m = Fi2(p2, s, t3, r); + return o.concat(l2, m); + }, []); + return a2; + } + x2.validateAmbiguousAlternationAlternatives = Si2; + var wi = function(t3) { + Ur(e, t3); + function e() { + var r = t3 !== null && t3.apply(this, arguments) || this; + return r.allProductions = [], r; + } + return e.prototype.visitRepetitionWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatory = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetitionMandatoryWithSeparator = function(r) { + this.allProductions.push(r); + }, e.prototype.visitRepetition = function(r) { + this.allProductions.push(r); + }, e; + }(Wr.GAstVisitor); + x2.RepetionCollector = wi; + function xi(t3, e) { + var r = new qr(); + t3.accept(r); + var n2 = r.alternations, i = M.reduce(n2, function(a2, o) { + return o.definition.length > 255 && a2.push({ message: e.buildTooManyAlternativesError({ topLevelRule: t3, alternation: o }), type: Ie.ParserDefinitionErrorType.TOO_MANY_ALTS, ruleName: t3.name, occurrence: o.idx }), a2; + }, []); + return i; + } + x2.validateTooManyAlts = xi; + function Ci2(t3, e, r) { + var n2 = []; + return B2.forEach(t3, function(i) { + var a2 = new wi(); + i.accept(a2); + var o = a2.allProductions; + B2.forEach(o, function(s) { + var c2 = Qe.getProdType(s), f = s.maxLookahead || e, p2 = s.idx, l2 = Qe.getLookaheadPathsForOptionalProd(p2, i, c2, f), m = l2[0]; + if (B2.isEmpty(B2.flatten(m))) { + var v = r.buildEmptyRepetitionError({ topLevelRule: i, repetition: s }); + n2.push({ message: v, type: Ie.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD, ruleName: i.name }); + } + }); + }), n2; + } + x2.validateSomeNonEmptyLookaheadPath = Ci2; + function ds(t3, e, r, n2) { + var i = [], a2 = B2.reduce(t3, function(s, c2, f) { + return e.definition[f].ignoreAmbiguities === true || B2.forEach(c2, function(p2) { + var l2 = [f]; + B2.forEach(t3, function(m, v) { + f !== v && Qe.containsPath(m, p2) && e.definition[v].ignoreAmbiguities !== true && l2.push(v); + }), l2.length > 1 && !Qe.containsPath(i, p2) && (i.push(p2), s.push({ alts: l2, path: p2 })); + }), s; + }, []), o = M.map(a2, function(s) { + var c2 = B2.map(s.alts, function(p2) { + return p2 + 1; + }), f = n2.buildAlternationAmbiguityError({ topLevelRule: r, alternation: e, ambiguityIndices: c2, prefixPath: s.path }); + return { message: f, type: Ie.ParserDefinitionErrorType.AMBIGUOUS_ALTS, ruleName: r.name, occurrence: e.idx, alternatives: [s.alts] }; + }); + return o; + } + function Fi2(t3, e, r, n2) { + var i = [], a2 = B2.reduce(t3, function(o, s, c2) { + var f = B2.map(s, function(p2) { + return { idx: c2, path: p2 }; + }); + return o.concat(f); + }, []); + return B2.forEach(a2, function(o) { + var s = e.definition[o.idx]; + if (s.ignoreAmbiguities !== true) { + var c2 = o.idx, f = o.path, p2 = B2.findAll(a2, function(m) { + return e.definition[m.idx].ignoreAmbiguities !== true && m.idx < c2 && Qe.isStrictPrefixOfPath(m.path, f); + }), l2 = B2.map(p2, function(m) { + var v = [m.idx + 1, c2 + 1], u = e.idx === 0 ? "" : e.idx, d = n2.buildAlternationPrefixAmbiguityError({ topLevelRule: r, alternation: e, ambiguityIndices: v, prefixPath: m.path }); + return { message: d, type: Ie.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS, ruleName: r.name, occurrence: u, alternatives: v }; + }); + i = i.concat(l2); + } + }), i; + } + x2.checkPrefixAlternativesAmbiguities = Fi2; + function fs(t3, e, r) { + var n2 = [], i = B2.map(e, function(a2) { + return a2.name; + }); + return B2.forEach(t3, function(a2) { + var o = a2.name; + if (B2.contains(i, o)) { + var s = r.buildNamespaceConflictError(a2); + n2.push({ message: s, type: Ie.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE, ruleName: o }); + } + }), n2; + } +}); +var Ui = R2((Je) => { + "use strict"; + Object.defineProperty(Je, "__esModule", { value: true }); + Je.validateGrammar = Je.resolveGrammar = void 0; + var Vr = k(), vs = mi(), ms = jr(), Di = mt(); + function Es(t3) { + t3 = Vr.defaults(t3, { errMsgProvider: Di.defaultGrammarResolverErrorProvider }); + var e = {}; + return Vr.forEach(t3.rules, function(r) { + e[r.name] = r; + }), vs.resolveGrammar(e, t3.errMsgProvider); + } + Je.resolveGrammar = Es; + function Ts(t3) { + return t3 = Vr.defaults(t3, { errMsgProvider: Di.defaultGrammarValidatorErrorProvider }), ms.validateGrammar(t3.rules, t3.maxLookahead, t3.tokenTypes, t3.errMsgProvider, t3.grammarName); + } + Je.validateGrammar = Ts; +}); +var et3 = R2((ae) => { + "use strict"; + var gt2 = ae && ae.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(ae, "__esModule", { value: true }); + ae.EarlyExitException = ae.NotAllInputParsedException = ae.NoViableAltException = ae.MismatchedTokenException = ae.isRecognitionException = void 0; + var ys = k(), Gi = "MismatchedTokenException", Wi = "NoViableAltException", Bi = "EarlyExitException", qi = "NotAllInputParsedException", ji = [Gi, Wi, Bi, qi]; + Object.freeze(ji); + function _s(t3) { + return ys.contains(ji, t3.name); + } + ae.isRecognitionException = _s; + var zt = function(t3) { + gt2(e, t3); + function e(r, n2) { + var i = this.constructor, a2 = t3.call(this, r) || this; + return a2.token = n2, a2.resyncedTokens = [], Object.setPrototypeOf(a2, i.prototype), Error.captureStackTrace && Error.captureStackTrace(a2, a2.constructor), a2; + } + return e; + }(Error), gs = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Gi, a2; + } + return e; + }(zt); + ae.MismatchedTokenException = gs; + var As = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Wi, a2; + } + return e; + }(zt); + ae.NoViableAltException = As; + var Rs = function(t3) { + gt2(e, t3); + function e(r, n2) { + var i = t3.call(this, r, n2) || this; + return i.name = qi, i; + } + return e; + }(zt); + ae.NotAllInputParsedException = Rs; + var Os = function(t3) { + gt2(e, t3); + function e(r, n2, i) { + var a2 = t3.call(this, r, n2) || this; + return a2.previousToken = i, a2.name = Bi, a2; + } + return e; + }(zt); + ae.EarlyExitException = Os; +}); +var zr = R2(($2) => { + "use strict"; + Object.defineProperty($2, "__esModule", { value: true }); + $2.attemptInRepetitionRecovery = $2.Recoverable = $2.InRuleRecoveryException = $2.IN_RULE_RECOVERY_EXCEPTION = $2.EOF_FOLLOW_KEY = void 0; + var Ht = Ue(), de2 = k(), Ns = et3(), Is = Mr(), ks = ce(); + $2.EOF_FOLLOW_KEY = {}; + $2.IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException"; + function Kr(t3) { + this.name = $2.IN_RULE_RECOVERY_EXCEPTION, this.message = t3; + } + $2.InRuleRecoveryException = Kr; + Kr.prototype = Error.prototype; + var Ps = function() { + function t3() { + } + return t3.prototype.initRecoverable = function(e) { + this.firstAfterRepMap = {}, this.resyncFollows = {}, this.recoveryEnabled = de2.has(e, "recoveryEnabled") ? e.recoveryEnabled : ks.DEFAULT_PARSER_CONFIG.recoveryEnabled, this.recoveryEnabled && (this.attemptInRepetitionRecovery = Vi2); + }, t3.prototype.getTokenToInsert = function(e) { + var r = Ht.createTokenInstance(e, "", NaN, NaN, NaN, NaN, NaN, NaN); + return r.isInsertedInRecovery = true, r; + }, t3.prototype.canTokenTypeBeInsertedInRecovery = function(e) { + return true; + }, t3.prototype.tryInRepetitionRecovery = function(e, r, n2, i) { + for (var a2 = this, o = this.findReSyncTokenType(), s = this.exportLexerState(), c2 = [], f = false, p2 = this.LA(1), l2 = this.LA(1), m = function() { + var v = a2.LA(0), u = a2.errorMessageProvider.buildMismatchTokenMessage({ expected: i, actual: p2, previous: v, ruleName: a2.getCurrRuleFullName() }), d = new Ns.MismatchedTokenException(u, p2, a2.LA(0)); + d.resyncedTokens = de2.dropRight(c2), a2.SAVE_ERROR(d); + }; !f; ) if (this.tokenMatcher(l2, i)) { + m(); + return; + } else if (n2.call(this)) { + m(), e.apply(this, r); + return; + } else this.tokenMatcher(l2, o) ? f = true : (l2 = this.SKIP_TOKEN(), this.addToResyncTokens(l2, c2)); + this.importLexerState(s); + }, t3.prototype.shouldInRepetitionRecoveryBeTried = function(e, r, n2) { + return !(n2 === false || e === void 0 || r === void 0 || this.tokenMatcher(this.LA(1), e) || this.isBackTracking() || this.canPerformInRuleRecovery(e, this.getFollowsForInRuleRecovery(e, r))); + }, t3.prototype.getFollowsForInRuleRecovery = function(e, r) { + var n2 = this.getCurrentGrammarPath(e, r), i = this.getNextPossibleTokenTypes(n2); + return i; + }, t3.prototype.tryInRuleRecovery = function(e, r) { + if (this.canRecoverWithSingleTokenInsertion(e, r)) { + var n2 = this.getTokenToInsert(e); + return n2; + } + if (this.canRecoverWithSingleTokenDeletion(e)) { + var i = this.SKIP_TOKEN(); + return this.consumeToken(), i; + } + throw new Kr("sad sad panda"); + }, t3.prototype.canPerformInRuleRecovery = function(e, r) { + return this.canRecoverWithSingleTokenInsertion(e, r) || this.canRecoverWithSingleTokenDeletion(e); + }, t3.prototype.canRecoverWithSingleTokenInsertion = function(e, r) { + var n2 = this; + if (!this.canTokenTypeBeInsertedInRecovery(e) || de2.isEmpty(r)) return false; + var i = this.LA(1), a2 = de2.find(r, function(o) { + return n2.tokenMatcher(i, o); + }) !== void 0; + return a2; + }, t3.prototype.canRecoverWithSingleTokenDeletion = function(e) { + var r = this.tokenMatcher(this.LA(2), e); + return r; + }, t3.prototype.isInCurrentRuleReSyncSet = function(e) { + var r = this.getCurrFollowKey(), n2 = this.getFollowSetFromFollowKey(r); + return de2.contains(n2, e); + }, t3.prototype.findReSyncTokenType = function() { + for (var e = this.flattenFollowSet(), r = this.LA(1), n2 = 2; ; ) { + var i = r.tokenType; + if (de2.contains(e, i)) return i; + r = this.LA(n2), n2++; + } + }, t3.prototype.getCurrFollowKey = function() { + if (this.RULE_STACK.length === 1) return $2.EOF_FOLLOW_KEY; + var e = this.getLastExplicitRuleShortName(), r = this.getLastExplicitRuleOccurrenceIndex(), n2 = this.getPreviousExplicitRuleShortName(); + return { ruleName: this.shortRuleNameToFullName(e), idxInCallingRule: r, inRule: this.shortRuleNameToFullName(n2) }; + }, t3.prototype.buildFullFollowKeyStack = function() { + var e = this, r = this.RULE_STACK, n2 = this.RULE_OCCURRENCE_STACK; + return de2.map(r, function(i, a2) { + return a2 === 0 ? $2.EOF_FOLLOW_KEY : { ruleName: e.shortRuleNameToFullName(i), idxInCallingRule: n2[a2], inRule: e.shortRuleNameToFullName(r[a2 - 1]) }; + }); + }, t3.prototype.flattenFollowSet = function() { + var e = this, r = de2.map(this.buildFullFollowKeyStack(), function(n2) { + return e.getFollowSetFromFollowKey(n2); + }); + return de2.flatten(r); + }, t3.prototype.getFollowSetFromFollowKey = function(e) { + if (e === $2.EOF_FOLLOW_KEY) return [Ht.EOF]; + var r = e.ruleName + e.idxInCallingRule + Is.IN + e.inRule; + return this.resyncFollows[r]; + }, t3.prototype.addToResyncTokens = function(e, r) { + return this.tokenMatcher(e, Ht.EOF) || r.push(e), r; + }, t3.prototype.reSyncTo = function(e) { + for (var r = [], n2 = this.LA(1); this.tokenMatcher(n2, e) === false; ) n2 = this.SKIP_TOKEN(), this.addToResyncTokens(n2, r); + return de2.dropRight(r); + }, t3.prototype.attemptInRepetitionRecovery = function(e, r, n2, i, a2, o, s) { + }, t3.prototype.getCurrentGrammarPath = function(e, r) { + var n2 = this.getHumanReadableRuleStack(), i = de2.cloneArr(this.RULE_OCCURRENCE_STACK), a2 = { ruleStack: n2, occurrenceStack: i, lastTok: e, lastTokOccurrence: r }; + return a2; + }, t3.prototype.getHumanReadableRuleStack = function() { + var e = this; + return de2.map(this.RULE_STACK, function(r) { + return e.shortRuleNameToFullName(r); + }); + }, t3; + }(); + $2.Recoverable = Ps; + function Vi2(t3, e, r, n2, i, a2, o) { + var s = this.getKeyForAutomaticLookahead(n2, i), c2 = this.firstAfterRepMap[s]; + if (c2 === void 0) { + var f = this.getCurrRuleFullName(), p2 = this.getGAstProductions()[f], l2 = new a2(p2, i); + c2 = l2.startWalking(), this.firstAfterRepMap[s] = c2; + } + var m = c2.token, v = c2.occurrence, u = c2.isEndOfRule; + this.RULE_STACK.length === 1 && u && m === void 0 && (m = Ht.EOF, v = 1), this.shouldInRepetitionRecoveryBeTried(m, v, o) && this.tryInRepetitionRecovery(t3, e, r, m); + } + $2.attemptInRepetitionRecovery = Vi2; +}); +var Yt = R2((P) => { + "use strict"; + Object.defineProperty(P, "__esModule", { value: true }); + P.getKeyForAutomaticLookahead = P.AT_LEAST_ONE_SEP_IDX = P.MANY_SEP_IDX = P.AT_LEAST_ONE_IDX = P.MANY_IDX = P.OPTION_IDX = P.OR_IDX = P.BITS_FOR_ALT_IDX = P.BITS_FOR_RULE_IDX = P.BITS_FOR_OCCURRENCE_IDX = P.BITS_FOR_METHOD_TYPE = void 0; + P.BITS_FOR_METHOD_TYPE = 4; + P.BITS_FOR_OCCURRENCE_IDX = 8; + P.BITS_FOR_RULE_IDX = 12; + P.BITS_FOR_ALT_IDX = 8; + P.OR_IDX = 1 << P.BITS_FOR_OCCURRENCE_IDX; + P.OPTION_IDX = 2 << P.BITS_FOR_OCCURRENCE_IDX; + P.MANY_IDX = 3 << P.BITS_FOR_OCCURRENCE_IDX; + P.AT_LEAST_ONE_IDX = 4 << P.BITS_FOR_OCCURRENCE_IDX; + P.MANY_SEP_IDX = 5 << P.BITS_FOR_OCCURRENCE_IDX; + P.AT_LEAST_ONE_SEP_IDX = 6 << P.BITS_FOR_OCCURRENCE_IDX; + function Ss(t3, e, r) { + return r | e | t3; + } + P.getKeyForAutomaticLookahead = Ss; + var ic = 32 - P.BITS_FOR_ALT_IDX; +}); +var zi2 = R2((Xt) => { + "use strict"; + Object.defineProperty(Xt, "__esModule", { value: true }); + Xt.LooksAhead = void 0; + var be = yt2(), ge = k(), Ki = ce(), Fe = Yt(), Ve = vt(), xs = function() { + function t3() { + } + return t3.prototype.initLooksAhead = function(e) { + this.dynamicTokensEnabled = ge.has(e, "dynamicTokensEnabled") ? e.dynamicTokensEnabled : Ki.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled, this.maxLookahead = ge.has(e, "maxLookahead") ? e.maxLookahead : Ki.DEFAULT_PARSER_CONFIG.maxLookahead, this.lookAheadFuncsCache = ge.isES2015MapSupported() ? /* @__PURE__ */ new Map() : [], ge.isES2015MapSupported() ? (this.getLaFuncFromCache = this.getLaFuncFromMap, this.setLaFuncCache = this.setLaFuncCacheUsingMap) : (this.getLaFuncFromCache = this.getLaFuncFromObj, this.setLaFuncCache = this.setLaFuncUsingObj); + }, t3.prototype.preComputeLookaheadFunctions = function(e) { + var r = this; + ge.forEach(e, function(n2) { + r.TRACE_INIT(n2.name + " Rule Lookahead", function() { + var i = Ve.collectMethods(n2), a2 = i.alternation, o = i.repetition, s = i.option, c2 = i.repetitionMandatory, f = i.repetitionMandatoryWithSeparator, p2 = i.repetitionWithSeparator; + ge.forEach(a2, function(l2) { + var m = l2.idx === 0 ? "" : l2.idx; + r.TRACE_INIT("" + Ve.getProductionDslName(l2) + m, function() { + var v = be.buildLookaheadFuncForOr(l2.idx, n2, l2.maxLookahead || r.maxLookahead, l2.hasPredicates, r.dynamicTokensEnabled, r.lookAheadBuilderForAlternatives), u = Fe.getKeyForAutomaticLookahead(r.fullRuleNameToShort[n2.name], Fe.OR_IDX, l2.idx); + r.setLaFuncCache(u, v); + }); + }), ge.forEach(o, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.MANY_IDX, be.PROD_TYPE.REPETITION, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(s, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.OPTION_IDX, be.PROD_TYPE.OPTION, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(c2, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.AT_LEAST_ONE_IDX, be.PROD_TYPE.REPETITION_MANDATORY, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(f, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.AT_LEAST_ONE_SEP_IDX, be.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, l2.maxLookahead, Ve.getProductionDslName(l2)); + }), ge.forEach(p2, function(l2) { + r.computeLookaheadFunc(n2, l2.idx, Fe.MANY_SEP_IDX, be.PROD_TYPE.REPETITION_WITH_SEPARATOR, l2.maxLookahead, Ve.getProductionDslName(l2)); + }); + }); + }); + }, t3.prototype.computeLookaheadFunc = function(e, r, n2, i, a2, o) { + var s = this; + this.TRACE_INIT("" + o + (r === 0 ? "" : r), function() { + var c2 = be.buildLookaheadFuncForOptionalProd(r, e, a2 || s.maxLookahead, s.dynamicTokensEnabled, i, s.lookAheadBuilderForOptional), f = Fe.getKeyForAutomaticLookahead(s.fullRuleNameToShort[e.name], n2, r); + s.setLaFuncCache(f, c2); + }); + }, t3.prototype.lookAheadBuilderForOptional = function(e, r, n2) { + return be.buildSingleAlternativeLookaheadFunction(e, r, n2); + }, t3.prototype.lookAheadBuilderForAlternatives = function(e, r, n2, i) { + return be.buildAlternativesLookAheadFunc(e, r, n2, i); + }, t3.prototype.getKeyForAutomaticLookahead = function(e, r) { + var n2 = this.getLastExplicitRuleShortName(); + return Fe.getKeyForAutomaticLookahead(n2, e, r); + }, t3.prototype.getLaFuncFromCache = function(e) { + }, t3.prototype.getLaFuncFromMap = function(e) { + return this.lookAheadFuncsCache.get(e); + }, t3.prototype.getLaFuncFromObj = function(e) { + return this.lookAheadFuncsCache[e]; + }, t3.prototype.setLaFuncCache = function(e, r) { + }, t3.prototype.setLaFuncCacheUsingMap = function(e, r) { + this.lookAheadFuncsCache.set(e, r); + }, t3.prototype.setLaFuncUsingObj = function(e, r) { + this.lookAheadFuncsCache[e] = r; + }, t3; + }(); + Xt.LooksAhead = xs; +}); +var Hi = R2((ke) => { + "use strict"; + Object.defineProperty(ke, "__esModule", { value: true }); + ke.addNoneTerminalToCst = ke.addTerminalToCst = ke.setNodeLocationFull = ke.setNodeLocationOnlyOffset = void 0; + function Cs(t3, e) { + isNaN(t3.startOffset) === true ? (t3.startOffset = e.startOffset, t3.endOffset = e.endOffset) : t3.endOffset < e.endOffset && (t3.endOffset = e.endOffset); + } + ke.setNodeLocationOnlyOffset = Cs; + function Ls(t3, e) { + isNaN(t3.startOffset) === true ? (t3.startOffset = e.startOffset, t3.startColumn = e.startColumn, t3.startLine = e.startLine, t3.endOffset = e.endOffset, t3.endColumn = e.endColumn, t3.endLine = e.endLine) : t3.endOffset < e.endOffset && (t3.endOffset = e.endOffset, t3.endColumn = e.endColumn, t3.endLine = e.endLine); + } + ke.setNodeLocationFull = Ls; + function Ms(t3, e, r) { + t3.children[r] === void 0 ? t3.children[r] = [e] : t3.children[r].push(e); + } + ke.addTerminalToCst = Ms; + function bs(t3, e, r) { + t3.children[e] === void 0 ? t3.children[e] = [r] : t3.children[e].push(r); + } + ke.addNoneTerminalToCst = bs; +}); +var Hr = R2((Be) => { + "use strict"; + Object.defineProperty(Be, "__esModule", { value: true }); + Be.defineNameProp = Be.functionName = Be.classNameFromInstance = void 0; + var Fs = k(); + function ws(t3) { + return Yi(t3.constructor); + } + Be.classNameFromInstance = ws; + var Xi = "name"; + function Yi(t3) { + var e = t3.name; + return e || "anonymous"; + } + Be.functionName = Yi; + function Ds(t3, e) { + var r = Object.getOwnPropertyDescriptor(t3, Xi); + return Fs.isUndefined(r) || r.configurable ? (Object.defineProperty(t3, Xi, { enumerable: false, configurable: true, writable: false, value: e }), true) : false; + } + Be.defineNameProp = Ds; +}); +var ea = R2((Y2) => { + "use strict"; + Object.defineProperty(Y2, "__esModule", { value: true }); + Y2.validateRedundantMethods = Y2.validateMissingCstMethods = Y2.validateVisitor = Y2.CstVisitorDefinitionError = Y2.createBaseVisitorConstructorWithDefaults = Y2.createBaseSemanticVisitorConstructor = Y2.defaultVisit = void 0; + var ve = k(), At = Hr(); + function $i(t3, e) { + for (var r = ve.keys(t3), n2 = r.length, i = 0; i < n2; i++) for (var a2 = r[i], o = t3[a2], s = o.length, c2 = 0; c2 < s; c2++) { + var f = o[c2]; + f.tokenTypeIdx === void 0 && this[f.name](f.children, e); + } + } + Y2.defaultVisit = $i; + function Us(t3, e) { + var r = function() { + }; + At.defineNameProp(r, t3 + "BaseSemantics"); + var n2 = { visit: function(i, a2) { + if (ve.isArray(i) && (i = i[0]), !ve.isUndefined(i)) return this[i.name](i.children, a2); + }, validateVisitor: function() { + var i = Zi(this, e); + if (!ve.isEmpty(i)) { + var a2 = ve.map(i, function(o) { + return o.msg; + }); + throw Error("Errors Detected in CST Visitor <" + At.functionName(this.constructor) + `>: + ` + ("" + a2.join(` + +`).replace(/\n/g, ` + `))); + } + } }; + return r.prototype = n2, r.prototype.constructor = r, r._RULE_NAMES = e, r; + } + Y2.createBaseSemanticVisitorConstructor = Us; + function Gs(t3, e, r) { + var n2 = function() { + }; + At.defineNameProp(n2, t3 + "BaseSemanticsWithDefaults"); + var i = Object.create(r.prototype); + return ve.forEach(e, function(a2) { + i[a2] = $i; + }), n2.prototype = i, n2.prototype.constructor = n2, n2; + } + Y2.createBaseVisitorConstructorWithDefaults = Gs; + var Yr; + (function(t3) { + t3[t3.REDUNDANT_METHOD = 0] = "REDUNDANT_METHOD", t3[t3.MISSING_METHOD = 1] = "MISSING_METHOD"; + })(Yr = Y2.CstVisitorDefinitionError || (Y2.CstVisitorDefinitionError = {})); + function Zi(t3, e) { + var r = Qi(t3, e), n2 = Ji(t3, e); + return r.concat(n2); + } + Y2.validateVisitor = Zi; + function Qi(t3, e) { + var r = ve.map(e, function(n2) { + if (!ve.isFunction(t3[n2])) return { msg: "Missing visitor method: <" + n2 + "> on " + At.functionName(t3.constructor) + " CST Visitor.", type: Yr.MISSING_METHOD, methodName: n2 }; + }); + return ve.compact(r); + } + Y2.validateMissingCstMethods = Qi; + var Ws = ["constructor", "visit", "validateVisitor"]; + function Ji(t3, e) { + var r = []; + for (var n2 in t3) ve.isFunction(t3[n2]) && !ve.contains(Ws, n2) && !ve.contains(e, n2) && r.push({ msg: "Redundant visitor method: <" + n2 + "> on " + At.functionName(t3.constructor) + ` CST Visitor +There is no Grammar Rule corresponding to this method's name. +`, type: Yr.REDUNDANT_METHOD, methodName: n2 }); + return r; + } + Y2.validateRedundantMethods = Ji; +}); +var ra = R2(($t2) => { + "use strict"; + Object.defineProperty($t2, "__esModule", { value: true }); + $t2.TreeBuilder = void 0; + var tt = Hi(), K = k(), ta = ea(), Bs = ce(), qs = function() { + function t3() { + } + return t3.prototype.initTreeBuilder = function(e) { + if (this.CST_STACK = [], this.outputCst = e.outputCst, this.nodeLocationTracking = K.has(e, "nodeLocationTracking") ? e.nodeLocationTracking : Bs.DEFAULT_PARSER_CONFIG.nodeLocationTracking, !this.outputCst) this.cstInvocationStateUpdate = K.NOOP, this.cstFinallyStateUpdate = K.NOOP, this.cstPostTerminal = K.NOOP, this.cstPostNonTerminal = K.NOOP, this.cstPostRule = K.NOOP; + else if (/full/i.test(this.nodeLocationTracking)) this.recoveryEnabled ? (this.setNodeLocationFromToken = tt.setNodeLocationFull, this.setNodeLocationFromNode = tt.setNodeLocationFull, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery) : (this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = this.cstPostRuleFull, this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular); + else if (/onlyOffset/i.test(this.nodeLocationTracking)) this.recoveryEnabled ? (this.setNodeLocationFromToken = tt.setNodeLocationOnlyOffset, this.setNodeLocationFromNode = tt.setNodeLocationOnlyOffset, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery) : (this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = this.cstPostRuleOnlyOffset, this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular); + else if (/none/i.test(this.nodeLocationTracking)) this.setNodeLocationFromToken = K.NOOP, this.setNodeLocationFromNode = K.NOOP, this.cstPostRule = K.NOOP, this.setInitialNodeLocation = K.NOOP; + else throw Error('Invalid config option: "' + e.nodeLocationTracking + '"'); + }, t3.prototype.setInitialNodeLocationOnlyOffsetRecovery = function(e) { + e.location = { startOffset: NaN, endOffset: NaN }; + }, t3.prototype.setInitialNodeLocationOnlyOffsetRegular = function(e) { + e.location = { startOffset: this.LA(1).startOffset, endOffset: NaN }; + }, t3.prototype.setInitialNodeLocationFullRecovery = function(e) { + e.location = { startOffset: NaN, startLine: NaN, startColumn: NaN, endOffset: NaN, endLine: NaN, endColumn: NaN }; + }, t3.prototype.setInitialNodeLocationFullRegular = function(e) { + var r = this.LA(1); + e.location = { startOffset: r.startOffset, startLine: r.startLine, startColumn: r.startColumn, endOffset: NaN, endLine: NaN, endColumn: NaN }; + }, t3.prototype.cstInvocationStateUpdate = function(e, r) { + var n2 = { name: e, children: {} }; + this.setInitialNodeLocation(n2), this.CST_STACK.push(n2); + }, t3.prototype.cstFinallyStateUpdate = function() { + this.CST_STACK.pop(); + }, t3.prototype.cstPostRuleFull = function(e) { + var r = this.LA(0), n2 = e.location; + n2.startOffset <= r.startOffset ? (n2.endOffset = r.endOffset, n2.endLine = r.endLine, n2.endColumn = r.endColumn) : (n2.startOffset = NaN, n2.startLine = NaN, n2.startColumn = NaN); + }, t3.prototype.cstPostRuleOnlyOffset = function(e) { + var r = this.LA(0), n2 = e.location; + n2.startOffset <= r.startOffset ? n2.endOffset = r.endOffset : n2.startOffset = NaN; + }, t3.prototype.cstPostTerminal = function(e, r) { + var n2 = this.CST_STACK[this.CST_STACK.length - 1]; + tt.addTerminalToCst(n2, r, e), this.setNodeLocationFromToken(n2.location, r); + }, t3.prototype.cstPostNonTerminal = function(e, r) { + var n2 = this.CST_STACK[this.CST_STACK.length - 1]; + tt.addNoneTerminalToCst(n2, r, e), this.setNodeLocationFromNode(n2.location, e.location); + }, t3.prototype.getBaseCstVisitorConstructor = function() { + if (K.isUndefined(this.baseCstVisitorConstructor)) { + var e = ta.createBaseSemanticVisitorConstructor(this.className, K.keys(this.gastProductionsCache)); + return this.baseCstVisitorConstructor = e, e; + } + return this.baseCstVisitorConstructor; + }, t3.prototype.getBaseCstVisitorConstructorWithDefaults = function() { + if (K.isUndefined(this.baseCstVisitorWithDefaultsConstructor)) { + var e = ta.createBaseVisitorConstructorWithDefaults(this.className, K.keys(this.gastProductionsCache), this.getBaseCstVisitorConstructor()); + return this.baseCstVisitorWithDefaultsConstructor = e, e; + } + return this.baseCstVisitorWithDefaultsConstructor; + }, t3.prototype.getLastExplicitRuleShortName = function() { + var e = this.RULE_STACK; + return e[e.length - 1]; + }, t3.prototype.getPreviousExplicitRuleShortName = function() { + var e = this.RULE_STACK; + return e[e.length - 2]; + }, t3.prototype.getLastExplicitRuleOccurrenceIndex = function() { + var e = this.RULE_OCCURRENCE_STACK; + return e[e.length - 1]; + }, t3; + }(); + $t2.TreeBuilder = qs; +}); +var ia = R2((Zt) => { + "use strict"; + Object.defineProperty(Zt, "__esModule", { value: true }); + Zt.LexerAdapter = void 0; + var na = ce(), js = function() { + function t3() { + } + return t3.prototype.initLexerAdapter = function() { + this.tokVector = [], this.tokVectorLength = 0, this.currIdx = -1; + }, Object.defineProperty(t3.prototype, "input", { get: function() { + return this.tokVector; + }, set: function(e) { + if (this.selfAnalysisDone !== true) throw Error("Missing invocation at the end of the Parser's constructor."); + this.reset(), this.tokVector = e, this.tokVectorLength = e.length; + }, enumerable: false, configurable: true }), t3.prototype.SKIP_TOKEN = function() { + return this.currIdx <= this.tokVector.length - 2 ? (this.consumeToken(), this.LA(1)) : na.END_OF_FILE; + }, t3.prototype.LA = function(e) { + var r = this.currIdx + e; + return r < 0 || this.tokVectorLength <= r ? na.END_OF_FILE : this.tokVector[r]; + }, t3.prototype.consumeToken = function() { + this.currIdx++; + }, t3.prototype.exportLexerState = function() { + return this.currIdx; + }, t3.prototype.importLexerState = function(e) { + this.currIdx = e; + }, t3.prototype.resetLexerState = function() { + this.currIdx = -1; + }, t3.prototype.moveToTerminatedState = function() { + this.currIdx = this.tokVector.length - 1; + }, t3.prototype.getLexerPosition = function() { + return this.exportLexerState(); + }, t3; + }(); + Zt.LexerAdapter = js; +}); +var oa = R2((Qt) => { + "use strict"; + Object.defineProperty(Qt, "__esModule", { value: true }); + Qt.RecognizerApi = void 0; + var aa = k(), Vs = et3(), Xr = ce(), Ks = mt(), zs = jr(), Hs = ne(), Ys = function() { + function t3() { + } + return t3.prototype.ACTION = function(e) { + return e.call(this); + }, t3.prototype.consume = function(e, r, n2) { + return this.consumeInternal(r, e, n2); + }, t3.prototype.subrule = function(e, r, n2) { + return this.subruleInternal(r, e, n2); + }, t3.prototype.option = function(e, r) { + return this.optionInternal(r, e); + }, t3.prototype.or = function(e, r) { + return this.orInternal(r, e); + }, t3.prototype.many = function(e, r) { + return this.manyInternal(e, r); + }, t3.prototype.atLeastOne = function(e, r) { + return this.atLeastOneInternal(e, r); + }, t3.prototype.CONSUME = function(e, r) { + return this.consumeInternal(e, 0, r); + }, t3.prototype.CONSUME1 = function(e, r) { + return this.consumeInternal(e, 1, r); + }, t3.prototype.CONSUME2 = function(e, r) { + return this.consumeInternal(e, 2, r); + }, t3.prototype.CONSUME3 = function(e, r) { + return this.consumeInternal(e, 3, r); + }, t3.prototype.CONSUME4 = function(e, r) { + return this.consumeInternal(e, 4, r); + }, t3.prototype.CONSUME5 = function(e, r) { + return this.consumeInternal(e, 5, r); + }, t3.prototype.CONSUME6 = function(e, r) { + return this.consumeInternal(e, 6, r); + }, t3.prototype.CONSUME7 = function(e, r) { + return this.consumeInternal(e, 7, r); + }, t3.prototype.CONSUME8 = function(e, r) { + return this.consumeInternal(e, 8, r); + }, t3.prototype.CONSUME9 = function(e, r) { + return this.consumeInternal(e, 9, r); + }, t3.prototype.SUBRULE = function(e, r) { + return this.subruleInternal(e, 0, r); + }, t3.prototype.SUBRULE1 = function(e, r) { + return this.subruleInternal(e, 1, r); + }, t3.prototype.SUBRULE2 = function(e, r) { + return this.subruleInternal(e, 2, r); + }, t3.prototype.SUBRULE3 = function(e, r) { + return this.subruleInternal(e, 3, r); + }, t3.prototype.SUBRULE4 = function(e, r) { + return this.subruleInternal(e, 4, r); + }, t3.prototype.SUBRULE5 = function(e, r) { + return this.subruleInternal(e, 5, r); + }, t3.prototype.SUBRULE6 = function(e, r) { + return this.subruleInternal(e, 6, r); + }, t3.prototype.SUBRULE7 = function(e, r) { + return this.subruleInternal(e, 7, r); + }, t3.prototype.SUBRULE8 = function(e, r) { + return this.subruleInternal(e, 8, r); + }, t3.prototype.SUBRULE9 = function(e, r) { + return this.subruleInternal(e, 9, r); + }, t3.prototype.OPTION = function(e) { + return this.optionInternal(e, 0); + }, t3.prototype.OPTION1 = function(e) { + return this.optionInternal(e, 1); + }, t3.prototype.OPTION2 = function(e) { + return this.optionInternal(e, 2); + }, t3.prototype.OPTION3 = function(e) { + return this.optionInternal(e, 3); + }, t3.prototype.OPTION4 = function(e) { + return this.optionInternal(e, 4); + }, t3.prototype.OPTION5 = function(e) { + return this.optionInternal(e, 5); + }, t3.prototype.OPTION6 = function(e) { + return this.optionInternal(e, 6); + }, t3.prototype.OPTION7 = function(e) { + return this.optionInternal(e, 7); + }, t3.prototype.OPTION8 = function(e) { + return this.optionInternal(e, 8); + }, t3.prototype.OPTION9 = function(e) { + return this.optionInternal(e, 9); + }, t3.prototype.OR = function(e) { + return this.orInternal(e, 0); + }, t3.prototype.OR1 = function(e) { + return this.orInternal(e, 1); + }, t3.prototype.OR2 = function(e) { + return this.orInternal(e, 2); + }, t3.prototype.OR3 = function(e) { + return this.orInternal(e, 3); + }, t3.prototype.OR4 = function(e) { + return this.orInternal(e, 4); + }, t3.prototype.OR5 = function(e) { + return this.orInternal(e, 5); + }, t3.prototype.OR6 = function(e) { + return this.orInternal(e, 6); + }, t3.prototype.OR7 = function(e) { + return this.orInternal(e, 7); + }, t3.prototype.OR8 = function(e) { + return this.orInternal(e, 8); + }, t3.prototype.OR9 = function(e) { + return this.orInternal(e, 9); + }, t3.prototype.MANY = function(e) { + this.manyInternal(0, e); + }, t3.prototype.MANY1 = function(e) { + this.manyInternal(1, e); + }, t3.prototype.MANY2 = function(e) { + this.manyInternal(2, e); + }, t3.prototype.MANY3 = function(e) { + this.manyInternal(3, e); + }, t3.prototype.MANY4 = function(e) { + this.manyInternal(4, e); + }, t3.prototype.MANY5 = function(e) { + this.manyInternal(5, e); + }, t3.prototype.MANY6 = function(e) { + this.manyInternal(6, e); + }, t3.prototype.MANY7 = function(e) { + this.manyInternal(7, e); + }, t3.prototype.MANY8 = function(e) { + this.manyInternal(8, e); + }, t3.prototype.MANY9 = function(e) { + this.manyInternal(9, e); + }, t3.prototype.MANY_SEP = function(e) { + this.manySepFirstInternal(0, e); + }, t3.prototype.MANY_SEP1 = function(e) { + this.manySepFirstInternal(1, e); + }, t3.prototype.MANY_SEP2 = function(e) { + this.manySepFirstInternal(2, e); + }, t3.prototype.MANY_SEP3 = function(e) { + this.manySepFirstInternal(3, e); + }, t3.prototype.MANY_SEP4 = function(e) { + this.manySepFirstInternal(4, e); + }, t3.prototype.MANY_SEP5 = function(e) { + this.manySepFirstInternal(5, e); + }, t3.prototype.MANY_SEP6 = function(e) { + this.manySepFirstInternal(6, e); + }, t3.prototype.MANY_SEP7 = function(e) { + this.manySepFirstInternal(7, e); + }, t3.prototype.MANY_SEP8 = function(e) { + this.manySepFirstInternal(8, e); + }, t3.prototype.MANY_SEP9 = function(e) { + this.manySepFirstInternal(9, e); + }, t3.prototype.AT_LEAST_ONE = function(e) { + this.atLeastOneInternal(0, e); + }, t3.prototype.AT_LEAST_ONE1 = function(e) { + return this.atLeastOneInternal(1, e); + }, t3.prototype.AT_LEAST_ONE2 = function(e) { + this.atLeastOneInternal(2, e); + }, t3.prototype.AT_LEAST_ONE3 = function(e) { + this.atLeastOneInternal(3, e); + }, t3.prototype.AT_LEAST_ONE4 = function(e) { + this.atLeastOneInternal(4, e); + }, t3.prototype.AT_LEAST_ONE5 = function(e) { + this.atLeastOneInternal(5, e); + }, t3.prototype.AT_LEAST_ONE6 = function(e) { + this.atLeastOneInternal(6, e); + }, t3.prototype.AT_LEAST_ONE7 = function(e) { + this.atLeastOneInternal(7, e); + }, t3.prototype.AT_LEAST_ONE8 = function(e) { + this.atLeastOneInternal(8, e); + }, t3.prototype.AT_LEAST_ONE9 = function(e) { + this.atLeastOneInternal(9, e); + }, t3.prototype.AT_LEAST_ONE_SEP = function(e) { + this.atLeastOneSepFirstInternal(0, e); + }, t3.prototype.AT_LEAST_ONE_SEP1 = function(e) { + this.atLeastOneSepFirstInternal(1, e); + }, t3.prototype.AT_LEAST_ONE_SEP2 = function(e) { + this.atLeastOneSepFirstInternal(2, e); + }, t3.prototype.AT_LEAST_ONE_SEP3 = function(e) { + this.atLeastOneSepFirstInternal(3, e); + }, t3.prototype.AT_LEAST_ONE_SEP4 = function(e) { + this.atLeastOneSepFirstInternal(4, e); + }, t3.prototype.AT_LEAST_ONE_SEP5 = function(e) { + this.atLeastOneSepFirstInternal(5, e); + }, t3.prototype.AT_LEAST_ONE_SEP6 = function(e) { + this.atLeastOneSepFirstInternal(6, e); + }, t3.prototype.AT_LEAST_ONE_SEP7 = function(e) { + this.atLeastOneSepFirstInternal(7, e); + }, t3.prototype.AT_LEAST_ONE_SEP8 = function(e) { + this.atLeastOneSepFirstInternal(8, e); + }, t3.prototype.AT_LEAST_ONE_SEP9 = function(e) { + this.atLeastOneSepFirstInternal(9, e); + }, t3.prototype.RULE = function(e, r, n2) { + if (n2 === void 0 && (n2 = Xr.DEFAULT_RULE_CONFIG), aa.contains(this.definedRulesNames, e)) { + var i = Ks.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({ topLevelRule: e, grammarName: this.className }), a2 = { message: i, type: Xr.ParserDefinitionErrorType.DUPLICATE_RULE_NAME, ruleName: e }; + this.definitionErrors.push(a2); + } + this.definedRulesNames.push(e); + var o = this.defineRule(e, r, n2); + return this[e] = o, o; + }, t3.prototype.OVERRIDE_RULE = function(e, r, n2) { + n2 === void 0 && (n2 = Xr.DEFAULT_RULE_CONFIG); + var i = []; + i = i.concat(zs.validateRuleIsOverridden(e, this.definedRulesNames, this.className)), this.definitionErrors = this.definitionErrors.concat(i); + var a2 = this.defineRule(e, r, n2); + return this[e] = a2, a2; + }, t3.prototype.BACKTRACK = function(e, r) { + return function() { + this.isBackTrackingStack.push(1); + var n2 = this.saveRecogState(); + try { + return e.apply(this, r), true; + } catch (i) { + if (Vs.isRecognitionException(i)) return false; + throw i; + } finally { + this.reloadRecogState(n2), this.isBackTrackingStack.pop(); + } + }; + }, t3.prototype.getGAstProductions = function() { + return this.gastProductionsCache; + }, t3.prototype.getSerializedGastProductions = function() { + return Hs.serializeGrammar(aa.values(this.gastProductionsCache)); + }, t3; + }(); + Qt.RecognizerApi = Ys; +}); +var la = R2((Jt) => { + "use strict"; + Object.defineProperty(Jt, "__esModule", { value: true }); + Jt.RecognizerEngine = void 0; + var q2 = k(), le = Yt(), er = et3(), sa = yt2(), rt = Tt(), ua = ce(), Xs = zr(), ca = Ue(), Rt = Xe(), $s = Hr(), Zs = function() { + function t3() { + } + return t3.prototype.initRecognizerEngine = function(e, r) { + if (this.className = $s.classNameFromInstance(this), this.shortRuleNameToFull = {}, this.fullRuleNameToShort = {}, this.ruleShortNameIdx = 256, this.tokenMatcher = Rt.tokenStructuredMatcherNoCategories, this.definedRulesNames = [], this.tokensMap = {}, this.isBackTrackingStack = [], this.RULE_STACK = [], this.RULE_OCCURRENCE_STACK = [], this.gastProductionsCache = {}, q2.has(r, "serializedGrammar")) throw Error(`The Parser's configuration can no longer contain a property. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 + For Further details.`); + if (q2.isArray(e)) { + if (q2.isEmpty(e)) throw Error(`A Token Vocabulary cannot be empty. + Note that the first argument for the parser constructor + is no longer a Token vector (since v4.0).`); + if (typeof e[0].startOffset == "number") throw Error(`The Parser constructor no longer accepts a token vector as the first argument. + See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 + For Further details.`); + } + if (q2.isArray(e)) this.tokensMap = q2.reduce(e, function(o, s) { + return o[s.name] = s, o; + }, {}); + else if (q2.has(e, "modes") && q2.every(q2.flatten(q2.values(e.modes)), Rt.isTokenType)) { + var n2 = q2.flatten(q2.values(e.modes)), i = q2.uniq(n2); + this.tokensMap = q2.reduce(i, function(o, s) { + return o[s.name] = s, o; + }, {}); + } else if (q2.isObject(e)) this.tokensMap = q2.cloneObj(e); + else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition"); + this.tokensMap.EOF = ca.EOF; + var a2 = q2.every(q2.values(e), function(o) { + return q2.isEmpty(o.categoryMatches); + }); + this.tokenMatcher = a2 ? Rt.tokenStructuredMatcherNoCategories : Rt.tokenStructuredMatcher, Rt.augmentTokenTypes(q2.values(this.tokensMap)); + }, t3.prototype.defineRule = function(e, r, n2) { + if (this.selfAnalysisDone) throw Error("Grammar rule <" + e + `> may not be defined after the 'performSelfAnalysis' method has been called' +Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`); + var i = q2.has(n2, "resyncEnabled") ? n2.resyncEnabled : ua.DEFAULT_RULE_CONFIG.resyncEnabled, a2 = q2.has(n2, "recoveryValueFunc") ? n2.recoveryValueFunc : ua.DEFAULT_RULE_CONFIG.recoveryValueFunc, o = this.ruleShortNameIdx << le.BITS_FOR_METHOD_TYPE + le.BITS_FOR_OCCURRENCE_IDX; + this.ruleShortNameIdx++, this.shortRuleNameToFull[o] = e, this.fullRuleNameToShort[e] = o; + function s(p2) { + try { + if (this.outputCst === true) { + r.apply(this, p2); + var l2 = this.CST_STACK[this.CST_STACK.length - 1]; + return this.cstPostRule(l2), l2; + } else return r.apply(this, p2); + } catch (m) { + return this.invokeRuleCatch(m, i, a2); + } finally { + this.ruleFinallyStateUpdate(); + } + } + var c2 = function(p2, l2) { + return p2 === void 0 && (p2 = 0), this.ruleInvocationStateUpdate(o, e, p2), s.call(this, l2); + }, f = "ruleName"; + return c2[f] = e, c2.originalGrammarAction = r, c2; + }, t3.prototype.invokeRuleCatch = function(e, r, n2) { + var i = this.RULE_STACK.length === 1, a2 = r && !this.isBackTracking() && this.recoveryEnabled; + if (er.isRecognitionException(e)) { + var o = e; + if (a2) { + var s = this.findReSyncTokenType(); + if (this.isInCurrentRuleReSyncSet(s)) if (o.resyncedTokens = this.reSyncTo(s), this.outputCst) { + var c2 = this.CST_STACK[this.CST_STACK.length - 1]; + return c2.recoveredNode = true, c2; + } else return n2(); + else { + if (this.outputCst) { + var c2 = this.CST_STACK[this.CST_STACK.length - 1]; + c2.recoveredNode = true, o.partialCstResult = c2; + } + throw o; + } + } else { + if (i) return this.moveToTerminatedState(), n2(); + throw o; + } + } else throw e; + }, t3.prototype.optionInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.OPTION_IDX, r); + return this.optionInternalLogic(e, r, n2); + }, t3.prototype.optionInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (e.DEF !== void 0) { + if (o = e.DEF, s = e.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = e; + if (a2.call(this) === true) return o.call(this); + }, t3.prototype.atLeastOneInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_IDX, e); + return this.atLeastOneInternalLogic(e, r, n2); + }, t3.prototype.atLeastOneInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (r.DEF !== void 0) { + if (o = r.DEF, s = r.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = r; + if (a2.call(this) === true) for (var f = this.doSingleRepetition(o); a2.call(this) === true && f === true; ) f = this.doSingleRepetition(o); + else throw this.raiseEarlyExitException(e, sa.PROD_TYPE.REPETITION_MANDATORY, r.ERR_MSG); + this.attemptInRepetitionRecovery(this.atLeastOneInternal, [e, r], a2, le.AT_LEAST_ONE_IDX, e, rt.NextTerminalAfterAtLeastOneWalker); + }, t3.prototype.atLeastOneSepFirstInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_SEP_IDX, e); + this.atLeastOneSepFirstInternalLogic(e, r, n2); + }, t3.prototype.atLeastOneSepFirstInternalLogic = function(e, r, n2) { + var i = this, a2 = r.DEF, o = r.SEP, s = this.getLaFuncFromCache(n2); + if (s.call(this) === true) { + a2.call(this); + for (var c2 = function() { + return i.tokenMatcher(i.LA(1), o); + }; this.tokenMatcher(this.LA(1), o) === true; ) this.CONSUME(o), a2.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, o, c2, a2, rt.NextTerminalAfterAtLeastOneSepWalker], c2, le.AT_LEAST_ONE_SEP_IDX, e, rt.NextTerminalAfterAtLeastOneSepWalker); + } else throw this.raiseEarlyExitException(e, sa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, r.ERR_MSG); + }, t3.prototype.manyInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.MANY_IDX, e); + return this.manyInternalLogic(e, r, n2); + }, t3.prototype.manyInternalLogic = function(e, r, n2) { + var i = this, a2 = this.getLaFuncFromCache(n2), o, s; + if (r.DEF !== void 0) { + if (o = r.DEF, s = r.GATE, s !== void 0) { + var c2 = a2; + a2 = function() { + return s.call(i) && c2.call(i); + }; + } + } else o = r; + for (var f = true; a2.call(this) === true && f === true; ) f = this.doSingleRepetition(o); + this.attemptInRepetitionRecovery(this.manyInternal, [e, r], a2, le.MANY_IDX, e, rt.NextTerminalAfterManyWalker, f); + }, t3.prototype.manySepFirstInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.MANY_SEP_IDX, e); + this.manySepFirstInternalLogic(e, r, n2); + }, t3.prototype.manySepFirstInternalLogic = function(e, r, n2) { + var i = this, a2 = r.DEF, o = r.SEP, s = this.getLaFuncFromCache(n2); + if (s.call(this) === true) { + a2.call(this); + for (var c2 = function() { + return i.tokenMatcher(i.LA(1), o); + }; this.tokenMatcher(this.LA(1), o) === true; ) this.CONSUME(o), a2.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, o, c2, a2, rt.NextTerminalAfterManySepWalker], c2, le.MANY_SEP_IDX, e, rt.NextTerminalAfterManySepWalker); + } + }, t3.prototype.repetitionSepSecondInternal = function(e, r, n2, i, a2) { + for (; n2(); ) this.CONSUME(r), i.call(this); + this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [e, r, n2, i, a2], n2, le.AT_LEAST_ONE_SEP_IDX, e, a2); + }, t3.prototype.doSingleRepetition = function(e) { + var r = this.getLexerPosition(); + e.call(this); + var n2 = this.getLexerPosition(); + return n2 > r; + }, t3.prototype.orInternal = function(e, r) { + var n2 = this.getKeyForAutomaticLookahead(le.OR_IDX, r), i = q2.isArray(e) ? e : e.DEF, a2 = this.getLaFuncFromCache(n2), o = a2.call(this, i); + if (o !== void 0) { + var s = i[o]; + return s.ALT.call(this); + } + this.raiseNoAltException(r, e.ERR_MSG); + }, t3.prototype.ruleFinallyStateUpdate = function() { + if (this.RULE_STACK.pop(), this.RULE_OCCURRENCE_STACK.pop(), this.cstFinallyStateUpdate(), this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) { + var e = this.LA(1), r = this.errorMessageProvider.buildNotAllInputParsedMessage({ firstRedundant: e, ruleName: this.getCurrRuleFullName() }); + this.SAVE_ERROR(new er.NotAllInputParsedException(r, e)); + } + }, t3.prototype.subruleInternal = function(e, r, n2) { + var i; + try { + var a2 = n2 !== void 0 ? n2.ARGS : void 0; + return i = e.call(this, r, a2), this.cstPostNonTerminal(i, n2 !== void 0 && n2.LABEL !== void 0 ? n2.LABEL : e.ruleName), i; + } catch (o) { + this.subruleInternalError(o, n2, e.ruleName); + } + }, t3.prototype.subruleInternalError = function(e, r, n2) { + throw er.isRecognitionException(e) && e.partialCstResult !== void 0 && (this.cstPostNonTerminal(e.partialCstResult, r !== void 0 && r.LABEL !== void 0 ? r.LABEL : n2), delete e.partialCstResult), e; + }, t3.prototype.consumeInternal = function(e, r, n2) { + var i; + try { + var a2 = this.LA(1); + this.tokenMatcher(a2, e) === true ? (this.consumeToken(), i = a2) : this.consumeInternalError(e, a2, n2); + } catch (o) { + i = this.consumeInternalRecovery(e, r, o); + } + return this.cstPostTerminal(n2 !== void 0 && n2.LABEL !== void 0 ? n2.LABEL : e.name, i), i; + }, t3.prototype.consumeInternalError = function(e, r, n2) { + var i, a2 = this.LA(0); + throw n2 !== void 0 && n2.ERR_MSG ? i = n2.ERR_MSG : i = this.errorMessageProvider.buildMismatchTokenMessage({ expected: e, actual: r, previous: a2, ruleName: this.getCurrRuleFullName() }), this.SAVE_ERROR(new er.MismatchedTokenException(i, r, a2)); + }, t3.prototype.consumeInternalRecovery = function(e, r, n2) { + if (this.recoveryEnabled && n2.name === "MismatchedTokenException" && !this.isBackTracking()) { + var i = this.getFollowsForInRuleRecovery(e, r); + try { + return this.tryInRuleRecovery(e, i); + } catch (a2) { + throw a2.name === Xs.IN_RULE_RECOVERY_EXCEPTION ? n2 : a2; + } + } else throw n2; + }, t3.prototype.saveRecogState = function() { + var e = this.errors, r = q2.cloneArr(this.RULE_STACK); + return { errors: e, lexerState: this.exportLexerState(), RULE_STACK: r, CST_STACK: this.CST_STACK }; + }, t3.prototype.reloadRecogState = function(e) { + this.errors = e.errors, this.importLexerState(e.lexerState), this.RULE_STACK = e.RULE_STACK; + }, t3.prototype.ruleInvocationStateUpdate = function(e, r, n2) { + this.RULE_OCCURRENCE_STACK.push(n2), this.RULE_STACK.push(e), this.cstInvocationStateUpdate(r, e); + }, t3.prototype.isBackTracking = function() { + return this.isBackTrackingStack.length !== 0; + }, t3.prototype.getCurrRuleFullName = function() { + var e = this.getLastExplicitRuleShortName(); + return this.shortRuleNameToFull[e]; + }, t3.prototype.shortRuleNameToFullName = function(e) { + return this.shortRuleNameToFull[e]; + }, t3.prototype.isAtEndOfInput = function() { + return this.tokenMatcher(this.LA(1), ca.EOF); + }, t3.prototype.reset = function() { + this.resetLexerState(), this.isBackTrackingStack = [], this.errors = [], this.RULE_STACK = [], this.CST_STACK = [], this.RULE_OCCURRENCE_STACK = []; + }, t3; + }(); + Jt.RecognizerEngine = Zs; +}); +var pa = R2((tr) => { + "use strict"; + Object.defineProperty(tr, "__esModule", { value: true }); + tr.ErrorHandler = void 0; + var $r = et3(), Zr = k(), fa = yt2(), Qs = ce(), Js = function() { + function t3() { + } + return t3.prototype.initErrorHandler = function(e) { + this._errors = [], this.errorMessageProvider = Zr.has(e, "errorMessageProvider") ? e.errorMessageProvider : Qs.DEFAULT_PARSER_CONFIG.errorMessageProvider; + }, t3.prototype.SAVE_ERROR = function(e) { + if ($r.isRecognitionException(e)) return e.context = { ruleStack: this.getHumanReadableRuleStack(), ruleOccurrenceStack: Zr.cloneArr(this.RULE_OCCURRENCE_STACK) }, this._errors.push(e), e; + throw Error("Trying to save an Error which is not a RecognitionException"); + }, Object.defineProperty(t3.prototype, "errors", { get: function() { + return Zr.cloneArr(this._errors); + }, set: function(e) { + this._errors = e; + }, enumerable: false, configurable: true }), t3.prototype.raiseEarlyExitException = function(e, r, n2) { + for (var i = this.getCurrRuleFullName(), a2 = this.getGAstProductions()[i], o = fa.getLookaheadPathsForOptionalProd(e, a2, r, this.maxLookahead), s = o[0], c2 = [], f = 1; f <= this.maxLookahead; f++) c2.push(this.LA(f)); + var p2 = this.errorMessageProvider.buildEarlyExitMessage({ expectedIterationPaths: s, actual: c2, previous: this.LA(0), customUserDescription: n2, ruleName: i }); + throw this.SAVE_ERROR(new $r.EarlyExitException(p2, this.LA(1), this.LA(0))); + }, t3.prototype.raiseNoAltException = function(e, r) { + for (var n2 = this.getCurrRuleFullName(), i = this.getGAstProductions()[n2], a2 = fa.getLookaheadPathsForOr(e, i, this.maxLookahead), o = [], s = 1; s <= this.maxLookahead; s++) o.push(this.LA(s)); + var c2 = this.LA(0), f = this.errorMessageProvider.buildNoViableAltMessage({ expectedPathsPerAlt: a2, actual: o, previous: c2, customUserDescription: r, ruleName: this.getCurrRuleFullName() }); + throw this.SAVE_ERROR(new $r.NoViableAltException(f, this.LA(1), c2)); + }, t3; + }(); + tr.ErrorHandler = Js; +}); +var va = R2((rr) => { + "use strict"; + Object.defineProperty(rr, "__esModule", { value: true }); + rr.ContentAssist = void 0; + var ha = Tt(), da = k(), eu = function() { + function t3() { + } + return t3.prototype.initContentAssist = function() { + }, t3.prototype.computeContentAssist = function(e, r) { + var n2 = this.gastProductionsCache[e]; + if (da.isUndefined(n2)) throw Error("Rule ->" + e + "<- does not exist in this grammar."); + return ha.nextPossibleTokensAfter([n2], r, this.tokenMatcher, this.maxLookahead); + }, t3.prototype.getNextPossibleTokenTypes = function(e) { + var r = da.first(e.ruleStack), n2 = this.getGAstProductions(), i = n2[r], a2 = new ha.NextAfterTokenWalker(i, e).startWalking(); + return a2; + }, t3; + }(); + rr.ContentAssist = eu; +}); +var Ra = R2((nr) => { + "use strict"; + Object.defineProperty(nr, "__esModule", { value: true }); + nr.GastRecorder = void 0; + var oe = k(), Pe = ne(), tu = ft(), ma = Xe(), Ea = Ue(), ru = ce(), nu = Yt(), ir = { description: "This Object indicates the Parser is during Recording Phase" }; + Object.freeze(ir); + var Ta = true, ya = Math.pow(2, nu.BITS_FOR_OCCURRENCE_IDX) - 1, _a3 = Ea.createToken({ name: "RECORDING_PHASE_TOKEN", pattern: tu.Lexer.NA }); + ma.augmentTokenTypes([_a3]); + var ga = Ea.createTokenInstance(_a3, `This IToken indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`, -1, -1, -1, -1, -1, -1); + Object.freeze(ga); + var iu = { name: `This CSTNode indicates the Parser is in Recording Phase + See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`, children: {} }, ou = function() { + function t3() { + } + return t3.prototype.initGastRecorder = function(e) { + this.recordingProdStack = [], this.RECORDING_PHASE = false; + }, t3.prototype.enableRecording = function() { + var e = this; + this.RECORDING_PHASE = true, this.TRACE_INIT("Enable Recording", function() { + for (var r = function(i) { + var a2 = i > 0 ? i : ""; + e["CONSUME" + a2] = function(o, s) { + return this.consumeInternalRecord(o, i, s); + }, e["SUBRULE" + a2] = function(o, s) { + return this.subruleInternalRecord(o, i, s); + }, e["OPTION" + a2] = function(o) { + return this.optionInternalRecord(o, i); + }, e["OR" + a2] = function(o) { + return this.orInternalRecord(o, i); + }, e["MANY" + a2] = function(o) { + this.manyInternalRecord(i, o); + }, e["MANY_SEP" + a2] = function(o) { + this.manySepFirstInternalRecord(i, o); + }, e["AT_LEAST_ONE" + a2] = function(o) { + this.atLeastOneInternalRecord(i, o); + }, e["AT_LEAST_ONE_SEP" + a2] = function(o) { + this.atLeastOneSepFirstInternalRecord(i, o); + }; + }, n2 = 0; n2 < 10; n2++) r(n2); + e.consume = function(i, a2, o) { + return this.consumeInternalRecord(a2, i, o); + }, e.subrule = function(i, a2, o) { + return this.subruleInternalRecord(a2, i, o); + }, e.option = function(i, a2) { + return this.optionInternalRecord(a2, i); + }, e.or = function(i, a2) { + return this.orInternalRecord(a2, i); + }, e.many = function(i, a2) { + this.manyInternalRecord(i, a2); + }, e.atLeastOne = function(i, a2) { + this.atLeastOneInternalRecord(i, a2); + }, e.ACTION = e.ACTION_RECORD, e.BACKTRACK = e.BACKTRACK_RECORD, e.LA = e.LA_RECORD; + }); + }, t3.prototype.disableRecording = function() { + var e = this; + this.RECORDING_PHASE = false, this.TRACE_INIT("Deleting Recording methods", function() { + for (var r = 0; r < 10; r++) { + var n2 = r > 0 ? r : ""; + delete e["CONSUME" + n2], delete e["SUBRULE" + n2], delete e["OPTION" + n2], delete e["OR" + n2], delete e["MANY" + n2], delete e["MANY_SEP" + n2], delete e["AT_LEAST_ONE" + n2], delete e["AT_LEAST_ONE_SEP" + n2]; + } + delete e.consume, delete e.subrule, delete e.option, delete e.or, delete e.many, delete e.atLeastOne, delete e.ACTION, delete e.BACKTRACK, delete e.LA; + }); + }, t3.prototype.ACTION_RECORD = function(e) { + }, t3.prototype.BACKTRACK_RECORD = function(e, r) { + return function() { + return true; + }; + }, t3.prototype.LA_RECORD = function(e) { + return ru.END_OF_FILE; + }, t3.prototype.topLevelRuleRecord = function(e, r) { + try { + var n2 = new Pe.Rule({ definition: [], name: e }); + return n2.name = e, this.recordingProdStack.push(n2), r.call(this), this.recordingProdStack.pop(), n2; + } catch (i) { + if (i.KNOWN_RECORDER_ERROR !== true) try { + i.message = i.message + ` + This error was thrown during the "grammar recording phase" For more info see: + https://chevrotain.io/docs/guide/internals.html#grammar-recording`; + } catch (a2) { + throw i; + } + throw i; + } + }, t3.prototype.optionInternalRecord = function(e, r) { + return Ot2.call(this, Pe.Option, e, r); + }, t3.prototype.atLeastOneInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionMandatory, r, e); + }, t3.prototype.atLeastOneSepFirstInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionMandatoryWithSeparator, r, e, Ta); + }, t3.prototype.manyInternalRecord = function(e, r) { + Ot2.call(this, Pe.Repetition, r, e); + }, t3.prototype.manySepFirstInternalRecord = function(e, r) { + Ot2.call(this, Pe.RepetitionWithSeparator, r, e, Ta); + }, t3.prototype.orInternalRecord = function(e, r) { + return au.call(this, e, r); + }, t3.prototype.subruleInternalRecord = function(e, r, n2) { + if (ar(r), !e || oe.has(e, "ruleName") === false) { + var i = new Error(" argument is invalid" + (" expecting a Parser method reference but got: <" + JSON.stringify(e) + ">") + (` + inside top level rule: <` + this.recordingProdStack[0].name + ">")); + throw i.KNOWN_RECORDER_ERROR = true, i; + } + var a2 = oe.peek(this.recordingProdStack), o = e.ruleName, s = new Pe.NonTerminal({ idx: r, nonTerminalName: o, referencedRule: void 0 }); + return a2.definition.push(s), this.outputCst ? iu : ir; + }, t3.prototype.consumeInternalRecord = function(e, r, n2) { + if (ar(r), !ma.hasShortKeyProperty(e)) { + var i = new Error(" argument is invalid" + (" expecting a TokenType reference but got: <" + JSON.stringify(e) + ">") + (` + inside top level rule: <` + this.recordingProdStack[0].name + ">")); + throw i.KNOWN_RECORDER_ERROR = true, i; + } + var a2 = oe.peek(this.recordingProdStack), o = new Pe.Terminal({ idx: r, terminalType: e }); + return a2.definition.push(o), ga; + }, t3; + }(); + nr.GastRecorder = ou; + function Ot2(t3, e, r, n2) { + n2 === void 0 && (n2 = false), ar(r); + var i = oe.peek(this.recordingProdStack), a2 = oe.isFunction(e) ? e : e.DEF, o = new t3({ definition: [], idx: r }); + return n2 && (o.separator = e.SEP), oe.has(e, "MAX_LOOKAHEAD") && (o.maxLookahead = e.MAX_LOOKAHEAD), this.recordingProdStack.push(o), a2.call(this), i.definition.push(o), this.recordingProdStack.pop(), ir; + } + function au(t3, e) { + var r = this; + ar(e); + var n2 = oe.peek(this.recordingProdStack), i = oe.isArray(t3) === false, a2 = i === false ? t3 : t3.DEF, o = new Pe.Alternation({ definition: [], idx: e, ignoreAmbiguities: i && t3.IGNORE_AMBIGUITIES === true }); + oe.has(t3, "MAX_LOOKAHEAD") && (o.maxLookahead = t3.MAX_LOOKAHEAD); + var s = oe.some(a2, function(c2) { + return oe.isFunction(c2.GATE); + }); + return o.hasPredicates = s, n2.definition.push(o), oe.forEach(a2, function(c2) { + var f = new Pe.Alternative({ definition: [] }); + o.definition.push(f), oe.has(c2, "IGNORE_AMBIGUITIES") ? f.ignoreAmbiguities = c2.IGNORE_AMBIGUITIES : oe.has(c2, "GATE") && (f.ignoreAmbiguities = true), r.recordingProdStack.push(f), c2.ALT.call(r), r.recordingProdStack.pop(); + }), ir; + } + function Aa(t3) { + return t3 === 0 ? "" : "" + t3; + } + function ar(t3) { + if (t3 < 0 || t3 > ya) { + var e = new Error("Invalid DSL Method idx value: <" + t3 + `> + ` + ("Idx value must be a none negative value smaller than " + (ya + 1))); + throw e.KNOWN_RECORDER_ERROR = true, e; + } + } +}); +var Na = R2((or) => { + "use strict"; + Object.defineProperty(or, "__esModule", { value: true }); + or.PerformanceTracer = void 0; + var Oa = k(), su = ce(), uu = function() { + function t3() { + } + return t3.prototype.initPerformanceTracer = function(e) { + if (Oa.has(e, "traceInitPerf")) { + var r = e.traceInitPerf, n2 = typeof r == "number"; + this.traceInitMaxIdent = n2 ? r : Infinity, this.traceInitPerf = n2 ? r > 0 : r; + } else this.traceInitMaxIdent = 0, this.traceInitPerf = su.DEFAULT_PARSER_CONFIG.traceInitPerf; + this.traceInitIndent = -1; + }, t3.prototype.TRACE_INIT = function(e, r) { + if (this.traceInitPerf === true) { + this.traceInitIndent++; + var n2 = new Array(this.traceInitIndent + 1).join(" "); + this.traceInitIndent < this.traceInitMaxIdent && console.log(n2 + "--> <" + e + ">"); + var i = Oa.timer(r), a2 = i.time, o = i.value, s = a2 > 10 ? console.warn : console.log; + return this.traceInitIndent < this.traceInitMaxIdent && s(n2 + "<-- <" + e + "> time: " + a2 + "ms"), this.traceInitIndent--, o; + } else return r(); + }, t3; + }(); + or.PerformanceTracer = uu; +}); +var Ia = R2((sr) => { + "use strict"; + Object.defineProperty(sr, "__esModule", { value: true }); + sr.applyMixins = void 0; + function cu(t3, e) { + e.forEach(function(r) { + var n2 = r.prototype; + Object.getOwnPropertyNames(n2).forEach(function(i) { + if (i !== "constructor") { + var a2 = Object.getOwnPropertyDescriptor(n2, i); + a2 && (a2.get || a2.set) ? Object.defineProperty(t3.prototype, i, a2) : t3.prototype[i] = r.prototype[i]; + } + }); + }); + } + sr.applyMixins = cu; +}); +var ce = R2((U) => { + "use strict"; + var ka = U && U.__extends || /* @__PURE__ */ function() { + var t3 = function(e, r) { + return t3 = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n2, i) { + n2.__proto__ = i; + } || function(n2, i) { + for (var a2 in i) Object.prototype.hasOwnProperty.call(i, a2) && (n2[a2] = i[a2]); + }, t3(e, r); + }; + return function(e, r) { + if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null"); + t3(e, r); + function n2() { + this.constructor = e; + } + e.prototype = r === null ? Object.create(r) : (n2.prototype = r.prototype, new n2()); + }; + }(); + Object.defineProperty(U, "__esModule", { value: true }); + U.EmbeddedActionsParser = U.CstParser = U.Parser = U.EMPTY_ALT = U.ParserDefinitionErrorType = U.DEFAULT_RULE_CONFIG = U.DEFAULT_PARSER_CONFIG = U.END_OF_FILE = void 0; + var ee = k(), lu = pi(), Pa = Ue(), Sa = mt(), xa = Ui(), fu = zr(), pu = zi2(), hu = ra(), du = ia(), vu = oa(), mu = la(), Eu = pa(), Tu = va(), yu = Ra(), _u = Na(), gu = Ia(); + U.END_OF_FILE = Pa.createTokenInstance(Pa.EOF, "", NaN, NaN, NaN, NaN, NaN, NaN); + Object.freeze(U.END_OF_FILE); + U.DEFAULT_PARSER_CONFIG = Object.freeze({ recoveryEnabled: false, maxLookahead: 3, dynamicTokensEnabled: false, outputCst: true, errorMessageProvider: Sa.defaultParserErrorProvider, nodeLocationTracking: "none", traceInitPerf: false, skipValidations: false }); + U.DEFAULT_RULE_CONFIG = Object.freeze({ recoveryValueFunc: function() { + }, resyncEnabled: true }); + var Au; + (function(t3) { + t3[t3.INVALID_RULE_NAME = 0] = "INVALID_RULE_NAME", t3[t3.DUPLICATE_RULE_NAME = 1] = "DUPLICATE_RULE_NAME", t3[t3.INVALID_RULE_OVERRIDE = 2] = "INVALID_RULE_OVERRIDE", t3[t3.DUPLICATE_PRODUCTIONS = 3] = "DUPLICATE_PRODUCTIONS", t3[t3.UNRESOLVED_SUBRULE_REF = 4] = "UNRESOLVED_SUBRULE_REF", t3[t3.LEFT_RECURSION = 5] = "LEFT_RECURSION", t3[t3.NONE_LAST_EMPTY_ALT = 6] = "NONE_LAST_EMPTY_ALT", t3[t3.AMBIGUOUS_ALTS = 7] = "AMBIGUOUS_ALTS", t3[t3.CONFLICT_TOKENS_RULES_NAMESPACE = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE", t3[t3.INVALID_TOKEN_NAME = 9] = "INVALID_TOKEN_NAME", t3[t3.NO_NON_EMPTY_LOOKAHEAD = 10] = "NO_NON_EMPTY_LOOKAHEAD", t3[t3.AMBIGUOUS_PREFIX_ALTS = 11] = "AMBIGUOUS_PREFIX_ALTS", t3[t3.TOO_MANY_ALTS = 12] = "TOO_MANY_ALTS"; + })(Au = U.ParserDefinitionErrorType || (U.ParserDefinitionErrorType = {})); + function Ru(t3) { + return t3 === void 0 && (t3 = void 0), function() { + return t3; + }; + } + U.EMPTY_ALT = Ru; + var ur = function() { + function t3(e, r) { + this.definitionErrors = [], this.selfAnalysisDone = false; + var n2 = this; + if (n2.initErrorHandler(r), n2.initLexerAdapter(), n2.initLooksAhead(r), n2.initRecognizerEngine(e, r), n2.initRecoverable(r), n2.initTreeBuilder(r), n2.initContentAssist(), n2.initGastRecorder(r), n2.initPerformanceTracer(r), ee.has(r, "ignoredIssues")) throw new Error(`The IParserConfig property has been deprecated. + Please use the flag on the relevant DSL method instead. + See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES + For further details.`); + this.skipValidations = ee.has(r, "skipValidations") ? r.skipValidations : U.DEFAULT_PARSER_CONFIG.skipValidations; + } + return t3.performSelfAnalysis = function(e) { + throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead."); + }, t3.prototype.performSelfAnalysis = function() { + var e = this; + this.TRACE_INIT("performSelfAnalysis", function() { + var r; + e.selfAnalysisDone = true; + var n2 = e.className; + e.TRACE_INIT("toFastProps", function() { + ee.toFastProperties(e); + }), e.TRACE_INIT("Grammar Recording", function() { + try { + e.enableRecording(), ee.forEach(e.definedRulesNames, function(a2) { + var o = e[a2], s = o.originalGrammarAction, c2 = void 0; + e.TRACE_INIT(a2 + " Rule", function() { + c2 = e.topLevelRuleRecord(a2, s); + }), e.gastProductionsCache[a2] = c2; + }); + } finally { + e.disableRecording(); + } + }); + var i = []; + if (e.TRACE_INIT("Grammar Resolving", function() { + i = xa.resolveGrammar({ rules: ee.values(e.gastProductionsCache) }), e.definitionErrors = e.definitionErrors.concat(i); + }), e.TRACE_INIT("Grammar Validations", function() { + if (ee.isEmpty(i) && e.skipValidations === false) { + var a2 = xa.validateGrammar({ rules: ee.values(e.gastProductionsCache), maxLookahead: e.maxLookahead, tokenTypes: ee.values(e.tokensMap), errMsgProvider: Sa.defaultGrammarValidatorErrorProvider, grammarName: n2 }); + e.definitionErrors = e.definitionErrors.concat(a2); + } + }), ee.isEmpty(e.definitionErrors) && (e.recoveryEnabled && e.TRACE_INIT("computeAllProdsFollows", function() { + var a2 = lu.computeAllProdsFollows(ee.values(e.gastProductionsCache)); + e.resyncFollows = a2; + }), e.TRACE_INIT("ComputeLookaheadFunctions", function() { + e.preComputeLookaheadFunctions(ee.values(e.gastProductionsCache)); + })), !t3.DEFER_DEFINITION_ERRORS_HANDLING && !ee.isEmpty(e.definitionErrors)) throw r = ee.map(e.definitionErrors, function(a2) { + return a2.message; + }), new Error(`Parser Definition Errors detected: + ` + r.join(` +------------------------------- +`)); + }); + }, t3.DEFER_DEFINITION_ERRORS_HANDLING = false, t3; + }(); + U.Parser = ur; + gu.applyMixins(ur, [fu.Recoverable, pu.LooksAhead, hu.TreeBuilder, du.LexerAdapter, mu.RecognizerEngine, vu.RecognizerApi, Eu.ErrorHandler, Tu.ContentAssist, yu.GastRecorder, _u.PerformanceTracer]); + var Ou = function(t3) { + ka(e, t3); + function e(r, n2) { + n2 === void 0 && (n2 = U.DEFAULT_PARSER_CONFIG); + var i = this, a2 = ee.cloneObj(n2); + return a2.outputCst = true, i = t3.call(this, r, a2) || this, i; + } + return e; + }(ur); + U.CstParser = Ou; + var Nu = function(t3) { + ka(e, t3); + function e(r, n2) { + n2 === void 0 && (n2 = U.DEFAULT_PARSER_CONFIG); + var i = this, a2 = ee.cloneObj(n2); + return a2.outputCst = false, i = t3.call(this, r, a2) || this, i; + } + return e; + }(ur); + U.EmbeddedActionsParser = Nu; +}); +var La = R2((cr) => { + "use strict"; + Object.defineProperty(cr, "__esModule", { value: true }); + cr.createSyntaxDiagramsCode = void 0; + var Ca = Er(); + function Iu(t3, e) { + var r = e === void 0 ? {} : e, n2 = r.resourceBase, i = n2 === void 0 ? "https://unpkg.com/chevrotain@" + Ca.VERSION + "/diagrams/" : n2, a2 = r.css, o = a2 === void 0 ? "https://unpkg.com/chevrotain@" + Ca.VERSION + "/diagrams/diagrams.css" : a2, s = ` + + + + + +`, c2 = ` + +`, f = ` +\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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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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G;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,OAA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,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,MA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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,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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,YAAa,WAAW,SAAS,SAAS,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,UAAU,WAAY,UAAU,YAAc,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,QAAQ,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,SAAS,WAAY,SAAS,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,SAAS,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,SAAS,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,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,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,SAAS,UAAU,WAAY,UAAU,SAAS,SAAS,YAAa,UAAU,SAAS,UAAU,WAAY,SAAS,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,SAAS,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,UAAU,UAAU,WAAY,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,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,SAAS,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,SAAS,WAAY,QAAQ,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,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,SAAS,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,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,QAAQ,UAAU,UAAW,UAAU,SAAS,UAAU,SAAU,SAAS,SAAS,UAAU,YAAa,QAAQ,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,QAAQ,WAAa,YAAe,SAAS,UAAU,aAAe,SAAS,YAAa,SAAS,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,QAAQ,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,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,SAAS,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,SAAU,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,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,QAAQ,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,SAAS,SAAS,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,QAAQ,UAAU,WAAa,YAAe,QAAQ,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,WAAa,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,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,QAAQ,SAAU,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,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,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,QAAQ,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,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,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,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,SAAS,QAAQ,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,UAAU,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,UAAY,UAAU,YAAe,UAAU,WAAa,SAAS,YAAe,UAAU,WAAY,SAAS,YAAc,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,UAAW,UAAU,WAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,SAAS,UAAU,UAAU,WAAY,UAAU,SAAS,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,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,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,QAAQ,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,SAAS,UAAU,WAAY,SAAS,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,SAAS,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,UAAU,SAAS,SAAS,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,WAAY,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,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,SAAS,WAAY,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,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,QAAQ,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,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,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,SAAS,SAAS,UAAU,WAAY,SAAS,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,UAAW,SAAS,SAAS,UAAU,WAAY,UAAU,SAAS,SAAS,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,OAAO,UAAU,YAAa,WAAW,QAAQ,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,QAAQ,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,QAAQ,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,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,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,SAAS,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,UAAW,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,SAAS,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,SAAS,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,WAAa,UAAU,UAAU,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,SAAS,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,SAAU,UAAU,SAAS,UAAU,WAAY,SAAS,SAAS,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,QAAQ,UAAU,SAAS,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,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,UAAU,UAAU,WAAY,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,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,SAAS,YAAa,WAAW,QAAQ,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAa,WAAc,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,SAAS,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,SAAS,WAAY,UAAU,WAAa,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,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,UAAU,SAAS,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,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,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,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,UAAU,UAAU,SAAU,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,YAAa,UAAU,SAAS,SAAS,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAY,WAAW,QAAQ,SAAS,UAAY,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,UAAU,WAAa,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,QAAQ,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,SAAS,YAAa,QAAQ,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,UAAU,UAAU,WAAY,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,QAAQ,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,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,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,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,MAAM,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,WAAY,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,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,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,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,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,QAAQ,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,SAAS,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,QAAQ,SAAS,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAc,UAAU,UAAY,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,UAAW,UAAU,YAAc,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,SAAS,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,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,SAAS,UAAU,UAAW,SAAS,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,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,SAAS,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,UAAW,SAAS,SAAS,SAAS,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,QAAQ,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,SAAS,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,aAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,UAAY,UAAU,YAAc,UAAU,WAAa,SAAS,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,SAAS,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,SAAS,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,UAAW,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,OAAO,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,SAAS,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,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,SAAS,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,UAAW,UAAU,UAAU,UAAU,WAAY,OAAO,UAAU,UAAU,SAAU,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,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,UAAW,UAAU,SAAS,UAAU,WAAY,UAAU,QAAQ,UAAU,WAAY,UAAU,QAAQ,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,YAAe,SAAS,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,UAAY,UAAU,YAAe,UAAU,WAAa,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,YAAc,UAAU,WAAY,UAAU,WAAa,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,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,SAAS,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,WAAW,UAAU,YAAa,UAAU,UAAU,UAAU,YAAa,UAAU,WAAW,SAAS,YAAa,UAAU,WAAW,UAAU,WAAY,UAAU,WAAW,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,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,SAAS,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,SAAS,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,UAAU,UAAU,WAAY,SAAS,UAAU,UAAU,WAAY,UAAU,QAAQ,SAAS,WAAY,UAAU,UAAU,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,WAAY,UAAU,SAAS,UAAU,YAAa,UAAU,SAAS,UAAU,YAAa,WAAW,MAAM,UAAU,YAAa,WAAW,SAAS,UAAU,YAAa,WAAW,SAAS,UAAU,WAAa,YAAe,QAAQ,UAAU,aAAe,UAAU,YAAa,UAAU,YAAe,UAAU,WAAa,UAAU,YAAe,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,YAAa,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Aa,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,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,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,WA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Aa,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,WA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AY,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,WA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Aa,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,UA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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;AAAA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AAE;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,IAAI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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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,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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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,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M,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,UAA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,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,MA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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,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,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,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EAAC;AACtf,SAAO;AAAA,IACN,OAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,IACA,KAAK;AAAA,MACJ,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAC1B,MAAM,EAAC,IAAG,GAAE,IAAG,EAAC;AAAA,IACjB;AAAA,EACD;AACD,EAAE;AAEFA,MAAK,WAAW,SAAS,KAAK8B,OAAM,QAAQ,MAAM,OAAO,KACzD;AACC,MAAI,MAAM,IAAI,WAAWA,OAAM,MAAM;AAAI,YAAQ;AACjD,MAAI,MAAM,CAAC;AAEX,MAAG,IAAI,MAAO,KAAI,MAAM,OAAO,KAAK,GAAE,KAAK,SAAO,GAAE,qBAAqB;AACzE,WAAQ,IAAE,GAAG,IAAE,KAAK,KACpB;AACC,QAAI,MAAO,IAAI,WAAWA,OAAM,MAAM;AAAM,cAAQ;AACpD,QAAI,OAAO,IAAI,WAAWA,OAAM,MAAM;AAAM,cAAQ;AACpD,QAAI,MAAO,IAAI,SAAWA,OAAM,MAAM;AAAM,cAAQ;AACpD,QAAI,OAAO,IAAI,SAAWA,OAAM,MAAM;AAAM,cAAQ;AAEpD,QAAI,MAAM,CAAC;AAEX,QAAG,QAAO,KAAK,QAAM,GAAG;AAAG,UAAI,KAAI,MAAI,IAAI,SAAO,IAAI;AAAQ,UAAG,KAAG,MAAIA,MAAK,OAAO,WAAY,OAAIA,MAAK,OAAO,aAAW;AAAK,YAAM,IAAI,WAAWA,MAAK,QAAQ,IAAI,GAAG;AAAA,IAAI;AAC7K,QAAG,QAAO,GAAG;AAAG,UAAI,KAAM,MAAI,IAAI,SAAO,IAAI,MAAOb,KAAEa,MAAK,EAAE,GAAG,MAAI,KAAK,IAAI,GAAG,KAAK,IAAI,MAAI,GAAEA,MAAK,SAAO,EAAE,CAAC;AAC1G,UAAGb,KAAE,OAAO,OAAK,EAAG,KAAI,KAAM,IAAI,UAAUa,OAAM,IAAI,GAAG,CAAE;AAAA,UACjD,OAAM,IAAI,WAAWA,MAAK,QAAQ,IAAI,GAAG;AAAA,IAAI;AAC3D,QAAG,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,WAAWA,QAAO,MAAI,IAAI,SAAO,IAAI,QAAM,IAAE,CAAC,CAAC;AAAA,IAAI;AACzG,QAAG,QAAO,KACP,QAAM,IAAI;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,SAAWA,QAAO,MAAI,IAAI,SAAO,IAAI,QAAM,IAAE,CAAC,CAAC;AAAA,IAAI;AACzG,QAAG,QAAO,KAAK,QAAM,IAAI;AACxB,UAAI,KAAK,QAAM,IAAI,IAAI,WAAW,IAAI;AACtC,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,CAAC,GAAGA,OAAM,OAAK,IAAE,CAAC,GAAG,GAAGA,OAAK,OAAK,IAAE,IAAE,CAAC,CAAC,CAAC;AAAA,IAAI;AAChF,QAAG,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,UAAWA,QAAO,MAAI,IAAI,SAAO,IAAI,QAAM,IAAE,CAAC,CAAC;AAAA,IAAI;AACzG,QAAG,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,QAAWA,QAAO,MAAI,IAAI,SAAO,IAAI,QAAM,IAAE,CAAC,CAAC;AAAA,IAAI;AACzG,QAAG,QAAM,IAAI;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,UAAWA,OAAM,OAAK,IAAE,CAAC,CAAC;AAAA,IAAI;AACpF,QAAG,QAAM,IAAI;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,KAAK,IAAI,WAAWA,OAAM,OAAK,IAAE,CAAC,CAAC;AAAA,IAAI;AAEpF,QAAG,OAAK,KAAK,IAAI,UAAQ,GAAG;AAAG,UAAI,KAAK,2BAA2B,MAAM,QAAO,GAAG;AAAI,UAAG,KAAG,EAAE;AAAS;AAAA,IAAW;AACnH,QAAG,IAAI,MAAO,KAAI,MAAM,OAAO,KAAK,GAAG,KAAK,MAAM9B,MAAK,KAAK,GAAG,GAAG,GAAG;AAErE,QAAI,MAAI,GAAG,IAAI;AAEf,QAAG,OAAK,OAAO,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG,aAAa;AAAA,IAAG,WACtD,OAAK,OAAO,OAAK,SAAS,OAAK,SAAU,OAAK,SAAS,IAAI,WAAW8B,OAAK,IAAI,SAAS,KAAI,CAAC,CAAC,IAAE,OAAS,OAAK,OAAO;AAC5H,UAAI,OAAO,OAAK,QAAQ,CAAC,IAAI,SAAS,KAAI,CAAC,CAAC,IAAI;AAChD,UAAI,QAAQ,CAAC;AACb,eAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,IAAK,CAAA9B,MAAK,SAAS,KAAK8B,OAAM,KAAK,CAAC,GAAG,OAAO,QAAM,GAAG,GAAG;AACtF,UAAG,OAAO,IAAK,KAAI,SAAS;AAC5B,UAAG,OAAK,MAAO,KAAI,UAAU,MAAM,CAAC;AACpC,UAAG,OAAK,MAAO,KAAI,UAAU,MAAM,CAAC;AACpC,UAAG,OAAK,MAAO,KAAI,UAAU,MAAM,CAAC;AACpC,UAAG,OAAK,MAAO,KAAI,UAAU,MAAM,CAAC;AAAA,IACrC;AACA,QAAG,OAAK,SAAS,IAAI,SAAS;AAC7B,UAAI,KAAK;AAET,UAAG,IAAI,UAAU,IAAG,GAAE,CAAC,KAAG,QAAU,KAAI,YAAY9B,MAAK,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;AAAA,eACjF,IAAI,UAAU,IAAG,GAAE,CAAC,KAAG,WAAW,IAAI,UAAU,IAAG,GAAE,CAAC,KAAG,aAAa;AAC7E,YAAI,OAAO,CAAC,MAAK,MAAK,MAAK,MAAK,IAAI;AACpC,YAAI,SAAS,CAAC;AAAI,QAAAA,MAAK,SAAS,KAAK,IAAI,GAAG,CAAC,KAAG,KAAK,KAAM,GAAG,CAAC,KAAG,KAAK,KAAK,GAAI,QAAQ,QAAM,GAAG,GAAG;AACpG,YAAI,MAAM,IAAI,YAAY,OAAO,IAAI;AACrC,iBAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAAK;AAChC,cAAIc,KAAE,MAAI,KAAK,CAAC;AAAI,cAAG,IAAIA,EAAC,KAAG,KAAM;AACrC,UAAAd,MAAK,SAAS,KAAK,IAAI,IAAIc,EAAC,EAAE,CAAC,GAAG,QAAQ,QAAM,GAAG,GAAG;AACtD,cAAIA,EAAC,IAAI,OAAO,IAAI;AAAA,QACrB;AACA,YAAG,IAAI,QAAQ,GAAG;AACjB,UAAAd,MAAK,SAAS,KAAK,IAAI,QAAQ,GAAG,GAAG,QAAQ,QAAM,GAAG,GAAG;AACzD,cAAI,QAAQ,IAAE,OAAO,IAAI;AAAA,QAC1B;AAAA,MACD,WACQ,IAAI,WAAW8B,OAAK,IAAI,IAAE,OAAO,IAAI,WAAWA,OAAK,OAAK,CAAC,KAAG,IAAG;AACxE,YAAI,SAAO,CAAC;AAAI,QAAA9B,MAAK,SAAS,KAAK8B,OAAM,MAAM,QAAQ,QAAM,GAAG,GAAG;AACnE,YAAI,YAAY,OAAO,CAAC;AAAA,MACzB;AAAA,IACD;AAAA,EACD;AACA,OAAK,KAAK,GAAG;AACb,MAAG,IAAI,MAAO,KAAI,MAAM,OAAO,KAAK,GAAE,oBAAoB;AAC1D,SAAO;AACR;AAEA9B,MAAK,YAAY,SAAS,KAAK,OAAO8B,OAAM,QAAQ,KACpD;AACC,MAAIgB,QAAO,OAAO,KAAK,GAAG,GAAG,OAAKA,MAAK;AAAS,MAAG,IAAI,SAAS,EAAG;AAAS,MAAG,IAAI,SAAS,EAAG;AAC/F,MAAI,YAAYhB,OAAM,QAAQ,IAAI;AAAI,YAAQ;AAE9C,MAAI,OAAO,SAAS,OAAK,KAAK;AAE9B,WAAQ,KAAG,GAAG,KAAGgB,MAAK,QAAQ,MAC9B;AACC,QAAIC,OAAMD,MAAK,EAAE;AAAI,QAAGC,QAAK,YAAYA,QAAK,SAAU;AACxD,QAAGA,QAAK,UAAW,CAAAA,OAAI;AAAW,QAAGA,QAAK,UAAW,CAAAA,OAAI;AACzD,QAAI,MAAM,SAASA,KAAI,MAAM,CAAC,CAAC,GAAG,OAAO,MAAM,KAAK,GAAG;AAAI,QAAG,QAAM,KAAM,QAAK,MAAM,KAAK,GAAG;AAC7F,QAAG,QAAM,QAAQ,QAAM,EAAG,OAAM,IAAI,MAAM,0BAAwB,GAAG;AAErE,QAAIR,OAAM,IAAIQ,IAAG;AACjB,QAAG,OAAK,OAAO;AACd,UAAI,OAAO/C,MAAK,UAAU,KAAK,OAAO8B,OAAM,MAAM,IAAI,SAAS,CAAC;AAChE,MAAAS,OAAM,CAAC,IAAI;AAAI,aAAO,KAAK,CAAC;AAAA,IAC7B;AACA,QAAG,OAAK,OAAO;AACd,UAAI,OAAOvC,MAAK,UAAU,KAAKA,MAAK,OAAO,KAAK8B,OAAM,MAAM,IAAI,SAAS,CAAC;AAC1E,MAAAS,OAAM,CAAC,IAAI;AAAI,aAAO,KAAK,CAAC;AAAA,IAC7B;AACA,QAAG,QAAM,EAAG,CAAAA,OAAIA,KAAI,CAAC,IAAE;AAAW,QAAI,MAAMA,KAAI;AAChD,QAAI,YAAYT,OAAM,QAAQ,GAAI;AAAI,cAAQ;AAC9C,QAAI,YAAYA,OAAM,QAAQ,IAAI;AAAI,cAAQ;AAC9C,QAAI,UAAYA,OAAM,QAAQ,GAAI;AAAI,cAAQ;AAE9C,QAAI,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,IAAI;AAC5D,QAAI,OAAO;AACX,QAAG,OAAK,GAAG;AAAG,UAAI,UAAUA,OAAM,QAAQ,IAAI;AAAI,aAAK;AAAA,IAAO;AAE9D,QAAQ,QAAO,KAAK,QAAM,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,CAAAA,MAAK,OAAK,CAAC,IAAIS,KAAI,CAAC;AAAA,IAAI,WACzE,QAAO,GAAG;AAAG,UAAI,WAAWT,OAAM,MAAMS,IAAG;AAAA,IAAK,WAChD,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,YAAYT,OAAM,OAAK,IAAE,GAAGS,KAAI,CAAC,CAAC;AAAA,IAAM,WAClF,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,UAAYT,OAAM,OAAK,IAAE,GAAGS,KAAI,CAAC,CAAC;AAAA,IAAM,WAClF,QAAO,KAAK,QAAM,IAAI;AAC7B,UAAI,KAAK,QAAM,IAAE,IAAI,YAAU,IAAI;AACnC,eAAQ,IAAE,GAAG,IAAE,KAAK,KAAK;AACzB,YAAI,IAAEA,KAAI,CAAC,GAAE,KAAG,EAAE,CAAC,GAAES,MAAG,EAAE,CAAC;AAAI,YAAG,MAAI,KAAM,OAAM;AAAM,WAAGlB,OAAM,OAAK,IAAE,GAAG,EAAE;AAAI,WAAGA,OAAM,OAAK,IAAE,IAAE,GAAGkB,GAAE;AAAA,MAAI;AAAA,IAAI,WACzG,QAAO,GAAG;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,SAAYlB,OAAM,OAAK,IAAE,GAAGS,KAAI,CAAC,CAAC;AAAA,IAAM,WAClF,QAAM,IAAI;AAAG,eAAQ,IAAE,GAAG,IAAE,KAAK,IAAK,KAAI,YAAYT,OAAM,OAAK,IAAE,GAAGS,KAAI,CAAC,CAAC;AAAA,IAAM,MACrF,OAAM;AAEX,QAAG,OAAK,GAAG;AAAG,cAAS,OAAK;AAAK,cAAQ;AAAA,IAAO;AAChD,cAAU;AAAA,EACX;AACA,SAAO,CAAC,QAAQ,IAAI;AACrB;AAEAvC,MAAK,UAAU,SAAS,KAAK,KAC7B;AACC,WAAS,MAAMa,IAAG;AAAG,WAAOA,KAAI,WAAY,QAAQA,KAAI,QAAQ,KAAK,IAAIA,IAAG,IAAM,GAAG,IAAI;AAAA,EAAQ;AAGjG,MAAI,IAAI,IAAI,OAAO,IAAI,IAAI,QAAQ,OAAO,IAAE,GAAG,QAAQ,OAAK,GAAGiB,QAAO,IAAI;AAC1E,MAAI,MAAM,IAAI,WAAW,OAAK,CAAC;AAG/B,MAAI,OAAQ,IAAI,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,IAAG,GAAI,MAAO,IAAI,MAAM,IAAE,KAAK,IAAI,IAAG,IAAI,MAAM,EAAE,CAAC,CAAC,IAAE;AAC7F,MAAG,IAAI,MAAM,KAAG,QAAQ,OAAK,EAAG,QAAK;AAErC,MAAI,QAAQ,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAK,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,SAAS,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,IAAI;AAC/F,MAAI,OAAQ,IAAI,MAAM,IAAE,IAAI,MAAM,EAAE,CAAC,IAAI;AAAO,MAAG,QAAM,KAAK,OAAK,MAAM,QAAM,EAAG,OAAM;AACxF,MAAI,MAAM,KAAK,KAAK,QAAM,MAAI,IAAE,CAAC;AAIjC,MAAG,OAAO;AAAA,EAAC,WACH,QAAM,GACd;AACC,UAAM,IAAE;AACR,aAAQH,KAAE,GAAGA,KAAE,GAAGA,MAAK;AACtB,UAAI,MAAMA,KAAE,KAAK,KAAKA,KAAE;AACxB,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAKG,MAAK,OAAK,KAAG,EAAE,KAAK,KAAK,IAAE,KAAM;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,KAAI,IAAE,MAAI;AAAM,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAC9J,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAKA,MAAK,OAAK,KAAG,EAAE,KAAK,IAAE,KAAG,IAAE,KAAK;AAAK,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,KAAG,KAAG,MAAK;AAAK,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAC9J,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAGA,MAAK,MAAI,CAAC;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAE,MAAI;AAAK,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAChI,UAAG,OAAK,GAAI,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,IAAE,MAAK,IAAE,GAAI,KAAIA,MAAK,IAAE,CAAC,KAAG,IAAGA,MAAK,CAAC;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAG,KAAK,IAAI,KAAI,MAAK,CAAC,EAAE,KAAG,IAAK;AAAI,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAAA,IAClL;AAAA,EACD,WACQ,QAAM,GACd;AACC,QAAG,OAAK,KAAM,OAAI,IAAE;AACpB,QAAI,OAAQA,MAAK,SAAO,MAAI,IAAK,IAAI,aAAaA,MAAK,MAAM,IAAI;AAEjE,aAAQH,KAAE,GAAGA,KAAE,GAAGA,MAAK;AACtB,UAAI,MAAMA,KAAE,KAAK,KAAKA,KAAE;AACxB,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAKG,MAAK,OAAK,KAAG,EAAE,KAAK,KAAK,IAAE,KAAK;AAAK,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAG,KAAI;AAAM,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAC3J,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAKA,MAAK,OAAK,KAAG,EAAE,KAAK,IAAE,KAAG,IAAE,KAAK;AAAK,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAG,KAAK;AAAK,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAC3J,UAAG,OAAM,EAAG,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAGA,MAAK,MAAI,IAAE,KAAK;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAM;AAAK,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AACtI,UAAG,OAAK,GAAI,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,IAAE,MAAK,IAAE,GAAI,KAAIA,MAAK,IAAE,CAAC,KAAG,IAAGA,MAAK,CAAC;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAG,KAAK,IAAI,KAAI,CAAC,EAAE,KAAG,IAAI;AAAI,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAC3K,UAAG,OAAK,GAAI,UAAQ,IAAE,GAAG,IAAE,GAAG,KAAK;AAAG,YAAI,KAAI,KAAG,KAAI,GAAG,KAAG,QAAM,KAAG,GAAG,KAAG,IAAI,CAAC;AAAI,YAAI,EAAE,IAAE,IAAI,KAAG,CAAC,IAAE,IAAI,KAAG,CAAC,IAAG,CAAC,EAAE,MAAI,MAAI;AAAM,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AAAA,IACpJ;AAAA,EACD,WACQ,QAAM,GACd;AACC,QAAG,OAAM,GACT;AACC,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,IAAE,CAAC,IAAE,IAAI,IAAE,IAAE,CAAC,IAAE,IAAI,IAAE,IAAE,CAAC,IAAEA,MAAK,CAAC;AAAI,YAAI,IAAE,IAAE,CAAC,IAAE;AAAA,MAAM;AACpG,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE;AAAQ,YAAI,EAAE,IAAEA,MAAK,EAAE;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAE;AAAA,MAAQ;AACvJ,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE;AAAQ,YAAI,EAAE,IAAEA,MAAK,EAAE;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAA,MAAM;AAAA,IAC/J,WACQ,OAAK,IAAG;AACf,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE,IAAE;AAAI,YAAI,EAAE,IAAEA,MAAK,EAAE;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAA,MAAM;AAC5J,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE,IAAE;AAAI,YAAI,EAAE,IAAEA,MAAK,EAAE;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAEA,MAAK,KAAG,CAAC;AAAI,YAAI,KAAG,CAAC,IAAE;AAAA,MAAe;AAAA,IAC7J,WACQ,OAAK,IAAG;AACf,UAAI,MAAM,IAAI,aAAaA,MAAK,MAAM;AAEtC,UAAI,MAAM;AAAI,eAAQ,IAAE,GAAG,IAAE,IAAI,QAAQ,IAAK,OAAM,KAAK,IAAI,KAAI,IAAI,CAAC,CAAC;AACvE,UAAG,MAAI,EAAG,UAAQ,IAAE,GAAG,IAAEA,MAAK,QAAQ,KAAG,GAAG;AAAG,YAAI3B,KAAE2B,MAAK,CAAC;AAAI,QAAAA,MAAK,CAAC,IAAEA,MAAK,IAAE,CAAC;AAAI,QAAAA,MAAK,IAAE,CAAC,IAAE3B;AAAI,QAAAA,KAAE2B,MAAK,IAAE,CAAC;AAAI,QAAAA,MAAK,IAAE,CAAC,IAAEA,MAAK,IAAE,CAAC;AAAI,QAAAA,MAAK,IAAE,CAAC,IAAE3B;AAAA,MAAI;AAEnJ,UAAI,OAAO,CAAC;AAAI,eAAQ,IAAE,GAAG,IAAE,OAAO,IAAK,MAAK,KAAK,MAAM,IAAE,KAAK,CAAC;AACnE,eAAQ,IAAE,GAAG,IAAE,IAAI,QAAQ,KAAK;AAAG,YAAI,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;AAAI,YAAI,CAAC,IAAI,KAAK,CAAC,EAAE,MAAI,KAAG,MAAM;AAAA,MAAI;AAEjH,UAAG,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE;AAC3D,YAAI,EAAE,IAAE,CAAC,EAAE,MAAI,IAAI,EAAE,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,MAAI,IAAI,KAAG,CAAC,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,MAAI,IAAI,KAAG,CAAC,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE;AAAA,MAAe;AAAA,eACpH,SAAO,EAAG,UAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AAAG,YAAI,KAAG,KAAG,GAAG,KAAG,IAAE;AAChE,YAAI,EAAE,IAAE,CAAC,EAAE,MAAI,IAAI,EAAE,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,MAAI,IAAI,KAAG,CAAC,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,MAAI,IAAI,KAAG,CAAC,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,MAAI,IAAI,KAAG,CAAC,IAAE;AAAA,MAAgB;AAAA,UACzI,OAAM;AAAA,IACZ,MACK,OAAM;AAAA,EACZ,WACQ,QAAM,GACd;AACC,QAAI8C,OAAM,IAAI,MAAM;AACpB,QAAI,KAAK,KAAG;AAEZ,QAAI,QAAQ,OAAK,KAAK,QAAM,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,KAAG;AAEhE,aAAQtB,KAAE,GAAGA,KAAE,GAAGA;AACjB,eAAQd,KAAE,GAAGA,KAAE,GAAGA,MAAK;AACtB,YAAI,IAAIc,KAAE,IAAEd;AACZ,YAAI,KAAG,KAAG,GAAGqC,MAAG;AAChB,YAAI,MAAMvB,KAAE;AACZ,YAAG,OAAO;AAAA,QAAC,WACH,OAAK,EAAG,CAAAuB,MAAIpB,MAAK,OAAKjB,OAAI,EAAE,MAAK,KAAKA,KAAE,KAAM;AAAA,iBAC9C,OAAK,EAAG,CAAAqC,MAAIpB,MAAK,OAAKjB,OAAI,EAAE,MAAK,IAAE,KAAGA,KAAE,KAAM;AAAA,iBAC9C,OAAK,EAAG,CAAAqC,MAAIpB,MAAK,OAAKjB,OAAI,EAAE,MAAK,IAAE,KAAGA,KAAE,KAAK;AAAA,iBAC7C,OAAK,EAAG,CAAAqC,MAAIpB,MAAK,MAAIjB,KAAE,KAAK;AAAA,YAC/B,OAAM;AACX,YAAI,EAAE,IAAGoC,KAAIC,GAAE,KAAG;AAAK,YAAI,KAAG,CAAC,IAAGD,KAAI,KAAGC,GAAE,KAAG;AAAK,YAAI,KAAG,CAAC,IAAGD,KAAI,KAAG,KAAGC,GAAE,KAAG;AAAK,YAAI,KAAG,CAAC,IAAE,QAAQpB,MAAK,MAAIjB,KAAE,QAAM,CAAC,IAAI;AAAA,MAC3H;AAAA,EACF,WACQ,QAAM,GACd;AACC,QAAI,WAAW,QAAM,IAAI,IAAI;AAC7B,aAAQ,IAAE,GAAG,IAAE,MAAM,KAAK;AACzB,UAAI,KAAG,KAAG,GAAG,KAAG,IAAE;AAElB,UAAG,OAAO,MAAM;AACf,YAAIH,KAAEoB,MAAK,EAAE,GAAG,IAAEA,MAAK,KAAG,CAAC,GAAGZ,KAAEY,MAAK,KAAG,CAAC,GAAG,IAAEA,MAAK,KAAG,CAAC;AACvD,YAAIb,KAAI,KAAK,EAAE,UAAU,CAACP,MAAG,IAAE,MAAM,KAAG,IAAE,MAAMQ,MAAG,IAAE,MAAM,KAAG,IAAE,IAAI,CAAC;AACrE,YAAI,EAAE,IAAI,CAAC,EAAE,MAAI,MAAID,GAAE,CAAC;AAAK,YAAI,KAAG,CAAC,IAAI,CAAC,EAAE,MAAI,MAAIA,GAAE,CAAC;AAAK,YAAI,KAAG,CAAC,IAAI,CAAC,EAAE,MAAI,MAAIA,GAAE,CAAC;AAAA,MACvF,OACK;AACJ,YAAIP,KAAE,MAAIoB,MAAK,EAAE,GAAG,IAAE,MAAIA,MAAK,KAAG,CAAC,GAAGZ,KAAE,MAAIY,MAAK,KAAG,CAAC,GAAG,KAAG,MAAIA,MAAK,KAAG,CAAC,MAAI,IAAE;AAC9E,YAAI,EAAE,IAAE,CAAC,EAAEpB,KAAE,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAE,IAAE,IAAE;AAAO,YAAI,KAAG,CAAC,IAAE,CAAC,EAAEQ,KAAE,IAAE;AAAA,MAChE;AAEA,UAAI,KAAG,CAAC,IAAE,OAAK,IAAE,YAAUY,MAAK,KAAG,CAAC,IAAE;AAAA,IACvC;AAAA,EACD,WACQ,QAAM,KAAK,IAAI,MAAM,GAAG;AAC/B,QAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AACvB,aAAQH,KAAE,GAAGA,KAAE,GAAGA,MAAG,KAAK;AACzB,UAAI,IAAGA,KAAE,GAAI,MAAM,MAAI;AAEvB,eAAQ,IAAE,GAAG,IAAE,KAAK,KAAK;AACxB,YAAI,KAAK,KAAG,IAAE,IAAI,KAAK,IAAE,IAAE,KAAG,MAAI;AAClC,YAAIT,KAAIY,MAAK,MAAI,IAAE,EAAE,GAAG,KAAGA,MAAK,KAAG,CAAC,IAAE,KAAK,KAAGA,MAAK,KAAG,CAAC,IAAE;AAEzD,YAAI,IAAIZ,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM;AAC7C,YAAIH,KAAIG,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,QAAS,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAChG,YAAIQ,KAAIR,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;AAElD,YAAI,EAAI,IAAE,KAAK,IAAI,GAAE,KAAK,IAAI,KAAI,CAAC,CAAC;AACpC,YAAI,KAAG,CAAC,IAAE,KAAK,IAAI,GAAE,KAAK,IAAI,KAAIH,EAAC,CAAC;AACpC,YAAI,KAAG,CAAC,IAAE,KAAK,IAAI,GAAE,KAAK,IAAI,KAAIW,EAAC,CAAC;AACpC,YAAI,KAAG,CAAC,IAAE;AAAA,MACX;AAAA,IACD;AAAA,EACD,WACQ,QAAM,OAAO;AAEpB,aAAQC,KAAE,GAAGA,KAAE,GAAGA;AACjB,eAAQd,KAAE,GAAGA,KAAE,GAAGA,MAAK;AACtB,YAAI,MAAMc,KAAE,IAAEd,MAAG,GAAG,MAAIc,KAAE,IAAEd,MAAG;AAC/B,YAAI,IAAMiB,MAAK,KAAG,CAAC,KAAG,IAAKA,MAAK,EAAE;AAElC,YAAI,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,MAAM,EAAE;AACxC,YAAI,KAAKA,MAAK,KAAG,CAAC,IAAI,OAAO;AAC7B,YAAI,KAAKA,MAAK,KAAG,CAAC,IAAI,OAAO;AAG7B,YAAI,KAAM,IAAI,KAAM,IAAI,IAAI,KAAK,IAAI;AACrC,YAAI,KAAM,IAAI,KAAM,IAAI,IAAI,KAAK,IAAI;AACrC,YAAI,KAAK;AAGT,YAAIlB,KAAK,KAAG,KAAI,IAAIM,KAAI,IAAIG,MAAK,IAAE,KAAG,MAAI,KAAG;AAG7C,YAAI,IAAK,OAAMT,KAAG,QAAMM,KAAG,QAAMG;AACjC,YAAIN,KAAI,SAAOH,KAAG,QAAMM,KAAG,QAAMG;AACjC,YAAIK,KAAK,QAAMd,KAAG,QAAMM,KAAG,QAAMG;AAEjC,YAAI,EAAI,IAAI,MAAM,KAAK,IAAI,GAAE,CAAC,CAAC,IAAE;AACjC,YAAI,KAAG,CAAC,IAAI,MAAM,KAAK,IAAIN,IAAE,CAAC,CAAC,IAAE;AACjC,YAAI,KAAG,CAAC,IAAI,MAAM,KAAK,IAAIW,IAAE,CAAC,CAAC,IAAE;AACjC,YAAI,KAAG,CAAC,IAAI;AAAA,MACb;AAAA,EACF,MACK,KAAI,yCAAuC,IAAI;AACpD,SAAO;AACR;AAEA1B,MAAK,aAAa,SAAS,MAC3B;AACC,MAAG,QAAM,KAAM,QAAO,SAAS,qBAAqB,KAAK;AACzD,MAAI,OAAO,CAAC,OAAM,QAAO,OAAM,OAAM,KAAK;AAC1C,WAAS,IAAE,GAAG,IAAE,KAAK,QAAQ,KAC7B;AACC,QAAI,MAAI,KAAK,CAAC,GAAG,MAAI,IAAI,aAAa,KAAK;AAAI,QAAG,OAAK,KAAM;AAC7D,QAAI,OAAK,IAAI,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AAC1C,QAAG,KAAK,QAAQ,IAAI,KAAG,GAAI;AAC3B,QAAI,MAAM,IAAI,eAAe;AAAI,IAAAA,MAAK,MAAM,KAAK,GAAG;AAAI,IAAAA,MAAK,MAAM,KAAK,GAAG;AAC3E,QAAI,KAAK,OAAO,GAAG;AAAI,QAAI,eAAe;AAC1C,QAAI,SAASA,MAAK;AAAc,QAAI,KAAK;AAAA,EAC1C;AACD;AAEAA,MAAK,QAAQ,CAAC;AAAIA,MAAK,QAAQ,CAAC;AAChCA,MAAK,aAAa,SAAS,GAAG;AAC7B,MAAI,MAAMA,MAAK,MAAM,QAAQ,EAAE,MAAM,GAAG,MAAMA,MAAK,MAAM,GAAG;AAC5D,EAAAA,MAAK,MAAM,OAAO,KAAI,CAAC;AAAI,EAAAA,MAAK,MAAM,OAAO,KAAI,CAAC;AAElD,MAAI,aAAa,OAAMA,MAAK,YAAY,EAAE,OAAO,QAAQ,CAAC;AAC3D;AAEAA,MAAK,cAAc,SAAS,MAAM;AACjC,MAAI,OAAOA,MAAK,OAAO,IAAI;AAC3B,MAAI,OAAO,MAAM,KAAG,GAAG,OAAK,KAAK,CAAC;AAAI,MAAG,KAAK,CAAC,EAAE,OAAQ,QAAO,KAAK,OAAO,KAAK,CAAC,EAAE,MAAM;AAC1F,WAAQ,IAAE,GAAG,IAAE,KAAK,QAAQ,KAAK;AAChC,QAAI,MAAM,KAAK,CAAC;AAChB,QAAG,IAAI,MAAM,KAAG,QAAQ,IAAI,MAAM,EAAE,SAAO,EAAG;AAC9C,QAAI,KAAK,IAAI,MAAM,IAAE,IAAI,MAAM;AAC/B,QAAG,KAAG,IAAI;AAAG,WAAG;AAAK,aAAK;AAAA,IAAM;AAAA,EACjC;AACA,EAAAA,MAAK,YAAY,MAAM,MAAM,IAAI;AACjC,MAAI,OAAOA,MAAK,QAAQ,IAAI,GAAG,IAAE,KAAK,OAAO,IAAE,KAAK;AAEpD,MAAI,MAAM,SAAS,cAAc,QAAQ;AAAI,MAAI,QAAM;AAAI,MAAI,SAAO;AACtE,MAAI,MAAM,IAAI,WAAW,IAAI;AAC7B,MAAI,OAAO,IAAI,UAAU,IAAI,kBAAkB,KAAK,MAAM,GAAE,GAAE,CAAC;AAC/D,MAAI,aAAa,MAAK,GAAE,CAAC;AACzB,SAAO,IAAI,UAAU;AACtB;AAGAA,MAAK,SACL;AAAA,EACC,UAAa,SAAS8B,OAAM,GAAG;AAAG,WAAMA,MAAK,CAAC,KAAG,EAAG;AAAM,WAAO;AAAA,EAAI;AAAA,EACrE,YAAa,SAAS,MAAM5B,IAAG;AAAG,WAAQ,KAAKA,EAAC,KAAI,IAAM,KAAKA,KAAE,CAAC;AAAA,EAAI;AAAA,EACtE,WAAa,SAAS,MAAMA,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAiB,WAAOF,MAAK,OAAQ,IAAI,CAAC;AAAA,EAAI;AAAA,EACtI,SAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,WAAOF,MAAK,OAAQ,IAAI,CAAC;AAAA,EAAI;AAAA,EAC3J,UAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAC3J,WAAa,SAAS,MAAME,IAAGkB,IAAG;AAAG,QAAI,IAAI;AAAM,aAAQ,IAAE,GAAG,IAAEA,IAAG,IAAK,MAAK,OAAO,aAAa,KAAKlB,KAAE,CAAC,CAAC;AAAK,WAAO;AAAA,EAAG;AAAA,EAC3H,WAAa,SAAS,MAAMA,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAK,CAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,IAAE,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAC/H,YAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAK,CAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,IAAE,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAE/H,aAAa,SAAS,MAAME,IAAGI,IAAG;AAAG,SAAKJ,EAAC,IAAKI,MAAI,IAAG;AAAM,SAAKJ,KAAE,CAAC,IAAKI,KAAE;AAAA,EAAM;AAAA,EAClF,UAAa,SAAS,MAAMJ,IAAGI,IAAG;AAAG,QAAIE,KAAER,MAAK,OAAO;AAAM,IAAAA,MAAK,OAAO,IAAI,CAAC,IAAEM;AAAI,SAAKJ,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAA,EAAI;AAAA,EACxJ,WAAa,SAAS,MAAMN,IAAGI,IAAG;AAAG,SAAKJ,EAAC,IAAKI,MAAG,KAAI;AAAM,SAAKJ,KAAE,CAAC,IAAKI,MAAG,KAAI;AAAM,SAAKJ,KAAE,CAAC,IAAKI,MAAG,IAAG;AAAM,SAAKJ,KAAE,CAAC,IAAKI,MAAG,IAAG;AAAA,EAAM;AAAA,EACzI,YAAa,SAAS,MAAMJ,IAAG,GAAG;AAAG,aAAQ,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAM,MAAKA,KAAE,CAAC,IAAI,EAAE,WAAW,CAAC;AAAA,EAAI;AAAA,EACtG,aAAa,SAAS,MAAMA,IAAGI,IAC/B;AACC,IAAAN,MAAK,OAAO,KAAK,CAAC,IAAIM;AACtB,aAAS,IAAI,GAAG,IAAI,GAAG,IAAK,MAAKJ,KAAI,CAAC,IAAIF,MAAK,OAAO,IAAI,IAAI,CAAC;AAAA,EAChE;AACD;AACAA,MAAK,OAAO,MAAO,IAAI,WAAa,CAAC;AACrCA,MAAK,OAAO,MAAO,IAAI,WAAaA,MAAK,OAAO,IAAI,MAAM;AAC1DA,MAAK,OAAO,MAAO,IAAI,WAAaA,MAAK,OAAO,IAAI,MAAM;AAC1DA,MAAK,OAAO,OAAO,IAAI,YAAaA,MAAK,OAAO,IAAI,MAAM;AAC1DA,MAAK,OAAO,OAAO,IAAI,aAAaA,MAAK,OAAO,IAAI,MAAM;AAC1DA,MAAK,OAAO,OAAO,IAAI,aAAaA,MAAK,OAAO,IAAI,MAAM;AAE1DA,MAAK,SACL;AAAA,EACC,UAAaA,MAAK,OAAO;AAAA,EACzB,YAAa,SAAS,MAAME,IAAG;AAAG,WAAQ,KAAKA,KAAE,CAAC,KAAI,IAAM,KAAKA,EAAC;AAAA,EAAI;AAAA,EACtE,WAAa,SAAS,MAAMA,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAiB,WAAOF,MAAK,OAAQ,IAAI,CAAC;AAAA,EAAI;AAAA,EACtI,SAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,WAAOF,MAAK,OAAQ,IAAI,CAAC;AAAA,EAAI;AAAA,EAC3J,UAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,IAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,IAAAM,GAAE,CAAC,IAAE,KAAKN,KAAE,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAC3J,WAAaA,MAAK,OAAO;AAAA,EACzB,WAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAK,CAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAI,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAC/H,YAAa,SAAS,MAAME,IAAG;AAAG,QAAIM,KAAER,MAAK,OAAO;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,IAAK,CAAAQ,GAAE,CAAC,IAAE,KAAKN,KAAI,CAAC;AAAI,WAAOF,MAAK,OAAO,KAAK,CAAC;AAAA,EAAI;AAAA,EAE/H,aAAa,SAAS,MAAME,IAAGI,IAAG;AAAG,SAAKJ,EAAC,IAAKI,KAAG;AAAM,SAAKJ,KAAE,CAAC,IAAMI,MAAG,IAAG;AAAA,EAAM;AAAA,EACnF,UAAa,SAAS,MAAMJ,IAAGI,IAAG;AAAG,QAAIE,KAAER,MAAK,OAAO;AAAM,IAAAA,MAAK,OAAO,IAAI,CAAC,IAAEM;AAAI,SAAKJ,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAI,SAAKN,KAAE,CAAC,IAAEM,GAAE,CAAC;AAAA,EAAI;AAAA,EACxJ,WAAa,SAAS,MAAMN,IAAGI,IAAG;AAAG,SAAKJ,EAAC,IAAKI,OAAI,IAAG;AAAM,SAAKJ,KAAE,CAAC,IAAKI,OAAI,IAAG;AAAM,SAAKJ,KAAE,CAAC,IAAKI,OAAI,KAAI;AAAM,SAAKJ,KAAE,CAAC,IAAKI,OAAI,KAAI;AAAA,EAAM;AAAA,EAC7I,YAAaN,MAAK,OAAO;AAC1B;AACAA,MAAK,YAAY,SAAS,IAAI,IAAI,IAAI0B,IAAG,GAAG,GAAG,MAAM,MACrD;AAEC,MAAI,OAAO,KAAK,IAAI,IAAI,IAAE,IAAI;AAC9B,MAAI,OAAO,KAAK,IAAI,IAAI,IAAE,IAAI;AAC9B,WAAQC,KAAE,GAAGA,KAAE,MAAMA,MACrB;AACC,QAAI,OAAO,OAAKA,MAAG,IAAE;AACrB,QAAI,MAAMA,KAAE;AACZ,aAAQd,KAAE,GAAGA,KAAE,MAAMA,KAAK,CAAAa,GAAE,MAAIb,EAAC,IAAI,GAAG,MAAIA,EAAC;AAAA,EAC9C;AACD;AAEAb,MAAK,cAAY,WAAU;AAAC,MAAI,IAAE,CAAC;AAAE,IAAE,IAAE,CAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,QAAIgB,KAAE,YAAW,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAEX,KAAE,GAAEO,KAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,GAAEF;AACtH,QAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,EAAE,QAAO,IAAE,IAAE,IAAIM,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,GAAEV,KAAE,EAAE,GAAEkB,KAAE,EAAE,GAAEJ,KAAE,EAAE,GAAE,IAAE,EAAE,GAAED,KAAE,EAAE,GAAE,IAAE,EAAE,GAAEO,KAAE,EAAE,GAAEL,KAAE,KAAG;AACjG,QAAGA,GAAE,KAAE,IAAIL,GAAE,EAAE,WAAS,KAAG,CAAC;AAAE,WAAM,KAAG,GAAE;AAAC,UAAEV,GAAE,GAAE,GAAE,CAAC;AAAE,UAAEA,GAAE,GAAE,IAAE,GAAE,CAAC;AAAE,WAAG;AAAE,UAAG,KAAG,GAAE;AAAC,aAAI,IAAE,MAAI,EAAE,MAAG,KAAG,IAAE;AACpG,YAAI,KAAG,MAAI,KAAG,GAAEK,KAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,KAAG;AAAE,YAAGU,GAAE,KAAE,EAAE,EAAE,EAAE,GAAE,IAAEV,EAAC;AAAE,UAAE,IAAI,IAAIK,GAAE,EAAE,QAAO,EAAE,aAAW,GAAEL,EAAC,GAAE,CAAC;AAAE,YAAE,IAAEA,MAAG;AACxG,aAAGA;AAAE;AAAA,MAAQ;AAAC,UAAGU,GAAE,KAAE,EAAE,EAAE,EAAE,GAAE,KAAG,KAAG,GAAG;AAAE,UAAG,KAAG,GAAE;AAAC,YAAEK,GAAE;AAAE,QAAAhB,KAAEgB,GAAE;AAAE,QAAAd,MAAG,KAAG,KAAG;AAAE,aAAG,KAAG,KAAG;AAAA,MAAC;AAAC,UAAG,KAAG,GAAE;AAAC,YAAEY,GAAE,GAAE,GAAE,CAAC,IAAE;AACvG,YAAEA,GAAE,GAAE,IAAE,GAAE,CAAC,IAAE;AAAE,QAAAnB,KAAEmB,GAAE,GAAE,IAAE,IAAG,CAAC,IAAE;AAAE,aAAG;AAAG,YAAIjB,KAAE,GAAE,IAAE;AAAE,iBAAQU,KAAE,GAAEA,KAAE,IAAGA,MAAG,GAAE;AAAC,UAAAS,GAAE,EAAET,EAAC,IAAE;AAAE,UAAAS,GAAE,EAAET,KAAE,CAAC,IAAE;AAAA,QAAC;AAAC,iBAAQA,KAAE,GACtGA,KAAEZ,IAAEY,MAAI;AAAC,cAAI,IAAEO,GAAE,GAAE,IAAEP,KAAE,GAAE,CAAC;AAAE,UAAAS,GAAE,GAAGA,GAAE,EAAET,EAAC,KAAG,KAAG,CAAC,IAAE;AAAE,cAAG,IAAE,EAAE,KAAE;AAAA,QAAC;AAAC,aAAG,IAAEZ;AAAE,UAAEqB,GAAE,GAAE,CAAC;AAAE,QAAAP,GAAEO,GAAE,GAAE,GAAEA,GAAE,CAAC;AAAE,YAAEA,GAAE;AAAE,QAAAhB,KAAEgB,GAAE;AACnG,YAAEN,GAAEM,GAAE,IAAG,KAAG,KAAG,GAAE,IAAE,GAAE,GAAE,GAAEA,GAAE,CAAC;AAAE,YAAI,IAAE,EAAE,EAAEA,GAAE,GAAE,GAAE,GAAEA,GAAE,CAAC;AAAE,QAAAd,MAAG,KAAG,KAAG;AAAE,YAAI,IAAE,EAAE,EAAEc,GAAE,GAAE,GAAE,GAAEA,GAAE,CAAC;AAAE,aAAG,KAAG,KAAG;AAAE,UAAEA,GAAE,GAAE,CAAC;AACzG,QAAAP,GAAEO,GAAE,GAAE,GAAE,CAAC;AAAE,UAAEA,GAAE,GAAE,CAAC;AAAE,QAAAP,GAAEO,GAAE,GAAE,GAAEhB,EAAC;AAAA,MAAC;AAAC,aAAM,MAAG;AAAC,YAAI,IAAE,EAAE,EAAE,GAAE,CAAC,IAAEE,EAAC;AAAE,aAAG,IAAE;AAAG,YAAIV,KAAE,MAAI;AAAE,YAAGA,OAAI,KAAG,GAAE;AAAC,YAAE,GAAG,IAAEA;AAAA,QAAC,WAASA,MAAG,KAAI;AAAC;AAAA,QAAK,OAAK;AAAC,cAAI,IAAE,IAAEA,KAAE;AAC1I,cAAGA,KAAE,KAAI;AAAC,gBAAI,IAAEwB,GAAE,EAAExB,KAAE,GAAG;AAAE,gBAAE,KAAG,MAAI,KAAGsB,GAAE,GAAE,GAAE,IAAE,CAAC;AAAE,iBAAG,IAAE;AAAA,UAAC;AAAC,cAAIC,KAAEf,GAAE,EAAE,GAAE,CAAC,IAAE,CAAC;AAAE,eAAGe,KAAE;AAAG,cAAI,IAAEA,OAAI,GAAEP,KAAEQ,GAAE,EAAE,CAAC,GAAElB,MAAGU,OAAI,KAAGZ,GAAE,GAAE,GAAEY,KAAE,EAAE;AAC5H,eAAGA,KAAE;AAAG,iBAAM,IAAE,GAAE;AAAC,cAAE,CAAC,IAAE,EAAE,MAAIV,EAAC;AAAE,cAAE,CAAC,IAAE,EAAE,MAAIA,EAAC;AAAE,cAAE,CAAC,IAAE,EAAE,MAAIA,EAAC;AAAE,cAAE,CAAC,IAAE,EAAE,MAAIA,EAAC;AAAA,UAAC;AAAC,cAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO,EAAE,UAAQ,IAAE,IAAE,EAAE,MAAM,GAAE,CAAC;AAAA,EAAC;AAClH,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,QAAIQ,KAAE,EAAE;AAAO,QAAG,KAAGA,GAAE,QAAO;AAAE,QAAI,IAAE,IAAI,WAAWA,MAAG,CAAC;AAAE,MAAE,IAAI,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAClG,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEA,IAAE,GAAEV,IAAEkB,IAAE;AAAC,QAAIJ,KAAE,EAAE,EAAE,GAAE,IAAE,EAAE,EAAE,GAAED,KAAE;AAAE,WAAMA,KAAEH,IAAE;AAAC,UAAI,IAAE,EAAE,EAAE,GAAEV,EAAC,IAAE,CAAC;AAAE,MAAAA,MAAG,IAAE;AAAG,UAAIoB,KAAE,MAAI;AACnG,UAAGA,MAAG,IAAG;AAAC,QAAAF,GAAEL,EAAC,IAAEO;AAAE,QAAAP;AAAA,MAAG,OAAK;AAAC,YAAIE,KAAE,GAAE,IAAE;AAAE,YAAGK,MAAG,IAAG;AAAC,cAAE,IAAEN,GAAE,GAAEd,IAAE,CAAC;AAAE,UAAAA,MAAG;AAAE,UAAAe,KAAEG,GAAEL,KAAE,CAAC;AAAA,QAAC,WAASO,MAAG,IAAG;AAAC,cAAE,IAAEN,GAAE,GAAEd,IAAE,CAAC;AACrG,UAAAA,MAAG;AAAA,QAAC,WAASoB,MAAG,IAAG;AAAC,cAAE,KAAGN,GAAE,GAAEd,IAAE,CAAC;AAAE,UAAAA,MAAG;AAAA,QAAC;AAAC,YAAI,IAAEa,KAAE;AAAE,eAAMA,KAAE,GAAE;AAAC,UAAAK,GAAEL,EAAC,IAAEE;AAAE,UAAAF;AAAA,QAAG;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOb;AAAA,EAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEU,IAAE,GAAE;AAAC,QAAIV,KAAE,GAAEkB,KAAE,GAAEJ,KAAE,EAAE,WAAS;AACpI,WAAMI,KAAER,IAAE;AAAC,UAAI,IAAE,EAAEQ,KAAE,CAAC;AAAE,QAAEA,MAAG,CAAC,IAAE;AAAE,SAAGA,MAAG,KAAG,CAAC,IAAE;AAAE,UAAG,IAAElB,GAAE,CAAAA,KAAE;AAAE,MAAAkB;AAAA,IAAG;AAAC,WAAMA,KAAEJ,IAAE;AAAC,QAAEI,MAAG,CAAC,IAAE;AAAE,SAAGA,MAAG,KAAG,CAAC,IAAE;AAAE,MAAAA;AAAA,IAAG;AAAC,WAAOlB;AAAA,EAAC;AAC9G,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,QAAIU,KAAE,EAAE,EAAE,GAAE,IAAE,EAAE,QAAOV,IAAEkB,IAAEJ,IAAE,GAAED,IAAE,IAAEH,GAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,IAAI,GAAE,CAAC,IAAE;AAAE,SAAI,IAAE,GAAE,IAAE,GAAE,KAAG,EAAE,GAAE,EAAE,CAAC,CAAC;AAC9G,QAAIU,KAAEV,GAAE;AAAE,IAAAV,KAAE;AAAE,MAAE,CAAC,IAAE;AAAE,SAAIkB,KAAE,GAAEA,MAAG,GAAEA,MAAI;AAAC,MAAAlB,KAAEA,KAAE,EAAEkB,KAAE,CAAC,KAAG;AAAE,MAAAE,GAAEF,EAAC,IAAElB;AAAA,IAAC;AAAC,SAAIc,KAAE,GAAEA,KAAE,GAAEA,MAAG,GAAE;AAAC,MAAAD,KAAE,EAAEC,KAAE,CAAC;AAAE,UAAGD,MAAG,GAAE;AAAC,UAAEC,EAAC,IAAEM,GAAEP,EAAC;AACxG,QAAAO,GAAEP,EAAC;AAAA,MAAG;AAAA,IAAC;AAAA,EAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEH,IAAE;AAAC,QAAI,IAAE,EAAE,QAAOV,KAAE,EAAE,EAAE,GAAEkB,KAAElB,GAAE;AAAE,aAAQc,KAAE,GAAEA,KAAE,GAAEA,MAAG,EAAE,KAAG,EAAEA,KAAE,CAAC,KAAG,GAAE;AAAC,UAAI,IAAEA,MAAG,GAAED,KAAE,EAAEC,KAAE,CAAC,GAAE,IAAE,KAAG,IAAED,IAAEO,KAAE,IAAEP,IAAEE,KAAE,EAAED,EAAC,KAAGM,IAAE,IAAEL,MAAG,KAAGK;AACrJ,aAAML,MAAG,GAAE;AAAC,YAAI,IAAEG,GAAEH,EAAC,MAAI,KAAG;AAAE,QAAAL,GAAE,CAAC,IAAE;AAAE,QAAAK;AAAA,MAAG;AAAA,IAAC;AAAA,EAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,QAAIL,KAAE,EAAE,EAAE,EAAE,GAAE,IAAE,KAAG;AAAE,aAAQV,KAAE,GAAEA,KAAE,EAAE,QACrGA,MAAG,GAAE;AAAC,UAAIkB,KAAE,EAAElB,EAAC,KAAG,IAAE,EAAEA,KAAE,CAAC;AAAE,QAAEA,EAAC,IAAEU,GAAEQ,EAAC,MAAI;AAAA,IAAC;AAAA,EAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAER,IAAE;AAAC,IAAAA,KAAEA,OAAI,IAAE;AAAG,QAAI,IAAE,MAAI;AAAE,MAAE,CAAC,KAAGA;AAAE,MAAE,IAAE,CAAC,KAAGA,OAAI;AAAA,EAAC;AAC7G,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEA,IAAE;AAAC,IAAAA,KAAEA,OAAI,IAAE;AAAG,QAAI,IAAE,MAAI;AAAE,MAAE,CAAC,KAAGA;AAAE,MAAE,IAAE,CAAC,KAAGA,OAAI;AAAE,MAAE,IAAE,CAAC,KAAGA,OAAI;AAAA,EAAE;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEA,IAAE;AAAC,YAAO,EAAE,MAAI,CAAC,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,QAAM,IAAE,MAAI,KAAGA,MAAG;AAAA,EAAC;AAC1J,IAAE,EAAE,IAAE,SAAS,GAAE,GAAEA,IAAE;AAAC,YAAO,EAAE,MAAI,CAAC,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,SAAO,IAAE,MAAI,KAAGA,MAAG;AAAA,EAAC;AAAE,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,YAAO,EAAE,MAAI,CAAC,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,SAAO,IAAE;AAAA,EAAE;AACvK,IAAE,EAAE,IAAE,SAAS,GAAE,GAAE;AAAC,YAAO,EAAE,MAAI,CAAC,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,IAAE,GAAG,MAAI,KAAG,CAAC,KAAG,KAAG,GAAG,MAAI,KAAG,CAAC,KAAG,SAAO,IAAE;AAAA,EAAE;AAAE,IAAE,EAAE,IAAE,WAAU;AAAC,QAAI,IAAE,aAAY,IAAE;AACrI,WAAM,EAAC,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,CAAC,IAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,EAAE,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,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,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,KAAK,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,IAAI,EAAE,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,KAAK,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,KAAK,GAAE,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,IAAI,EAAE,KAAG,EAAE,GAAE,GAAE,IAAI,EAAE,GAAG,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,IAAI,EAAE,EAAE,GAAE,GAAE,IAAI,EAAE,IAAI,GAAE,GAAE,IAAI,EAAE,KAAG,EAAE,GAAE,GAAE,IAAI,EAAE,KAAG,EAAE,EAAC;AAAA,EAAC,EAAE;AACpqB,GAAC,WAAU;AAAC,QAAI,IAAE,EAAE,EAAE,GAAE,IAAE,KAAG;AAAG,aAAQA,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,UAAI,IAAEA;AAAE,WAAG,IAAE,gBAAc,KAAG,IAAE,eAAa;AAClG,WAAG,IAAE,gBAAc,KAAG,IAAE,cAAY;AAAE,WAAG,IAAE,gBAAc,KAAG,IAAE,cAAY;AAAE,WAAG,IAAE,gBAAc,KAAG,IAAE,aAAW;AAC/G,QAAE,EAAEA,EAAC,KAAG,MAAI,KAAG,KAAG,QAAM;AAAA,IAAE;AAAC,aAASV,GAAEkB,IAAEJ,IAAE,GAAE;AAAC,aAAMA,QAAK,EAAE,CAAAI,GAAE,KAAK,GAAE,CAAC;AAAA,IAAC;AAAC,aAAQR,KAAE,GAAEA,KAAE,IAAGA,MAAI;AAAC,QAAE,EAAEA,EAAC,IAAE,EAAE,EAAEA,EAAC,KAAG,IAAE,EAAE,EAAEA,EAAC;AAClH,QAAE,EAAEA,EAAC,IAAE,EAAE,EAAEA,EAAC,KAAG,IAAE,EAAE,EAAEA,EAAC;AAAA,IAAC;AAAC,IAAAV,GAAE,EAAE,GAAE,KAAI,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,MAAI,KAAI,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,MAAI,KAAI,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,MAAI,KAAI,CAAC;AAAE,MAAE,EAAE,EAAE,EAAE,GAAE,CAAC;AACnG,MAAE,EAAE,EAAE,EAAE,GAAE,GAAE,EAAE,CAAC;AAAE,MAAE,EAAE,EAAE,EAAE,GAAE,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,IAAG,CAAC;AAAE,MAAE,EAAE,EAAE,EAAE,GAAE,CAAC;AAAE,MAAE,EAAE,EAAE,EAAE,GAAE,GAAE,EAAE,CAAC;AAAE,MAAE,EAAE,EAAE,EAAE,GAAE,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,IAAG,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,KAAI,CAAC;AAC5G,IAAAA,GAAE,EAAE,GAAE,IAAG,CAAC;AAAE,IAAAA,GAAE,EAAE,GAAE,KAAI,CAAC;AAAA,EAAC,GAAE;AAAG,SAAO,EAAE,EAAE;AAAC,EAAE;AAI5CN,MAAK,qBAAoB,2BAAU;AAAC,MAAI0B,IAAE;AAAE,WAASN,KAAG;AAAC,WAAOM,GAAE,GAAG;AAAA,EAAC;AAAC,WAAS,IAAG;AAAC,WAAOA,GAAE,GAAG,KAAG,IAAEA,GAAE,GAAG;AAAA,EAAC;AAAC,WAAS,GAAG,GAAE;AAAC,QAAI,IAAEN,GAAE,GAAED,KAAE,CAAC,GAAE,GAAE,GAAE,GAAG,GAAE,IAAE,CAAC,GAAE,IAAE;AAC1J,aAAQ,IAAE,GAAE,IAAE,IAAG,IAAI,GAAE,CAAC,IAAEC,GAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,eAAQP,KAAE,GAAEA,KAAE,EAAE,CAAC,GAAEA,MAAI;AAAC,YAAI,IAAE,EAAEM,IAAE,GAAE,IAAE,GAAE,CAAC;AAAE,QAAAA,GAAE,IAAE,CAAC,IAAEC,GAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIb,KAAE,IAAI,WAAW,KAAG,CAAC;AACpI,MAAE,CAAC,IAAE,CAAC,IAAI,WAAWY,EAAC,GAAEZ,EAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,GAAE,IAAE,GAAEW,KAAE,GAAET,KAAE;AAAE,aAAMU,GAAED,KAAE,CAAC,KAAG,OAAK,KAAG,GAAE;AAAC,QAAAT,KAAE,KAAG,EAAE,IAAE;AACzG,QAAAS,KAAEC,GAAED,KAAET,EAAC;AAAA,MAAC;AAAC,MAAAF,GAAE,CAAC,IAAEW;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAEC,IAAE,GAAE;AAAC,QAAG,EAAE,IAAE,CAAC,KAAG,IAAI,QAAO;AAAE,QAAGA,MAAG,EAAE,QAAO;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAG,EAAE,IAAE,CAAC,KAAG,GAAE;AAAC,UAAE,IAAE,CAAC,IAAE,EAAE;AAC1H,UAAE,KAAK,GAAE,GAAE,GAAE,GAAG;AAAA,MAAC;AAAC,UAAIN,KAAE,EAAE,GAAE,EAAE,IAAE,CAAC,GAAEM,KAAE,GAAE,IAAE,CAAC;AAAE,UAAGN,MAAG,EAAE,QAAOA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,GAAEM,KAAE,EAAE;AAClG,WAAM,IAAE,MAAI,EAAE,IAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,KAAK,EAAE,GAAG;AAAE,UAAG,KAAG,OAAK,CAAC,EAAE,EAAE,GAAE;AAAI,MAAAA,KAAEA,MAAG,IAAE;AAAE,WAAG;AAAA,IAAC;AAAC,QAAG,IAAE,EAAE,OAAK;AAAI,MAAE,IAAE;AAAE,MAAE,IAAEA;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAE;AAAC,QAAG,EAAE,IAAE,EAAE,GAAE,CAAC;AACrI,WAAO,EAAE,MAAI,EAAE,KAAG,KAAG,SAAO,KAAG;AAAA,EAAC;AAAC,WAASJ,GAAE,GAAE,GAAE;AAAC,QAAII,KAAE,EAAE,CAAC,GAAE,IAAE,GAAE,IAAE,KAAIN,KAAE;AAAE,QAAG,EAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,KAAG,EAAE,IAAE,IAAE;AAC1G,QAAE,EAAE,CAAC,EAAE,CAAC;AAAE,QAAEM,GAAE,IAAE,CAAC;AAAE,MAAE,KAAGA,GAAE,IAAE,CAAC;AAAE,WAAM,KAAG,KAAI;AAAC,MAAAN,KAAE,EAAE,KAAG,EAAE,EAAE,IAAE;AAAE,UAAEM,GAAE,IAAEN,EAAC;AAAE,UAAEM,GAAE,IAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAE;AAAC,QAAG,IAAE,SAAO,KAAG,EAAE,MAAG,EAAE,KAAG,KAAG;AACnI,WAAO;AAAA,EAAC;AAAC,WAAS,GAAG,GAAE,GAAE;AAAC,QAAIA,KAAEJ,GAAE,GAAE,CAAC;AAAE,QAAGI,MAAG,EAAE,QAAO;AAAE,QAAGA,MAAG,GAAG,QAAM;AAAO,QAAI,IAAE,EAAEA,IAAE,CAAC;AAAE,WAAO,EAAE,GAAEA,EAAC;AAAA,EAAC;AAAC,WAASP,GAAE,GAAE,GAAEO,IAAE,GAAE,GAAEN,IAAE;AAAC,QAAI,IAAE;AACvI,aAAQ,IAAE,GAAE,IAAEA,IAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC;AAAI,iBAAQK,KAAE,GAAEA,KAAE,GAAEA,KAAI,GAAE,IAAE,IAAEA,EAAC,IAAE,GAAG,EAAEA,EAAC,GAAEC,EAAC;AAAA,MAAC;AAAC,UAAGA,GAAE,KAAG,KAAG,IAAEA,GAAE,KAAG,KAAG,KAAG,GAAE;AAAC,YAAIV,KAAEU,GAAE,GAAEhB,KAAEgB,GAAE;AAC1I,eAAMhB,GAAEM,EAAC,KAAG,OAAK,EAAE,OAAKN,GAAEM,KAAE,CAAC,KAAGN,GAAEM,KAAE,CAAC,KAAG,KAAK,CAAAA;AAAI,QAAAU,GAAE,IAAEV,KAAE;AAAE,QAAAU,GAAE,IAAE;AAAE,QAAAA,GAAE,IAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAE;AAAC,WAAO,EAAE,EAAE,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAG,GAAE,GAAEA,IAAE,GAAE,GAAE;AAAC,QAAIN,KAAEa,GAAE,SAAO;AAChJ,aAAQ,IAAE,GAAE,IAAEb,IAAE,KAAG,GAAE;AAAC,UAAI,IAAEa,GAAE,IAAE,CAAC;AAAE,MAAAA,GAAE,IAAE,CAAC,IAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,MAAAA,GAAE,IAAE,IAAE,CAAC,IAAE;AAAE,UAAI,IAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,MAAAA,GAAE,IAAE,IAAE,CAAC,IAAEA,GAAE,IAAE,IAAE,CAAC;AAAE,MAAAA,GAAE,IAAE,IAAE,CAAC,IAAE;AAAA,IAAC;AAAC,aAAQnB,KAAE,GACpHA,KAAE,GAAEA,MAAI;AAAC,UAAI,IAAE,OAAM,IAAE;AAAM,eAAQW,KAAE,GAAEA,KAAE,GAAEA,MAAG,GAAE;AAAC,YAAIT,KAAEM,GAAE,GAAEI,EAAC,GAAEhB,KAAEY,GAAE,GAAEI,EAAC;AAAE,YAAGV,MAAG,EAAE,MAAG,EAAEA,IAAEU,EAAC;AAAE,YAAGhB,MAAG,EAAE,MAAG,EAAEA,IAAEgB,EAAC;AAC3G,UAAEZ,KAAE,IAAEW,EAAC,IAAE,IAAE;AAAM,UAAEX,KAAE,IAAEW,KAAE,CAAC,IAAE,IAAE;AAAA,MAAK;AAAA,IAAC;AAAA,EAAC;AAAC,WAASR,GAAE,GAAE;AAAC,IAAAgB,KAAE;AAAE,QAAE;AAAE,QAAG,EAAE,KAAG,MAAM,OAAK;AAAI,QAAI,IAAE,CAAC,GAAEP,KAAE,GAAE,IAAE,GAAE,IAAE,GAAEN,KAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAEN,KAAE,GAAE,IAAE,GAAE,IAAE;AACjI,WAAM,MAAG;AAAC,UAAIW,KAAE,EAAE;AAAE,UAAGA,MAAG,OAAM;AAAC;AAAI;AAAA,MAAQ;AAAC,UAAIT,KAAE,EAAE;AAAE,UAAGS,MAAG,OAAM;AAAC,YAAEE,GAAE;AAAE,YAAE,EAAE;AAAE,YAAE,EAAE;AAAE,QAAAb,KAAEa,GAAE;AAAE,iBAAQjB,KAAE,GACvGA,KAAEI,IAAEJ,MAAI;AAAC,cAAIK,KAAEY,GAAE,GAAE,IAAEA,GAAE,GAAE,IAAEA,GAAE;AAAE,cAAG,KAAG,EAAE,OAAK;AAAI,YAAEZ,EAAC,IAAE,CAACL,IAAE,KAAG,GAAE,IAAE,EAAE;AAAA,QAAC;AAAA,MAAC,WAASe,MAAG,OAAM;AAAC,YAAIiC,MAAG,IAAE1C,KAAE;AAAE,eAAM,IAAE0C,IAAG,IAAG,CAAC;AAAA,MAAC,WAASjC,MAAG,OAAM;AAAC;AACtI,iBAAQf,KAAE,GAAEA,KAAEI,IAAEJ,MAAI;AAAC,cAAI,KAAGiB,GAAE,GAAE,IAAE,EAAE,EAAE;AAAE,YAAE,EAAE,CAAC,CAAC,IAAE,EAAEA,GAAE,MAAI,CAAC;AAAE,UAAAP,GAAE,EAAE,CAAC,CAAC,IAAE,EAAE,MAAM,CAAC;AAAA,QAAC;AAAC,QAAAM,KAAEC,GAAE;AAAE,aAAG;AAAE;AAAA,MAAK,WAASF,MAAG,OAAM;AAAC,YAAE,EAAE;AAAA,MAAC,OAAK;AAAC,aAAGT,KAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAI,KAAG,IAAE,IAAE,cAAY,YAAWgB,KAAE,IAAI,GAAG,IAAE,IAAElB,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,GAAE,GAAE,GAAEY,MAAG,GAAE,GAAE,GAAE,MAAKO,IAAE,GAAEA,GAAE,QAAO,GAAE,EAAC;AACjO,QAAG,EAAE,EAAE,IAAGD,IAAE,IAAElB,IAAE,GAAE,EAAE,CAAC,GAAE,CAAC;AAAA,SAAM;AAAC,UAAIU,KAAE,CAAC,GAAEf,KAAE,GAAE,IAAE;AAAE,eAAQC,KAAE,GAAEA,KAAEI,IAAEJ,MAAI;AAAC,YAAI,IAAEU,GAAEV,EAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAG,IAAED,GAAE,CAAAA,KAAE;AACvG,YAAG,IAAE,EAAE,KAAE;AAAE,QAAAe,GAAE,KAAK,IAAE,CAAC;AAAA,MAAC;AAAC,UAAGf,MAAG,KAAG,KAAG,GAAE;AAAC,YAAGK,MAAG,KAAGU,GAAE,CAAC,KAAG,KAAGA,GAAE,CAAC,KAAG,EAAE,OAAK;AAAI,YAAGf,MAAG,KAAG,KAAG,KAAG,KAAG,EAAE,OAAK;AAClG,YAAI,IAAE,CAAC,GAAEmB,KAAE;AAAE,iBAAQlB,KAAE,GAAEA,KAAEI,IAAEJ,MAAI;AAAC,mBAAQa,KAAE,GAAEA,KAAEC,GAAEd,EAAC,GAAEa,KAAI,GAAE,KAAK,EAAEb,EAAC,CAAC;AAAE,UAAAkB,MAAGJ,GAAEd,EAAC;AAAA,QAAC;AAAC,YAAIyB,KAAE,IAAE1B,IAAE,IAAE,IAAE,GAAE,IAAE0B,KAAE;AAClG,QAAAhB,GAAEa,IAAEG,KAAEP,IAAE,GAAE,GAAEA,IAAE,CAAC;AAAE,UAAEI,IAAEN,IAAES,IAAE,GAAEP,KAAE,GAAEA,IAAEA,IAAE,CAAC;AAAE,YAAIG,KAAE,IAAI,YAAY,IAAEP,GAAE,CAAC,CAAC;AAAE,YAAGf,MAAG,KAAG,KAAG,GAAE;AAAC,mBAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAAqB,GAAE,IAAErB,EAAC,IAAEsB,GAAE,IAAEtB,EAAC;AACpH,YAAAqB,GAAE,IAAErB,KAAE,CAAC,IAAEsB,GAAE,IAAEtB,KAAE,CAAC;AAAE,YAAAqB,GAAE,IAAErB,KAAE,CAAC,IAAEsB,GAAE,IAAEtB,KAAE,CAAC;AAAE,YAAAqB,GAAE,IAAErB,KAAE,CAAC,IAAEsB,GAAE,IAAEtB,KAAE,CAAC;AAAA,UAAC;AAAC,YAAEqB,IAAEL,IAAES,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,mBAAQzB,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAAsB,GAAE,IAAEtB,EAAC,IAAEqB,GAAE,IAAErB,EAAC;AAC5G,YAAAsB,GAAE,IAAEtB,KAAE,CAAC,IAAEqB,GAAE,IAAErB,KAAE,CAAC;AAAE,YAAAsB,GAAE,IAAEtB,KAAE,CAAC,IAAEqB,GAAE,IAAErB,KAAE,CAAC;AAAE,YAAAsB,GAAE,IAAEtB,KAAE,CAAC,IAAEqB,GAAE,IAAErB,KAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,YAAGD,MAAG,KAAG,KAAG,GAAE;AAAC,mBAAQC,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAAqB,GAAE,IAAErB,EAAC,IAAEsB,GAAE,IAAEtB,EAAC;AACvG,YAAAqB,GAAE,IAAErB,KAAE,CAAC,IAAEsB,GAAE,IAAEtB,KAAE,CAAC;AAAA,UAAC;AAAC,YAAEqB,IAAEL,IAAES,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,mBAAQzB,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,YAAAsB,GAAE,IAAEtB,EAAC,IAAEqB,GAAE,IAAErB,EAAC;AAAE,YAAAsB,GAAE,IAAEtB,KAAE,CAAC,IAAEqB,GAAE,IAAErB,KAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,YAAIG,KAAEmB,GAAE,MAAM,CAAC;AAC5G,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAG,KAAG,EAAE,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAId,MAAG,IAAE,IAAE,KAAGJ,IAAEO,OAAI,MAAI,KAAGc,MAAG,MAAI,MAAIP,IAAEM,MAAG,IAAE,KAAG,KAAG,IAAE;AACvG,YAAAF,GAAEd,EAAC,IAAEL,GAAEQ,KAAEa,EAAC;AAAE,YAAAF,GAAEd,KAAE,CAAC,IAAEL,GAAEQ,KAAE,CAAC;AAAE,YAAAW,GAAEd,KAAE,CAAC,IAAEL,GAAEQ,KAAE,CAAC;AAAA,UAAC;AAAA,cAAM,UAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAIH,MAAG,IAAE,IAAE,KAAGJ,IAAEO,MAAG,IAAEc,MAAG,MAAI,MAAIP,IAAEM,KAAE,IAAE;AACxG,YAAAF,GAAEd,EAAC,IAAEL,GAAEQ,KAAEa,EAAC;AAAE,YAAAF,GAAEd,KAAE,CAAC,IAAEL,GAAEQ,KAAE,CAAC;AAAE,YAAAW,GAAEd,KAAE,CAAC,IAAEL,GAAEQ,KAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,OAAK;AAAC,QAAAF,GAAEa,IAAE,IAAElB,IAAE,GAAE,GAAEA,IAAE,CAAC;AAAE,YAAG,KAAG,EAAE,GAAEkB,IAAEN,IAAE,GAAE,GAAE,GAAEZ,IAAEA,IAAE,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,KAAK,MAAM,IAAE,CAAC;AACpH,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,IAAEkB,GAAE,MAAM,IAAE,IAAElB,KAAG,IAAE,KAAG,IAAEA,EAAC;AAAE,cAAE,GAAEY,IAAE,GAAE,GAAE,GAAEZ,IAAEA,IAAE,CAAC;AAAE,YAAAkB,GAAE,IAAI,GAAE,IAAE,IAAElB,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOkB;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAEN,IAAE,GAAE,GAAEN,IAAE,GAAEN,IAAE;AAAC,QAAI,IAAEY,KAAE;AACvI,aAAQ,IAAE,GAAE,IAAEN,IAAE,IAAI,GAAE,CAAC,KAAG,KAAGN,KAAE;AAAE,aAAQW,KAAE,GAAEA,KAAE,GAAEA,MAAG,EAAE,UAAQ,IAAE,GAAE,IAAEL,IAAE,IAAI,GAAEK,KAAE,CAAC,KAAG,EAAEA,KAAE,IAAE,CAAC;AAAE,aAAQT,KAAE,GACrGA,KAAE,GAAEA,MAAI;AAAC,UAAIN,KAAEM,KAAE;AAAE,eAAQ,IAAE,GAAE,IAAEI,IAAE,IAAI,GAAEV,KAAE,CAAC,KAAG,EAAEA,KAAE,IAAE,CAAC;AAAE,eAAQe,KAAE,GAAEA,KAAE,GAAEA,MAAG,GAAE;AAAC,iBAAQ,IAAE,GAAE,IAAEL,IAAE,KAAI;AAAC,cAAIL,KAAEL,KAAEe,KAAE,GAAE,IAAEV,KAAE,GAAE,IAAE,EAAEA,KAAE,CAAC,GAAEH,KAAE;AAChI,cAAG,KAAG,EAAE,CAAAA,KAAE;AAAA,mBAAU,KAAG,EAAE,CAAAA,KAAE;AAAA,mBAAU,KAAG,EAAE,CAAAA,KAAE,EAAE,CAAC;AAAA,mBAAU,KAAG,EAAE,CAAAA,KAAE,EAAE,IAAE,CAAC;AAAA,mBAAU,KAAG,EAAE,CAAAA,KAAE,KAAG,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,mBAC3F,KAAG,EAAE,CAAAA,KAAE,KAAG,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,MAAI;AAAA,mBAAW,KAAG,EAAE,CAAAA,KAAE,EAAE,CAAC,KAAG,IAAE,EAAE,IAAE,CAAC,MAAI;AAAA,mBAAW,KAAG,EAAE,CAAAA,KAAE,IAAE,EAAE,CAAC,MAAI;AAAA,cAAO,OAAM;AAC3G,YAAEG,EAAC,KAAGH;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOK;AAAC,EAAE;AAAA,CAGpB,WAAU;AAAC,MAAI,IAAE,GAAED,KAAE,GAAE,IAAE,GAAEiB,KAAE,GAAE,IAAE,GAAE,IAAE,GAAEnB,KAAE,GAAE,IAAE,GAAEU,KAAE,GAAE,IAAE,GAAE,KAAG,IAAG,IAAE,IAAGN,KAAE,IAAG,IAAE,IAAG,IAAE,IAAGE,KAAE,IAAG,IAAE,IAAGY,KAAE,IAAGvB,KAAE;AACnG,WAAS,GAAGC,IAAE;AAAC,QAAIkB,KAAErB,MAAK,OAAO,YAAW,IAAE,EAAC,GAAEqB,GAAElB,IAAE,CAAC,GAAE,GAAEA,GAAE,CAAC,GAAE,GAAEA,GAAE,CAAC,GAAE,GAAEA,GAAE,CAAC,GAAE,GAAEkB,GAAElB,IAAE,CAAC,GAAE,GAAEkB,GAAElB,IAAE,CAAC,GAAE,GAAEkB,GAAElB,IAAE,CAAC,GAAE,GAAEkB,GAAElB,IAAE,EAAE,GAAE,GAAEA,GAAE,EAAE,GAAE,GAAEkB,GAAElB,IAAE,EAAE,EAAC;AACnI,QAAG,EAAE,KAAG,SAAO,EAAE,IAAE,KAAG,EAAE,IAAE,KAAG,EAAE,IAAE,KAAG,EAAE,IAAE,OAAK,EAAE,IAAE,MAAI,EAAE,KAAG,OAAK,EAAE,IAAE,EAAE,KAAG,EAAE,IAAE,EAAE,KAAG,EAAE,IAAE,EAAE,KAAG,EAAE,KAAG,EAAE,IAAE,MAAI,EAAE,KAAG,EAAE,IAAE,EAAE,KAAG,EAAE,KAAG,KAAK,KAAK,EAAE,IAAE,EAAE,CAAC,KAAG,EAAE,KAAG,EAAE,IAAE,KAAG,EAAE,KAAG,MAAI,EAAE,KAAG,MAAI,EAAE,KAAG,MAAI,EAAE,KAAG,MAAI,EAAE,KAAG,GAAE;AAAC,YAAK;AAAA,IAAc;AAAC,QAAG,EAAE,KAAG,GAAE;AAAC,YAAK;AAAA,IAAqC;AAAC,MAAE,IAAE,EAAE,KAAG;AACzR,MAAE,KAAG,EAAE,IAAE,EAAE,IAAE,IAAE,IAAE,EAAE,MAAI,KAAG;AAAE,MAAE,IAAE,EAAE,IAAE;AAAE,MAAE,IAAE;AAAG,MAAE,KAAG,KAAG,EAAE,KAAG;AAAE,MAAE,IAAE,IAAE,EAAE;AAAE,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEkB,IAAE;AAAC,QAAI,IAAE,IAAI,MAAMA,GAAE,CAAC,GAAE,IAAE,IAAEA,GAAE,GAAEhB,KAAE,KAAG;AAClI,QAAG,IAAE,GAAG,CAAAA,MAAG,MAAI,IAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,IAAG,IAAEgB,GAAE,GAAE,KAAG,GAAE;AAAC,UAAI,IAAErB,MAAK,OAAO,SAASG,IAAE,CAAC;AAAE,QAAE,CAAC,IAAEA,GAAE,MAAME,IAAEA,KAAE,CAAC;AAAE,QAAE,CAAC,EAAE,IAAE;AAAE,QAAE,CAAC,EAAE,IAAE;AACtH,MAAAA,MAAG;AAAE;AAAA,IAAG;AAAC,QAAGA,MAAGF,GAAE,OAAO,OAAK;AAAe,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEkB,IAAE;AAAC,aAAQ,IAAE,CAACA,GAAE,CAAC,GAAE,IAAE,GAAE,KAAGA,GAAE,CAAC,GAAE,KAAI,KAAI;AAAC,MAAAlB,GAAE,CAAC,IAAE,KAAG,CAACkB,GAAE,CAAC,IAAE,KAAG,KAAG,CAACA,GAAE,CAAC,IAAE,KAAG,KAAG,CAACA,GAAE,CAAC,IAAE,KAAG,IAAE,CAACA,GAAE,CAAC,IAAE,KAAG,KAAGA,GAAE,CAAC,IAAE,IAAE,IAAEA,GAAE,CAAC,IAAE,IAAE,IAAEA,GAAE,CAAC,IAAE,IAAE,IAAEA,GAAE,CAAC,IAAE,IAAE;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGlB,IAAEkB,IAAE,GAAE;AAAC,QAAI,IAAE,CAACA,IAAE,IAAEA,KAAE,IAAG,IAAEA,KAAE,IAAG,IAAEA,KAAE,KAAI,CAAC;AAC1P,IAAAlB,GAAE,IAAEkB;AAAE,IAAAlB,GAAE,KAAG,EAAE,CAAC,IAAE,IAAEkB,OAAI,IAAEA,KAAE,KAAG,IAAE;AAAE,IAAAlB,GAAE,IAAE,KAAK,KAAK,KAAK,KAAKA,GAAE,CAAC,CAAC;AAAE,IAAAA,GAAE,IAAE;AAAE,OAAGA,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAIkB,KAAE,EAAC,GAAE,IAAI,UAAU,KAAGlB,GAAE,CAAC,EAAC;AAC5H,OAAGkB,IAAE,GAAElB,GAAE,CAAC;AAAE,WAAOkB;AAAA,EAAC;AAAC,WAAS,EAAElB,IAAE;AAAC,QAAIkB,KAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,GAAElB,GAAE,IAAE,OAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,eAAQE,KAAE,GAC5GA,KAAE,IAAGA,MAAI;AAAC,QAAAgB,GAAE,CAAC,EAAEhB,EAAC,IAAE,CAAC,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAOgB;AAAA,EAAC;AAAC,WAAS,GAAGlB,IAAE;AAAC,aAAQkB,KAAE,IAAG,IAAE,GAAE,CAAC,GAAEA,MAAI;AAAC,UAAElB,GAAEA,GAAE,CAAC,MAAI,IAAEA,GAAE,IAAE;AAAE,MAAAA,GAAE;AAAI,MAAAA,GAAE,KAAG;AACxG,UAAG,CAACA,GAAE,EAAE,CAAAA,GAAE;AAAA,IAAG;AAAC,WAAOkB;AAAA,EAAC;AAAC,WAAS,EAAElB,IAAEkB,IAAE;AAAC,QAAI,IAAE,GAAE,IAAE,IAAElB,GAAE,GAAEE,KAAEF,GAAE,GAAE,IAAEA,GAAE;AAAE,QAAGkB,IAAE;AAAC,UAAGA,MAAG,GAAE;AAAC,WAAE;AAAC,gBAAI;AAAE,UAAAA,MAAG;AAAE,eAAGlB,GAAEA,GAAE,CAAC,KAAG,KAAG,KAAG;AACjH,UAAAA,GAAE;AAAI,cAAE;AAAA,QAAC,SAAOkB,MAAG;AAAA,MAAE;AAAC,UAAGA,IAAE;AAAC,cAAIA;AAAE,aAAGA;AAAE,aAAGlB,GAAEA,GAAE,CAAC,MAAI,KAAG,KAAGkB,MAAG;AAAA,MAAC;AAAC,MAAAlB,GAAE,IAAE,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEkB,IAAE;AAAC,QAAI,IAAE;AACtG,QAAGA,KAAElB,IAAE;AAAC,aAAM,KAAG,MAAIkB,MAAG,EAAE,IAAElB,GAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAEkB,IAAE,GAAE,GAAEhB,IAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAG,KAAK,KAAE;AAAE,QAAIO,KAAE,IAAE,GAAEE,KAAEF,KAAE,GAAE,IAAE,GAAEO,KAAE,GAAEX,MAAE,GAAEY,IAAEJ,IAAE,IAAE,EAAEX,EAAC,GAAE,IAAE,EAAEA,KAAE,CAAC,GAAE,IAAE,EAAEA,KAAE,CAAC,EAAEO,EAAC,GAAEG,KAAE,EAAEH,KAAE,CAAC,GAAEM,KAAE,EAAEN,EAAC,GAAE,IAAE,EAAEA,KAAE,CAAC,GAAEY,KAAE,EAAEZ,KAAE,CAAC,GAAE,IAAE,EAAEA,KAAE,CAAC,GAAEe,KAAE,KAAK,KAAI,GAAEjB,IAAEJ,IAAE;AAC5M,QAAGQ,IAAE;AAAC,UAAEa,GAAE,IAAET,EAAC;AAAE,MAAAR,KAAEiB,GAAE,IAAET,EAAC;AAAE,MAAAZ,KAAEqB,GAAEZ,KAAEG,EAAC;AAAA,IAAC;AAAC,QAAGJ,IAAE;AAAC,UAAE,IAAER,MAAGI,KAAE,IAAE,IAAEK,KAAE,IAAET,MAAGI,KAAEJ,KAAE,IAAE,IAAE,IAAES;AAAE,UAAE,IAAE,IAAEG,OAAI;AAAE,UAAG,GAAE;AAAC,UAAEN,EAAC,IAAE;AAAE;AAAA,MAAM;AAAC,MAAAQ,KAAEC,GAAE,IAAEA,GAAE,EAAElB,GAAE,IAAEe,KAAE,CAAC,IAAEG,GAAE,EAAElB,GAAE,IAAEY,KAAEG,EAAC;AAAA,IAAC,OAAK;AAAC,UAAEA,KAAEH,MAAGG,KAAE,KAAGA,KAAEH,MAAGG,KAAE,IAAE,IAAEM,KAAE,IAAEN,OAAI,IAAEM,KAAE,MAAI;AACnL,MAAAJ,KAAEC,GAAE,IAAEA,GAAE,EAAElB,GAAE,IAAEe,KAAEH,EAAC,IAAEM,GAAE,EAAElB,GAAE,IAAEY,KAAES,EAAC;AAAA,IAAC;AAAC,IAAAR,KAAEW,GAAEP,EAAC;AAAE,QAAI,IAAE,GAAG,CAAC;AAAE,QAAG,IAAEjB,GAAE,IAAEkB,GAAE,IAAE,GAAE;AAAC,UAAI,IAAE,GAAG,EAAEL,EAAC,EAAE,CAAC,GAAE,EAAEA,EAAC,EAAE,CAAC,CAAC;AAAE,MAAAR,MAAE,EAAE,GAAE,CAAC,KAAG,KAAG;AAAA,IAAE,OAAK;AAAC,MAAAA,MAAE,EAAE,GAAEa,GAAE,CAAC,IAAE;AAAA,IAAC;AAAC,IAAAb,MAAEA,MAAE,IAAE,MAAIA,QAAI,KAAGA,QAAI;AACpJ,MAAEQ,EAAC,EAAE,CAAC,KAAGW,GAAEnB,GAAC;AAAE,QAAG,EAAEQ,EAAC,EAAE,CAAC,KAAGb,GAAE,GAAE;AAAC,QAAEa,EAAC,EAAE,CAAC,OAAK;AAAE,QAAEA,EAAC,EAAE,CAAC,OAAK;AAAA,IAAC;AAAC,MAAEA,EAAC,EAAE,CAAC;AAAI,QAAEI,KAAE,IAAE,IAAEZ,MAAE,IAAEA;AAAE,QAAGL,GAAE,GAAE;AAAC,UAAG,IAAE,EAAE,MAAGkB,GAAE;AAAA,eAC7F,IAAElB,GAAE,EAAE,MAAGkB,GAAE;AAAA,IAAC;AAAC,MAAET,EAAC,IAAE,KAAG,IAAE,KAAK,IAAI,GAAET,GAAE,CAAC,IAAE;AAAA,EAAC;AAAC,WAAS,EAAEA,IAAEkB,IAAE,GAAE;AAAC,QAAI,IAAElB,GAAE,CAAC,EAAE;AAAO,aAAQE,KAAEgB,IAAEhB,MAAG,GACpGA,MAAI;AAAC,MAAAF,GAAEE,EAAC,EAAE,CAAC,IAAEF,GAAEE,KAAE,CAAC,EAAE,CAAC;AAAE,MAAAF,GAAEE,EAAC,EAAE,IAAE,CAAC,IAAEF,GAAEE,KAAE,CAAC,EAAE,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAASuB,GAAEzB,IAAE;AAAC,MAAEA,IAAE,GAAEQ,EAAC;AAAE,MAAER,IAAE,GAAE,CAAC;AAAE,MAAEA,IAAEU,IAAEY,EAAC;AAAA,EAAC;AAAC,WAAS,EAAEtB,IAAEkB,IAAE,GAAE,GAAEhB,IAAE,GAAE,GAAE,GAAEO,IAAEE,IAAE,GAAEK,IAAEX,KAAE;AAAC,QAAIY,KAAE,GAAEJ,KAAE,GAAE,IAAEX,KAAE,KAAGA,KAAE;AAClJ,WAAMW,KAAEb,GAAE,GAAE;AAAC,UAAGiB,KAAEjB,GAAE,GAAE;AAAC,UAAEA,IAAEkB,IAAE,GAAE,GAAEhB,IAAEe,IAAE,EAAER,EAAC,GAAET,GAAE,MAAI,KAAGW,MAAG,CAAC,MAAI,MAAIM,KAAED,OAAIX,KAAG;AAAE,UAAEL,IAAEkB,IAAE,GAAE,GAAE,GAAED,IAAE,EAAER,EAAC,GAAET,GAAE,MAAI,CAAC,KAAGW,MAAG,MAAI,MAAIM,KAAED,OAAIX,KAAG;AAC3H,QAAAY,MAAG;AAAA,MAAC;AAAC,UAAGA,KAAE,GAAE;AAAC,UAAEjB,IAAEkB,IAAE,GAAE,GAAEhB,IAAEW,IAAE,EAAEJ,EAAC,CAAC;AAAE,UAAET,IAAEkB,IAAE,GAAE,GAAE,GAAEL,IAAE,EAAEJ,EAAC,CAAC;AAAE,QAAAI,MAAG;AAAA,MAAC;AAAA,IAAC;AAAC,IAAAY,GAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAEkB,IAAE,GAAE,GAAEhB,IAAE,GAAE;AAAC,MAAEF,IAAEkB,IAAE,GAAE,GAAE,GAAE,GAAEhB,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AACpH,MAAEF,IAAEkB,IAAE,GAAE,GAAEJ,IAAEJ,IAAER,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAEF,IAAEkB,IAAE,GAAE,GAAEK,IAAE,GAAErB,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAEF,IAAEkB,IAAE,GAAE,GAAE,IAAG,GAAEhB,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAEF,IAAEkB,IAAE,GAAE,GAAE,GAAE,GAAEhB,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AACnH,MAAEF,IAAEkB,IAAE,GAAE,GAAEV,IAAEc,IAAEpB,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGF,IAAEkB,IAAE,GAAE,GAAEhB,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAEF,GAAE;AAAE,QAAGE,KAAE,KAAGF,GAAE,EAAE,KAAEA,GAAE,IAAEE,KAAEF,GAAE;AAAE,QAAIS,KAAE,IAAET,GAAE,IAAE,IAAEE,KAAEF,GAAE;AACrH,aAAQW,KAAE,GAAEA,KAAE,GAAEA,MAAI;AAAC,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAIK,KAAE,EAAEL,KAAE,CAAC,EAAE,IAAE,CAAC,GAAEN;AAAE,YAAGW,MAAG,GAAE;AAAC,UAAAX,MAAE,KAAGM,OAAI;AAAA,QAAE,WAASK,MAAG,GAAE;AAAC,UAAAX,MAAEK,MAAGC,OAAI;AAAA,QAAE,OAAK;AAAC,UAAAN,MAAE,IAAEM;AAAA,QAAC;AAAC,YAAIM,KAAEjB,GAAE,KAAG,IAAE,IAAE,IAAE,aAAW,IAAE,IAAE,MAAI,IAAE,MAAI,KAAG,MAAI;AACzK,QAAAkB,GAAET,KAAE,CAAC,IAAE,EAAEJ,GAAC,EAAEY,KAAE,CAAC;AAAA,MAAC;AAAC,MAAAR,MAAGT,GAAE;AAAA,IAAC;AAAA,EAAC;AAAC,EAAAH,MAAK,iBAAe,SAASG,IAAEkB,IAAE;AAAC,QAAI,IAAE,GAAGlB,EAAC,GAAE,IAAE,GAAGA,IAAE,CAAC,GAAEE,KAAE,GAAG,CAAC,GAAE,IAAE,IAAI,WAAW,EAAE,IAAE,EAAE,CAAC;AACjH,QAAGgB,MAAG,MAAK;AAAC,MAAAA,KAAE,EAAE,IAAE,CAAC,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC,CAAC,GAAEK,EAAC,GAAE,CAACjB,IAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAACF,IAAEI,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAEc,EAAC,CAAC,GAAE,IAAE,CAAC;AACrK,aAAQb,KAAE,GAAEA,KAAEV,IAAEU,MAAI;AAAC,QAAEA,EAAC,IAAE,IAAI,YAAY,EAAE,CAAC;AAAA,IAAC;AAAC,aAAQE,KAAE,GAAEA,KAAE,EAAE,GAAEA,MAAI;AAAC,UAAI,IAAE,EAAET,EAAC,GAAEc,KAAE,EAAEd,EAAC;AAAE,eAAQO,KAAE,GAClGA,KAAEV,IAAEU,MAAI;AAAC,iBAAQJ,MAAE,GAAEA,MAAE,EAAE,GAAEA,OAAI;AAAC,YAAEI,EAAC,EAAEJ,GAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAQY,KAAE,GAAEA,KAAE,EAAE,GAAEA,MAAI;AAAC,WAAG,GAAEf,IAAE,EAAES,EAAC,GAAE,GAAE,GAAEK,EAAC;AAAE,iBAAQP,KAAE,GAAEA,KAAE,GACnGA,MAAI;AAAC,mBAAQJ,MAAE,GAAEA,MAAE,EAAE,GAAEA,OAAI;AAAC,cAAE,EAAEI,EAAC,EAAE,CAAC,CAAC,EAAEJ,GAAC,IAAE,EAAE,EAAEI,EAAC,EAAE,CAAC,CAAC,EAAEJ,GAAC;AAAA,UAAC;AAAA,QAAC;AAAC,WAAG,GAAE,GAAE,GAAEY,IAAEN,IAAEO,EAAC;AAAE,iBAAQT,KAAE,GAAEA,KAAEV,IAAEU,MAAI;AAAC,cAAG,CAAC,GAAEL,IAAE,GAAE,CAAC,EAAE,QAAQK,EAAC,KAAG,IAAG;AAAC,qBAAQJ,MAAE,GACrIA,MAAE,EAAE,GAAEA,OAAI;AAAC,gBAAEI,EAAC,EAAEJ,GAAC,IAAE;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAC,QAAAoB,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,GAAE;AAExC,IAAO,sBAAQ5B;;;ACxnDf,IAAM,aAAN,cAAyB,kBAAkB;AAAA,EAE1C,YAAa,SAAU;AAEtB,UAAO,OAAQ;AAAA,EAEhB;AAAA,EAEA,MAAO,QAAS;AAEf,UAAM,OAAO,oBAAK,OAAQ,MAAO;AACjC,wBAAK,YAAa,QAAQ,KAAM,CAAE,CAAE;AACpC,UAAM,OAAO,oBAAK,QAAS,KAAM,CAAE,CAAE;AAErC,WAAO;AAAA,MACN,OAAO,KAAM,CAAE,EAAE;AAAA,MACjB,QAAQ,KAAM,CAAE,EAAE;AAAA,MAClB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,IACZ;AAAA,EAED;AAED;;;AC5BA,IAAI,CAAC,OAAO,UAAU,aAAa;AAClC,GAAC,WAAW;AACX,QAAI,iBAAkB,WAAW;AAEhC,UAAI;AACH,YAAI,SAAS,CAAC;AACd,YAAI,kBAAkB,OAAO;AAC7B,YAAI,SAAS,gBAAgB,QAAQ,QAAQ,MAAM,KAAK;AAAA,MACzD,SAAQ,OAAO;AAAA,MAAC;AAChB,aAAO;AAAA,IACR,EAAE;AACF,QAAI,cAAc,SAASoD,WAAU;AACpC,UAAI,QAAQ,MAAM;AACjB,cAAM,UAAU;AAAA,MACjB;AACA,UAAI,SAAS,OAAO,IAAI;AACxB,UAAIC,QAAO,OAAO;AAElB,UAAIC,SAAQF,YAAW,OAAOA,SAAQ,IAAI;AAC1C,UAAIE,UAASA,QAAO;AACnB,QAAAA,SAAQ;AAAA,MACT;AAEA,UAAIA,SAAQ,KAAKA,UAASD,OAAM;AAC/B,eAAO;AAAA,MACR;AAEA,UAAIE,SAAQ,OAAO,WAAWD,MAAK;AACnC,UAAI;AACJ;AAAA;AAAA,QACCC,UAAS,SAAUA,UAAS;AAAA,QAC5BF,QAAOC,SAAQ;AAAA,QACd;AACD,iBAAS,OAAO,WAAWA,SAAQ,CAAC;AACpC,YAAI,UAAU,SAAU,UAAU,OAAQ;AAEzC,kBAAQC,SAAQ,SAAU,OAAQ,SAAS,QAAS;AAAA,QACrD;AAAA,MACD;AACA,aAAOA;AAAA,IACR;AACA,QAAI,gBAAgB;AACnB,qBAAe,OAAO,WAAW,eAAe;AAAA,QAC/C,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACb,CAAC;AAAA,IACF,OAAO;AACN,aAAO,UAAU,cAAc;AAAA,IAChC;AAAA,EACD,GAAE;AACH;AAEA,IAAI,UAAU;AACd,IAAI,kBAAkB;AAEtB,SAAS,OAAO;AACd,OAAK,QAAQ,IAAI,YAAY,EAAE;AAC/B,OAAK,QAAQ,IAAI,YAAY,GAAG;AAClC;AAEA,SAAS,KAAK,QAAQ,MAAM;AAC1B,OAAK,SAAS;AACd,OAAK,cAAc;AACnB,OAAK,MAAM;AACX,OAAK,WAAW;AAEhB,OAAK,OAAO;AACZ,OAAK,UAAU;AAEf,OAAK,QAAQ,IAAI,KAAK;AACtB,OAAK,QAAQ,IAAI,KAAK;AACxB;AAMA,IAAI,SAAS,IAAI,KAAK;AACtB,IAAI,SAAS,IAAI,KAAK;AAGtB,IAAI,cAAc,IAAI,WAAW,EAAE;AACnC,IAAI,cAAc,IAAI,YAAY,EAAE;AAGpC,IAAI,YAAY,IAAI,WAAW,EAAE;AACjC,IAAI,YAAY,IAAI,YAAY,EAAE;AAGlC,IAAI,SAAS,IAAI,WAAW;AAAA,EAC1B;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EACxB;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EACzB;AAAA,EAAI;AAAA,EAAG;AACT,CAAC;AAGD,IAAI,YAAY,IAAI,KAAK;AACzB,IAAI,UAAU,IAAI,WAAW,MAAM,EAAE;AAOrC,SAAS,qBAAqBC,OAAM,MAAM,OAAOD,QAAO;AACtD,MAAI,GAAGE;AAGP,OAAK,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAAE,IAAAD,MAAK,CAAC,IAAI;AAAA,EAAG;AAC3C,OAAK,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;AAAE,IAAAA,MAAK,IAAI,KAAK,IAAI,IAAI,QAAQ;AAAA,EAAG;AAGpE,OAAKC,OAAMF,QAAO,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACpC,SAAK,CAAC,IAAIE;AACV,IAAAA,QAAO,KAAKD,MAAK,CAAC;AAAA,EACpB;AACF;AAGA,SAAS,uBAAuB,IAAIE,KAAI;AACtC,MAAI;AAGJ,OAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAAE,OAAG,MAAM,CAAC,IAAI;AAAA,EAAG;AAE3C,KAAG,MAAM,CAAC,IAAI;AACd,KAAG,MAAM,CAAC,IAAI;AACd,KAAG,MAAM,CAAC,IAAI;AAEd,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAAE,OAAG,MAAM,CAAC,IAAI,MAAM;AAAA,EAAG;AAClD,OAAK,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAAE,OAAG,MAAM,KAAK,CAAC,IAAI;AAAA,EAAG;AAClD,OAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAAE,OAAG,MAAM,KAAK,MAAM,CAAC,IAAI,MAAM;AAAA,EAAG;AAC5D,OAAK,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAAE,OAAG,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,MAAM;AAAA,EAAG;AAGlE,OAAK,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAAE,IAAAA,IAAG,MAAM,CAAC,IAAI;AAAA,EAAG;AAE3C,EAAAA,IAAG,MAAM,CAAC,IAAI;AAEd,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAAE,IAAAA,IAAG,MAAM,CAAC,IAAI;AAAA,EAAG;AAC9C;AAGA,IAAI,OAAO,IAAI,YAAY,EAAE;AAE7B,SAAS,gBAAgBC,IAAGC,UAAS,KAAK,KAAK;AAC7C,MAAI,GAAGH;AAGP,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAAE,IAAAE,GAAE,MAAM,CAAC,IAAI;AAAA,EAAG;AAG3C,OAAK,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAAE,IAAAA,GAAE,MAAMC,SAAQ,MAAM,CAAC,CAAC;AAAA,EAAK;AAEzD,EAAAD,GAAE,MAAM,CAAC,IAAI;AAGb,OAAKF,OAAM,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAChC,SAAK,CAAC,IAAIA;AACV,IAAAA,QAAOE,GAAE,MAAM,CAAC;AAAA,EAClB;AAGA,OAAK,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AACxB,QAAIC,SAAQ,MAAM,CAAC,GAAG;AAAE,MAAAD,GAAE,MAAM,KAAKC,SAAQ,MAAM,CAAC,CAAC,GAAG,IAAI;AAAA,IAAG;AAAA,EACjE;AACF;AAOA,SAAS,YAAY,GAAG;AAEtB,MAAI,CAAC,EAAE,YAAY;AAEjB,MAAE,MAAM,EAAE,OAAO,EAAE,aAAa;AAChC,MAAE,WAAW;AAAA,EACf;AAGA,MAAI,MAAM,EAAE,MAAM;AAClB,IAAE,SAAS;AAEX,SAAO;AACT;AAGA,SAAS,eAAe,GAAG,KAAK,MAAM;AACpC,MAAI,CAAC,KACH;AAAE,WAAO;AAAA,EAAM;AAEjB,SAAO,EAAE,WAAW,IAAI;AACtB,MAAE,OAAO,EAAE,OAAO,EAAE,aAAa,KAAK,EAAE;AACxC,MAAE,YAAY;AAAA,EAChB;AAEA,MAAIC,OAAM,EAAE,MAAO,UAAY,KAAK;AACpC,IAAE,SAAS;AACX,IAAE,YAAY;AACd,SAAOA,OAAM;AACf;AAGA,SAAS,mBAAmB,GAAGF,IAAG;AAChC,SAAO,EAAE,WAAW,IAAI;AACtB,MAAE,OAAO,EAAE,OAAO,EAAE,aAAa,KAAK,EAAE;AACxC,MAAE,YAAY;AAAA,EAChB;AAEA,MAAIF,OAAM,GAAG,MAAM,GAAG,MAAM;AAC5B,MAAI,MAAM,EAAE;AAGZ,KAAG;AACD,UAAM,IAAI,OAAO,MAAM;AACvB,aAAS;AACT,MAAE;AAEF,IAAAA,QAAOE,GAAE,MAAM,GAAG;AAClB,WAAOA,GAAE,MAAM,GAAG;AAAA,EACpB,SAAS,OAAO;AAEhB,IAAE,MAAM;AACR,IAAE,YAAY;AAEd,SAAOA,GAAE,MAAMF,OAAM,GAAG;AAC1B;AAGA,SAAS,kBAAkB,GAAG,IAAIC,KAAI;AACpC,MAAI,MAAM,OAAO;AACjB,MAAI,GAAG,KAAKI;AAGZ,SAAO,eAAe,GAAG,GAAG,GAAG;AAG/B,UAAQ,eAAe,GAAG,GAAG,CAAC;AAG9B,UAAQ,eAAe,GAAG,GAAG,CAAC;AAE9B,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAAE,YAAQ,CAAC,IAAI;AAAA,EAAG;AAG3C,OAAK,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;AAE1B,QAAIC,QAAO,eAAe,GAAG,GAAG,CAAC;AACjC,YAAQ,OAAO,CAAC,CAAC,IAAIA;AAAA,EACvB;AAGA,kBAAgB,WAAW,SAAS,GAAG,EAAE;AAGzC,OAAK,MAAM,GAAG,MAAM,OAAO,SAAQ;AACjC,QAAI,MAAM,mBAAmB,GAAG,SAAS;AAEzC,YAAQ,KAAK;AAAA,MACX,KAAK;AAEH,YAAI,OAAO,QAAQ,MAAM,CAAC;AAC1B,aAAKD,UAAS,eAAe,GAAG,GAAG,CAAC,GAAGA,SAAQ,EAAEA,SAAQ;AACvD,kBAAQ,KAAK,IAAI;AAAA,QACnB;AACA;AAAA,MACF,KAAK;AAEH,aAAKA,UAAS,eAAe,GAAG,GAAG,CAAC,GAAGA,SAAQ,EAAEA,SAAQ;AACvD,kBAAQ,KAAK,IAAI;AAAA,QACnB;AACA;AAAA,MACF,KAAK;AAEH,aAAKA,UAAS,eAAe,GAAG,GAAG,EAAE,GAAGA,SAAQ,EAAEA,SAAQ;AACxD,kBAAQ,KAAK,IAAI;AAAA,QACnB;AACA;AAAA,MACF;AAEE,gBAAQ,KAAK,IAAI;AACjB;AAAA,IACJ;AAAA,EACF;AAGA,kBAAgB,IAAI,SAAS,GAAG,IAAI;AACpC,kBAAgBJ,KAAI,SAAS,MAAM,KAAK;AAC1C;AAOA,SAAS,wBAAwB,GAAG,IAAIA,KAAI;AAC1C,SAAO,GAAG;AACR,QAAI,MAAM,mBAAmB,GAAG,EAAE;AAGlC,QAAI,QAAQ,KAAK;AACf,aAAO;AAAA,IACT;AAEA,QAAI,MAAM,KAAK;AACb,QAAE,KAAK,EAAE,SAAS,IAAI;AAAA,IACxB,OAAO;AACL,UAAII,SAAQ,MAAME;AAClB,UAAI;AAEJ,aAAO;AAGP,MAAAF,UAAS,eAAe,GAAG,YAAY,GAAG,GAAG,YAAY,GAAG,CAAC;AAE7D,aAAO,mBAAmB,GAAGJ,GAAE;AAG/B,MAAAM,QAAO,EAAE,UAAU,eAAe,GAAG,UAAU,IAAI,GAAG,UAAU,IAAI,CAAC;AAGrE,WAAK,IAAIA,OAAM,IAAIA,QAAOF,SAAQ,EAAE,GAAG;AACrC,UAAE,KAAK,EAAE,SAAS,IAAI,EAAE,KAAK,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;AAGA,SAAS,gCAAgC,GAAG;AAC1C,MAAIA,SAAQ;AACZ,MAAI;AAGJ,SAAO,EAAE,WAAW,GAAG;AACrB,MAAE;AACF,MAAE,YAAY;AAAA,EAChB;AAGA,EAAAA,UAAS,EAAE,OAAO,EAAE,cAAc,CAAC;AACnC,EAAAA,UAAS,MAAMA,UAAS,EAAE,OAAO,EAAE,WAAW;AAG9C,cAAY,EAAE,OAAO,EAAE,cAAc,CAAC;AACtC,cAAY,MAAM,YAAY,EAAE,OAAO,EAAE,cAAc,CAAC;AAGxD,MAAIA,aAAY,CAAC,YAAY,QAC3B;AAAE,WAAO;AAAA,EAAiB;AAE5B,IAAE,eAAe;AAGjB,OAAK,IAAIA,SAAQ,GAAG,EAAE,GACpB;AAAE,MAAE,KAAK,EAAE,SAAS,IAAI,EAAE,OAAO,EAAE,aAAa;AAAA,EAAG;AAGrD,IAAE,WAAW;AAEb,SAAO;AACT;AAGA,SAAS,gBAAgB,QAAQ,MAAM;AACrC,MAAI,IAAI,IAAI,KAAK,QAAQ,IAAI;AAC7B,MAAI,QAAQ,OAAO;AAEnB,KAAG;AAED,aAAS,YAAY,CAAC;AAGtB,YAAQ,eAAe,GAAG,GAAG,CAAC;AAG9B,YAAQ,OAAO;AAAA,MACb,KAAK;AAEH,cAAM,gCAAgC,CAAC;AACvC;AAAA,MACF,KAAK;AAEH,cAAM,wBAAwB,GAAG,QAAQ,MAAM;AAC/C;AAAA,MACF,KAAK;AAEH,0BAAkB,GAAG,EAAE,OAAO,EAAE,KAAK;AACrC,cAAM,wBAAwB,GAAG,EAAE,OAAO,EAAE,KAAK;AACjD;AAAA,MACF;AACE,cAAM;AAAA,IACV;AAEA,QAAI,QAAQ,SACV;AAAE,YAAM,IAAI,MAAM,YAAY;AAAA,IAAG;AAAA,EAErC,SAAS,CAAC;AAEV,MAAI,EAAE,UAAU,EAAE,KAAK,QAAQ;AAC7B,QAAI,OAAO,EAAE,KAAK,UAAU,YAC1B;AAAE,aAAO,EAAE,KAAK,MAAM,GAAG,EAAE,OAAO;AAAA,IAAG,OAErC;AAAE,aAAO,EAAE,KAAK,SAAS,GAAG,EAAE,OAAO;AAAA,IAAG;AAAA,EAC5C;AAEA,SAAO,EAAE;AACX;AAOA,uBAAuB,QAAQ,MAAM;AAGrC,qBAAqB,aAAa,aAAa,GAAG,CAAC;AACnD,qBAAqB,WAAW,WAAW,GAAG,CAAC;AAG/C,YAAY,EAAE,IAAI;AAClB,YAAY,EAAE,IAAI;AAElB,IAAI,cAAc;AAIlB,SAAS,OAAO,IAAIG,KAAI,IAAI,IAAIN,IAAG;AAC/B,SAAO,KAAK,IAAI,IAAIA,IAAG,CAAC,IAAI,KACxB,IAAI,KAAK,IAAI,IAAIA,IAAG,CAAC,IAAIA,KAAIM,MAC7B,KAAK,IAAIN,MAAK,KAAK,IAAIA,IAAG,CAAC,IAAI,KAC/B,KAAK,IAAIA,IAAG,CAAC,IAAI;AACzB;AAWA,SAAS,cAAc;AACnB,OAAK,KAAK,OAAO;AACjB,OAAK,KAAK,OAAO;AACjB,OAAK,KAAK,OAAO;AACjB,OAAK,KAAK,OAAO;AACrB;AAKA,YAAY,UAAU,UAAU,WAAW;AACvC,SAAO,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,EAAE;AAC9E;AAQA,YAAY,UAAU,WAAW,SAASO,IAAGC,IAAG;AAC5C,MAAI,OAAOD,OAAM,UAAU;AACvB,QAAI,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,EAAE,GAAG;AAClC,WAAK,KAAKA;AACV,WAAK,KAAKA;AAAA,IACd;AACA,QAAIA,KAAI,KAAK,IAAI;AACb,WAAK,KAAKA;AAAA,IACd;AACA,QAAIA,KAAI,KAAK,IAAI;AACb,WAAK,KAAKA;AAAA,IACd;AAAA,EACJ;AACA,MAAI,OAAOC,OAAM,UAAU;AACvB,QAAI,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,EAAE,GAAG;AAClC,WAAK,KAAKA;AACV,WAAK,KAAKA;AAAA,IACd;AACA,QAAIA,KAAI,KAAK,IAAI;AACb,WAAK,KAAKA;AAAA,IACd;AACA,QAAIA,KAAI,KAAK,IAAI;AACb,WAAK,KAAKA;AAAA,IACd;AAAA,EACJ;AACJ;AAQA,YAAY,UAAU,OAAO,SAASD,IAAG;AACrC,OAAK,SAASA,IAAG,IAAI;AACzB;AAQA,YAAY,UAAU,OAAO,SAASC,IAAG;AACrC,OAAK,SAAS,MAAMA,EAAC;AACzB;AAcA,YAAY,UAAU,YAAY,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAID,IAAGC,IAAG;AAIrE,MAAI,KAAK,CAAC,IAAI,EAAE;AAChB,MAAI,KAAK,CAAC,IAAI,EAAE;AAChB,MAAI,KAAK,CAAC,IAAI,EAAE;AAChB,MAAI,KAAK,CAACD,IAAGC,EAAC;AAEd,OAAK,SAAS,IAAI,EAAE;AACpB,OAAK,SAASD,IAAGC,EAAC;AAElB,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AACzB,QAAIC,KAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AACzC,QAAIC,KAAI,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AACrD,QAAIC,KAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;AAE5B,QAAID,OAAM,GAAG;AACT,UAAID,OAAM,GAAG;AAAE;AAAA,MAAU;AACzB,UAAIT,KAAI,CAACW,KAAIF;AACb,UAAI,IAAIT,MAAKA,KAAI,GAAG;AAChB,YAAI,MAAM,GAAG;AAAE,eAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAGA,EAAC,CAAC;AAAA,QAAG;AACjE,YAAI,MAAM,GAAG;AAAE,eAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAGA,EAAC,CAAC;AAAA,QAAG;AAAA,MACrE;AACA;AAAA,IACJ;AAEA,QAAI,OAAO,KAAK,IAAIS,IAAG,CAAC,IAAI,IAAIE,KAAID;AACpC,QAAI,OAAO,GAAG;AAAE;AAAA,IAAU;AAC1B,QAAI,MAAM,CAACD,KAAI,KAAK,KAAK,IAAI,MAAM,IAAIC;AACvC,QAAI,IAAI,MAAM,KAAK,GAAG;AAClB,UAAI,MAAM,GAAG;AAAE,aAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAAA,MAAG;AAClE,UAAI,MAAM,GAAG;AAAE,aAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AAAA,MAAG;AAAA,IACtE;AACA,QAAIE,OAAM,CAACH,KAAI,KAAK,KAAK,IAAI,MAAM,IAAIC;AACvC,QAAI,IAAIE,OAAMA,MAAK,GAAG;AAClB,UAAI,MAAM,GAAG;AAAE,aAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAGA,GAAE,CAAC;AAAA,MAAG;AAClE,UAAI,MAAM,GAAG;AAAE,aAAK,KAAK,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAGA,GAAE,CAAC;AAAA,MAAG;AAAA,IACtE;AAAA,EACJ;AACJ;AAYA,YAAY,UAAU,UAAU,SAAS,IAAI,IAAI,IAAI,IAAIL,IAAGC,IAAG;AAC3D,MAAI,OAAO,KAAK,IAAI,KAAK,KAAK;AAC9B,MAAI,OAAO,KAAK,IAAI,KAAK,KAAK;AAC9B,MAAI,OAAO,OAAO,IAAI,KAAKD,KAAI;AAC/B,MAAI,OAAO,OAAO,IAAI,KAAKC,KAAI;AAC/B,OAAK,UAAU,IAAI,IAAI,MAAM,MAAM,MAAM,MAAMD,IAAGC,EAAC;AACvD;AAWA,SAASK,QAAO;AACZ,OAAK,WAAW,CAAC;AACjB,OAAK,OAAO;AACZ,OAAK,SAAS;AACd,OAAK,cAAc;AACvB;AAMAA,MAAK,UAAU,SAAS,SAASN,IAAGC,IAAG;AACnC,OAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,GAAGD;AAAA,IACH,GAAGC;AAAA,EACP,CAAC;AACL;AAMAK,MAAK,UAAU,SAAS,SAASN,IAAGC,IAAG;AACnC,OAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN,GAAGD;AAAA,IACH,GAAGC;AAAA,EACP,CAAC;AACL;AA4BAK,MAAK,UAAU,UAAUA,MAAK,UAAU,gBAAgB,SAAS,IAAI,IAAI,IAAI,IAAIN,IAAGC,IAAG;AACnF,OAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAGD;AAAA,IACH,GAAGC;AAAA,EACP,CAAC;AACL;AAuBAK,MAAK,UAAU,SAASA,MAAK,UAAU,mBAAmB,SAAS,IAAI,IAAIN,IAAGC,IAAG;AAC7E,OAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,GAAGD;AAAA,IACH,GAAGC;AAAA,EACP,CAAC;AACL;AAaAK,MAAK,UAAU,QAAQA,MAAK,UAAU,YAAY,WAAW;AACzD,OAAK,SAAS,KAAK;AAAA,IACf,MAAM;AAAA,EACV,CAAC;AACL;AAMAA,MAAK,UAAU,SAAS,SAAS,gBAAgB;AAC7C,MAAI,eAAe,UAAU;AACzB,qBAAiB,eAAe;AAAA,EACpC,WAAW,0BAA0B,aAAa;AAC9C,QAAI,MAAM;AACV,SAAK,OAAO,IAAI,IAAI,IAAI,EAAE;AAC1B,SAAK,OAAO,IAAI,IAAI,IAAI,EAAE;AAC1B,SAAK,OAAO,IAAI,IAAI,IAAI,EAAE;AAC1B,SAAK,OAAO,IAAI,IAAI,IAAI,EAAE;AAC1B,SAAK,MAAM;AACX;AAAA,EACJ;AAEA,QAAM,UAAU,KAAK,MAAM,KAAK,UAAU,cAAc;AAC5D;AAMAA,MAAK,UAAU,iBAAiB,WAAW;AACvC,MAAI,MAAM,IAAI,YAAY;AAE1B,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,QAAI,MAAM,KAAK,SAAS,CAAC;AACzB,YAAQ,IAAI,MAAM;AAAA,MACd,KAAK;AACD,YAAI,SAAS,IAAI,GAAG,IAAI,CAAC;AACzB,iBAAS,QAAQ,IAAI;AACrB,iBAAS,QAAQ,IAAI;AACrB;AAAA,MACJ,KAAK;AACD,YAAI,SAAS,IAAI,GAAG,IAAI,CAAC;AACzB,gBAAQ,IAAI;AACZ,gBAAQ,IAAI;AACZ;AAAA,MACJ,KAAK;AACD,YAAI,QAAQ,OAAO,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACtD,gBAAQ,IAAI;AACZ,gBAAQ,IAAI;AACZ;AAAA,MACJ,KAAK;AACD,YAAI,UAAU,OAAO,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACxE,gBAAQ,IAAI;AACZ,gBAAQ,IAAI;AACZ;AAAA,MACJ,KAAK;AACD,gBAAQ;AACR,gBAAQ;AACR;AAAA,MACJ;AACI,cAAM,IAAI,MAAM,6BAA6B,IAAI,IAAI;AAAA,IAC7D;AAAA,EACJ;AACA,MAAI,IAAI,QAAQ,GAAG;AACf,QAAI,SAAS,GAAG,CAAC;AAAA,EACrB;AACA,SAAO;AACX;AAMAA,MAAK,UAAU,OAAO,SAAS,KAAK;AAChC,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK,GAAG;AAC9C,QAAI,MAAM,KAAK,SAAS,CAAC;AACzB,QAAI,IAAI,SAAS,KAAK;AAClB,UAAI,OAAO,IAAI,GAAG,IAAI,CAAC;AAAA,IAC3B,WAAW,IAAI,SAAS,KAAK;AACzB,UAAI,OAAO,IAAI,GAAG,IAAI,CAAC;AAAA,IAC3B,WAAW,IAAI,SAAS,KAAK;AACzB,UAAI,cAAc,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IAClE,WAAW,IAAI,SAAS,KAAK;AACzB,UAAI,iBAAiB,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IACrD,WAAW,IAAI,SAAS,KAAK;AACzB,UAAI,UAAU;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,KAAK,MAAM;AACX,QAAI,YAAY,KAAK;AACrB,QAAI,KAAK;AAAA,EACb;AAEA,MAAI,KAAK,QAAQ;AACb,QAAI,cAAc,KAAK;AACvB,QAAI,YAAY,KAAK;AACrB,QAAI,OAAO;AAAA,EACf;AACJ;AAQAA,MAAK,UAAU,aAAa,SAAS,eAAe;AAChD,kBAAgB,kBAAkB,SAAY,gBAAgB;AAE9D,WAAS,cAAc,GAAG;AACtB,QAAI,KAAK,MAAM,CAAC,MAAM,GAAG;AACrB,aAAO,KAAK,KAAK,MAAM,CAAC;AAAA,IAC5B,OAAO;AACH,aAAO,EAAE,QAAQ,aAAa;AAAA,IAClC;AAAA,EACJ;AAEA,WAAS,aAAa;AAClB,QAAI,cAAc;AAElB,QAAI,IAAI;AACR,aAASC,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK,GAAG;AAC1C,UAAI,IAAI,YAAYA,EAAC;AACrB,UAAI,KAAK,KAAKA,KAAI,GAAG;AACjB,aAAK;AAAA,MACT;AAEA,WAAK,cAAc,CAAC;AAAA,IACxB;AAEA,WAAO;AAAA,EACX;AAEA,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK,GAAG;AAC9C,QAAI,MAAM,KAAK,SAAS,CAAC;AACzB,QAAI,IAAI,SAAS,KAAK;AAClB,WAAK,MAAM,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,IACtC,WAAW,IAAI,SAAS,KAAK;AACzB,WAAK,MAAM,WAAW,IAAI,GAAG,IAAI,CAAC;AAAA,IACtC,WAAW,IAAI,SAAS,KAAK;AACzB,WAAK,MAAM,WAAW,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IACtE,WAAW,IAAI,SAAS,KAAK;AACzB,WAAK,MAAM,WAAW,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,IACtD,WAAW,IAAI,SAAS,KAAK;AACzB,WAAK;AAAA,IACT;AAAA,EACJ;AAEA,SAAO;AACX;AAOAD,MAAK,UAAU,QAAQ,SAAS,eAAe;AAC3C,MAAI,MAAM;AACV,SAAO,KAAK,WAAW,aAAa;AACpC,SAAO;AACP,MAAI,KAAK,QAAQ,KAAK,SAAS,SAAS;AACpC,QAAI,KAAK,SAAS,MAAM;AACpB,aAAO;AAAA,IACX,OAAO;AACH,aAAO,YAAY,KAAK,OAAO;AAAA,IACnC;AAAA,EACJ;AAEA,MAAI,KAAK,QAAQ;AACb,WAAO,cAAc,KAAK,SAAS,qBAAqB,KAAK,cAAc;AAAA,EAC/E;AAEA,SAAO;AACP,SAAO;AACX;AAOAA,MAAK,UAAU,eAAe,SAAS,eAAe;AAClD,MAAI,gBAAgB,KAAK,WAAW,aAAa;AACjD,MAAI,UAAU,SAAS,gBAAgB,8BAA8B,MAAM;AAE3E,UAAQ,aAAa,KAAK,aAAa;AAEvC,SAAO;AACX;AAIA,SAAS,KAAK,SAAS;AACnB,QAAM,IAAI,MAAM,OAAO;AAC3B;AAIA,SAAS,SAAS,WAAW,SAAS;AAClC,MAAI,CAAC,WAAW;AACZ,SAAK,OAAO;AAAA,EAChB;AACJ;AACA,IAAI,QAAQ,EAAE,MAAY,UAAoB,QAAQ,SAAS;AAI/D,IAAI,UAAU;AACd,IAAI,UAAU;AAMd,IAAI,SAAS,CAAC;AAKd,IAAI,SAAS,CAAC;AAKd,IAAI,SAAS,CAAC;AAGd,SAAS,SAAS,GAAG;AACjB,SAAO,WAAW;AACd,WAAO;AAAA,EACX;AACJ;AASA,OAAO,OAAO,SAAS,GAAG;AACtB,QAAM,SAAS,KAAK,KAAK,KAAK,KAAK,yCAAyC;AAC5E,SAAO,CAAC,CAAC;AACb;AAKA,OAAO,OAAO,SAAS,CAAC;AAOxB,OAAO,OAAO,SAAS,GAAG;AACtB,SAAO,CAAC,EAAE,WAAW,CAAC,CAAC;AAC3B;AAMA,OAAO,OAAO,SAAS,CAAC;AAOxB,OAAO,YAAY,SAAS,GAAG;AAC3B,MAAI,OAAO,MAAM,aAAa;AAC1B,QAAI;AACJ,YAAQ,KAAK,kHAAkH;AAAA,EACnI;AACA,MAAIJ,KAAI,CAAC;AACT,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAAG;AAClC,IAAAA,GAAE,CAAC,IAAI,EAAE,WAAW,CAAC;AAAA,EACzB;AAEA,SAAOA;AACX;AAMA,OAAO,YAAY,SAAS,GAAG;AAC3B,MAAI,OAAO,MAAM,aAAa;AAC1B,WAAO;AAAA,EACX;AACA,SAAO,EAAE;AACb;AAOA,OAAO,SAAS,SAAS,GAAG;AACxB,SAAO,CAAE,KAAK,IAAK,KAAM,IAAI,GAAI;AACrC;AAMA,OAAO,SAAS,SAAS,CAAC;AAO1B,OAAO,QAAQ,SAAS,GAAG;AAEvB,MAAI,KAAK,SAAS;AACd,QAAI,EAAE,IAAI,UAAU;AAAA,EACxB;AAEA,SAAO,CAAE,KAAK,IAAK,KAAM,IAAI,GAAI;AACrC;AAMA,OAAO,QAAQ,SAAS,CAAC;AAOzB,OAAO,SAAS,SAAS,GAAG;AACxB,SAAO,CAAE,KAAK,KAAM,KAAO,KAAK,IAAK,KAAM,IAAI,GAAI;AACvD;AAMA,OAAO,SAAS,SAAS,CAAC;AAO1B,OAAO,QAAQ,SAAS,GAAG;AACvB,SAAO,CAAE,KAAK,KAAM,KAAO,KAAK,KAAM,KAAO,KAAK,IAAK,KAAM,IAAI,GAAI;AACzE;AAMA,OAAO,QAAQ,SAAS,CAAC;AAOzB,OAAO,OAAO,SAAS,GAAG;AAEtB,MAAI,KAAK,SAAS;AACd,QAAI,EAAE,IAAI,UAAU;AAAA,EACxB;AAEA,SAAO,CAAE,KAAK,KAAM,KAAO,KAAK,KAAM,KAAO,KAAK,IAAK,KAAM,IAAI,GAAI;AACzE;AAMA,OAAO,OAAO,SAAS,CAAC;AAExB,OAAO,QAAQ,OAAO;AACtB,OAAO,QAAQ,OAAO;AAEtB,OAAO,QAAQ,OAAO;AACtB,OAAO,QAAQ,OAAO;AAEtB,OAAO,SAAS,OAAO;AACvB,OAAO,SAAS,OAAO;AAOvB,OAAO,eAAe,SAAS,GAAG;AAC9B,SAAO,CAAC,GAAG,GAAG,GAAG,GAAI,KAAK,KAAM,KAAO,KAAK,KAAM,KAAO,KAAK,IAAK,KAAM,IAAI,GAAI;AACrF;AAMA,OAAO,eAAe,SAAS,CAAC;AAOhC,OAAO,MAAM,SAAS,GAAG;AACrB,QAAM,SAAS,EAAE,WAAW,GAAG,2CAA2C;AAC1E,SAAO;AAAA,IAAC,EAAE,WAAW,CAAC;AAAA,IACd,EAAE,WAAW,CAAC;AAAA,IACd,EAAE,WAAW,CAAC;AAAA,IACd,EAAE,WAAW,CAAC;AAAA,EAAC;AAC3B;AAMA,OAAO,MAAM,SAAS,CAAC;AAIvB,OAAO,QAAQ,OAAO;AACtB,OAAO,QAAQ,OAAO;AAEtB,OAAO,SAAS,OAAO;AACvB,OAAO,SAAS,OAAO;AAEvB,OAAO,UAAU,OAAO;AACxB,OAAO,UAAU,OAAO;AAExB,OAAO,MAAM,OAAO;AACpB,OAAO,MAAM,OAAO;AAQpB,OAAO,SAAS,SAAS,GAAG;AACxB,MAAI,KAAK,QAAQ,KAAK,KAAK;AACvB,WAAO,CAAC,IAAI,GAAG;AAAA,EACnB,WAAW,KAAK,OAAO,KAAK,MAAM;AAC9B,QAAI,IAAI;AACR,WAAO,EAAE,KAAK,KAAK,KAAK,IAAI,GAAI;AAAA,EACpC,WAAW,KAAK,SAAS,KAAK,MAAM;AAChC,QAAI,CAAC,IAAI;AACT,WAAO,EAAE,KAAK,KAAK,KAAK,IAAI,GAAI;AAAA,EACpC,WAAW,KAAK,UAAU,KAAK,OAAO;AAClC,WAAO,OAAO,SAAS,CAAC;AAAA,EAC5B,OAAO;AACH,WAAO,OAAO,SAAS,CAAC;AAAA,EAC5B;AACJ;AAMA,OAAO,SAAS,SAAS,GAAG;AACxB,SAAO,OAAO,OAAO,CAAC,EAAE;AAC5B;AAQA,OAAO,WAAW,SAAS,GAAG;AAC1B,SAAO,CAAC,IAAK,KAAK,IAAK,KAAM,IAAI,GAAI;AACzC;AAMA,OAAO,WAAW,SAAS,CAAC;AAS5B,OAAO,WAAW,SAAS,GAAG;AAC1B,SAAO,CAAC,IAAK,KAAK,KAAM,KAAO,KAAK,KAAM,KAAO,KAAK,IAAK,KAAM,IAAI,GAAI;AAC7E;AAMA,OAAO,WAAW,SAAS,CAAC;AAM5B,OAAO,OAAO,SAAS,GAAG;AACtB,MAAIM,SAAQ,EAAE,SAAS;AAIvB,MAAI,IAAI,gDAAgD,KAAKA,MAAK;AAClE,MAAI,GAAG;AACH,QAAI,UAAU,WAAW,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,OAAO;AAClE,IAAAA,UAAS,KAAK,MAAM,IAAI,OAAO,IAAI,SAAS,SAAS;AAAA,EACzD;AAEA,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,KAAKA,OAAM,QAAQ,IAAI,IAAI,KAAK,GAAG;AAC/C,QAAIJ,KAAII,OAAM,CAAC;AACf,QAAIJ,OAAM,KAAK;AACX,iBAAWI,OAAM,EAAE,CAAC,MAAM,MAAM,MAAM;AAAA,IAC1C,WAAWJ,OAAM,KAAK;AAClB,iBAAW;AAAA,IACf,WAAWA,OAAM,KAAK;AAClB,iBAAW;AAAA,IACf,OAAO;AACH,iBAAWA;AAAA,IACf;AAAA,EACJ;AAEA,aAAY,QAAQ,SAAS,IAAK,MAAM;AACxC,MAAI,MAAM,CAAC,EAAE;AACb,WAAS,MAAM,GAAG,OAAO,QAAQ,QAAQ,MAAM,MAAM,OAAO,GAAG;AAC3D,QAAI,KAAK,SAAS,QAAQ,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;AAAA,EACjD;AAEA,SAAO;AACX;AAMA,OAAO,OAAO,SAAS,GAAG;AACtB,SAAO,OAAO,KAAK,CAAC,EAAE;AAC1B;AAEA,OAAO,OAAO,OAAO;AACrB,OAAO,OAAO,OAAO;AAErB,OAAO,SAAS,OAAO;AACvB,OAAO,SAAS,OAAO;AAQvB,OAAO,OAAO,SAASK,OAAM,QAAQ,UAAU;AAC3C,MAAI,aAAa,CAAC;AAClB,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK,UAAU,GAAG;AAC5C,eAAW,CAAC,IAAIA,MAAK,SAAS,MAAM;AAAA,EACxC;AAEA,SAAO,OAAO,aAAa,MAAM,MAAM,UAAU;AACrD;AAQA,OAAO,QAAQ,SAASA,OAAM,QAAQ,UAAU;AAC5C,MAAI,aAAa,CAAC;AAClB,MAAI,WAAW,WAAW;AAC1B,WAAS,IAAI,GAAG,IAAI,UAAU,KAAK,UAAU,GAAG;AAC5C,eAAW,CAAC,IAAIA,MAAK,UAAU,MAAM;AAAA,EACzC;AAEA,SAAO,OAAO,aAAa,MAAM,MAAM,UAAU;AACrD;AAOA,OAAO,QAAQ,SAAS,GAAG;AACvB,MAAIP,KAAI,CAAC;AACT,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAAG;AAClC,QAAI,YAAY,EAAE,WAAW,CAAC;AAC9B,IAAAA,GAAEA,GAAE,MAAM,IAAK,aAAa,IAAK;AACjC,IAAAA,GAAEA,GAAE,MAAM,IAAI,YAAY;AAAA,EAC9B;AAEA,SAAOA;AACX;AAMA,OAAO,QAAQ,SAAS,GAAG;AACvB,SAAO,EAAE,SAAS;AACtB;AAeA,IAAI,uBAAuB;AAAA,EACvB;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAAA,EAEA;AAAA;AAAA,IACA;AAAA;AAEJ;AAaA,OAAO,YAAY,SAAS,UAAU,QAAQ,YAAY,UAAU;AAChE,MAAIQ,SAAQ,qBAAqB,QAAQ;AACzC,MAAIA,WAAU,QAAW;AACrB,WAAO;AAAA,EACX;AAEA,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,QAAIN,KAAI,SAAS,SAAS,SAAS,CAAC;AAGpC,QAAIA,MAAK,KAAM;AACX,gBAAU,OAAO,aAAaA,EAAC;AAAA,IACnC,OAAO;AACH,gBAAUM,OAAMN,KAAI,GAAI;AAAA,IAC5B;AAAA,EACJ;AAEA,SAAO;AACX;AAMA,IAAI,wBAAwB,OAAO,YAAY,cAAc,oBAAI,QAAQ;AACzE,IAAI;AACJ,IAAI,sBAAsB,SAAU,UAAU;AAI1C,MAAI,CAAC,sBAAsB;AACvB,2BAAuB,CAAC;AACxB,aAAS,KAAK,sBAAsB;AAEhC,2BAAqB,CAAC,IAAI,IAAI,OAAO,CAAC;AAAA,IAC1C;AAAA,EACJ;AAEA,MAAI,WAAW,qBAAqB,QAAQ;AAC5C,MAAI,aAAa,QAAW;AACxB,WAAO;AAAA,EACX;AAMA,MAAI,uBAAuB;AACvB,QAAI,cAAc,sBAAsB,IAAI,QAAQ;AACpD,QAAI,gBAAgB,QAAW;AAC3B,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,MAAI,gBAAgB,qBAAqB,QAAQ;AACjD,MAAI,kBAAkB,QAAW;AAC7B,WAAO;AAAA,EACX;AAEA,MAAI,gBAAgB,CAAC;AACrB,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC3C,kBAAc,cAAc,WAAW,CAAC,CAAC,IAAI,IAAI;AAAA,EACrD;AAEA,MAAI,uBAAuB;AACvB,0BAAsB,IAAI,UAAU,aAAa;AAAA,EACrD;AAEA,SAAO;AACX;AAWA,OAAO,YAAY,SAAS,KAAK,UAAU;AACvC,MAAIM,SAAQ,oBAAoB,QAAQ;AACxC,MAAIA,WAAU,QAAW;AACrB,WAAO;AAAA,EACX;AAEA,MAAI,SAAS,CAAC;AACd,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAIN,KAAI,IAAI,WAAW,CAAC;AAIxB,QAAIA,MAAK,KAAM;AACX,MAAAA,KAAIM,OAAMN,EAAC;AACX,UAAIA,OAAM,QAAW;AAGjB,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO,CAAC,IAAIA;AAAA,EAEhB;AAEA,SAAO;AACX;AAOA,OAAO,YAAY,SAAS,KAAK,UAAU;AACvC,MAAIF,KAAI,OAAO,UAAU,KAAK,QAAQ;AACtC,MAAIA,OAAM,QAAW;AACjB,WAAOA,GAAE;AAAA,EACb,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AAGA,SAAS,gBAAgBM,QAAO;AAC5B,SAAOA,UAAS,QAAQA,UAAS;AACrC;AAGA,SAAS,0BAA0B,QAAQ,KAAK,QAAQ;AACpD,MAAI,YAAY;AAChB,MAAI,YAAY,OAAO;AACvB,SAAO,MAAM,aAAa,YAAY,MAAM,OAAO,GAAG,MAAM,GAAG;AAC3D,MAAE;AACF,MAAE;AAAA,EACN;AACA,SAAO,KAAK,MAAQ,YAAY,CAAE;AAClC,SAAO;AACX;AAGA,SAAS,yBAAyB,QAAQ,QAAQ,QAAQ;AACtD,MAAI,YAAY;AAChB,MAAI,YAAY,OAAO;AACvB,MAAI,MAAM;AACV,SAAO,MAAM,aAAa,YAAY,IAAI;AACtC,QAAIA,SAAQ,OAAO,GAAG;AACtB,QAAI,CAAC,gBAAgBA,MAAK,GAAG;AACzB;AAAA,IACJ;AASA,QAAIA,WAAU,KAAK,MAAM,IAAI,aAAa,OAAO,MAAM,CAAC,MAAM,GAAG;AAC7D;AAAA,IACJ;AAEA,MAAE;AACF,MAAE;AAAA,EACN;AACA,SAAO,KAAK,YAAY,CAAC;AACzB,WAAS,IAAI,QAAQ,IAAI,KAAK,EAAE,GAAG;AAC/B,WAAO,KAAM,OAAO,CAAC,IAAI,MAAO,GAAI;AAAA,EACxC;AACA,SAAO;AACX;AAGA,SAAS,yBAAyB,QAAQ,QAAQ,QAAQ;AACtD,MAAI,YAAY;AAChB,MAAI,YAAY,OAAO;AACvB,MAAI,MAAM;AACV,SAAO,MAAM,aAAa,YAAY,IAAI;AACtC,QAAIA,SAAQ,OAAO,GAAG;AAQtB,QAAIA,WAAU,GAAG;AACb;AAAA,IACJ;AAQA,QAAI,gBAAgBA,MAAK,KAAK,MAAM,IAAI,aAAa,gBAAgB,OAAO,MAAM,CAAC,CAAC,GAAG;AACnF;AAAA,IACJ;AAEA,MAAE;AACF,MAAE;AAAA,EACN;AACA,SAAO,KAAK,KAAQ,YAAY,CAAE;AAClC,WAAS,IAAI,QAAQ,IAAI,KAAK,EAAE,GAAG;AAC/B,QAAIb,OAAM,OAAO,CAAC;AAClB,WAAO,KAAOA,OAAM,SAAY,IAAK,KAAOA,OAAM,MAAS,GAAI;AAAA,EACnE;AACA,SAAO;AACX;AAcA,OAAO,YAAY,SAAS,QAAQ;AAChC,MAAI,MAAM;AACV,MAAI,SAAS,CAAC;AACd,SAAO,MAAM,OAAO,QAAQ;AACxB,QAAIa,SAAQ,OAAO,GAAG;AACtB,QAAIA,WAAU,GAAG;AACb,YAAM,0BAA0B,QAAQ,KAAK,MAAM;AAAA,IACvD,WAAWA,UAAS,QAAQA,UAAS,KAAK;AACtC,YAAM,yBAAyB,QAAQ,KAAK,MAAM;AAAA,IACtD,OAAO;AACH,YAAM,yBAAyB,QAAQ,KAAK,MAAM;AAAA,IACtD;AAAA,EACJ;AACA,SAAO;AACX;AAQA,OAAO,QAAQ,SAASG,IAAG;AAMvB,MAAI,SAAS;AACb,MAAI,UAAU,CAAC,MAAM;AACrB,MAAIF,QAAO,CAAC;AACZ,WAAS,IAAI,GAAG,IAAIE,GAAE,QAAQ,KAAK,GAAG;AAClC,QAAI,IAAI,OAAO,OAAOA,GAAE,CAAC,CAAC;AAC1B,UAAM,UAAU,KAAK,MAAMF,OAAM,CAAC;AAClC,cAAU,EAAE;AACZ,YAAQ,KAAK,MAAM;AAAA,EACvB;AAEA,MAAIA,MAAK,WAAW,GAAG;AACnB,WAAO,CAAC,GAAG,CAAC;AAAA,EAChB;AAEA,MAAI,iBAAiB,CAAC;AACtB,MAAI,UAAW,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,IAAK;AACrE,MAAI,gBAAgB,CAAC,QAAW,OAAO,MAAM,OAAO,QAAQ,OAAO,QAAQ,OAAO,KAAK,EAAE,OAAO;AAChG,WAAS,MAAM,GAAG,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAC9C,QAAI,gBAAgB,cAAc,QAAQ,GAAG,CAAC;AAC9C,UAAM,UAAU,KAAK,MAAM,gBAAgB,aAAa;AAAA,EAC5D;AAEA,SAAO,MAAM,UAAU;AAAA,IAAO,OAAO,OAAOE,GAAE,MAAM;AAAA,IAC7B,OAAO,QAAQ,OAAO;AAAA,IACtB;AAAA,IACAF;AAAA,EAAI;AAC/B;AAMA,OAAO,QAAQ,SAAS,GAAG;AACvB,SAAO,OAAO,MAAM,CAAC,EAAE;AAC3B;AASA,OAAO,OAAO,SAAS,GAAG;AACtB,MAAI,IAAI,CAAC;AACT,MAAIG,QAAO,OAAO,KAAK,CAAC;AACxB,MAAIhB,UAASgB,MAAK;AAElB,WAAS,IAAI,GAAG,IAAIhB,SAAQ,KAAK,GAAG;AAEhC,QAAIiB,KAAI,SAASD,MAAK,CAAC,GAAG,CAAC;AAC3B,QAAI,IAAI,EAAEC,EAAC;AAEX,QAAI,EAAE,OAAO,OAAO,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5C,QAAI,EAAE,OAAO,OAAO,SAASA,EAAC,CAAC;AAAA,EACnC;AAEA,SAAO;AACX;AAMA,OAAO,OAAO,SAAS,GAAG;AACtB,SAAO,OAAO,KAAK,CAAC,EAAE;AAC1B;AAMA,OAAO,WAAW,SAAS,GAAG;AAC1B,MAAI,IAAI,MAAM;AACV,WAAO,CAAC,CAAC;AAAA,EACb,OAAO;AACH,WAAO,CAAC,IAAI,IAAI,IAAI;AAAA,EACxB;AACJ;AAOA,OAAO,UAAU,SAAS,GAAG,MAAM;AAC/B,MAAI,IAAI,CAAC;AACT,MAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACrC,YAAM,SAAS,EAAE,WAAW,KAAK,QAAQ,wCAAwC,IAAI;AACrF,UAAI,EAAE,OAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAAA,IAC9C;AAAA,EACJ,OAAO;AACH,QAAI,SAAS,OAAO;AAChB,UAAI,EAAE,OAAO,OAAO,OAAO,CAAC,CAAC;AAAA,IACjC,WAAW,SAAS,UAAU;AAG1B,UAAI,EAAE,OAAO,OAAO,SAAS,CAAC,CAAC;AAAA,IACnC,WAAW,SAAS,UAAU;AAC1B,UAAI,EAAE,OAAO,OAAO,OAAO,CAAC,CAAC;AAAA,IACjC,WAAW,SAAS,QAAQ;AACxB,UAAI,EAAE,OAAO,OAAO,KAAK,CAAC,CAAC;AAAA,IAC/B,OAAO;AACH,YAAM,IAAI,MAAM,0BAA0B,IAAI;AAAA,IAElD;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,OAAO,KAAK,OAAO;AACnB,OAAO,KAAK,OAAO;AAGnB,IAAI,MAAM,OAAO,YAAY,cAAc,oBAAI,QAAQ;AAOvD,OAAO,aAAa,SAAS,KAAK;AAE9B,MAAI,KAAK;AACL,QAAI,cAAc,IAAI,IAAI,GAAG;AAC7B,QAAI,gBAAgB,QAAW;AAC3B,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,MAAI,IAAI,CAAC;AACT,MAAIjB,UAAS,IAAI;AAEjB,WAAS,IAAI,GAAG,IAAIA,SAAQ,KAAK,GAAG;AAChC,QAAI,KAAK,IAAI,CAAC;AACd,QAAI,EAAE,OAAO,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;AAAA,EAC1C;AAEA,MAAI,KAAK;AACL,QAAI,IAAI,KAAK,CAAC;AAAA,EAClB;AAEA,SAAO;AACX;AAMA,OAAO,aAAa,SAAS,KAAK;AAC9B,SAAO,OAAO,WAAW,GAAG,EAAE;AAClC;AASA,OAAO,SAAS,SAAS,GAAG;AACxB,MAAI,mBAAmB,OAAO,EAAE,IAAI;AACpC,QAAM,SAAS,qBAAqB,QAAW,mCAAmC,EAAE,IAAI;AACxF,SAAO,iBAAiB,EAAE,KAAK;AACnC;AAMA,OAAO,SAAS,SAAS,GAAG;AACxB,MAAI,iBAAiB,OAAO,EAAE,IAAI;AAClC,QAAM,SAAS,mBAAmB,QAAW,iCAAiC,EAAE,IAAI;AACpF,SAAO,eAAe,EAAE,KAAK;AACjC;AASA,OAAO,QAAQ,SAASc,QAAO;AAC3B,MAAI,IAAI,CAAC;AACT,MAAId,UAASc,OAAM,OAAO;AAC1B,MAAI,YAAY,CAAC;AACjB,MAAI,kBAAkB,CAAC;AAEvB,WAAS,IAAI,GAAG,IAAId,SAAQ,KAAK,GAAG;AAChC,QAAI,QAAQc,OAAM,OAAO,CAAC;AAC1B,QAAI,mBAAmB,OAAO,MAAM,IAAI;AACxC,UAAM,SAAS,qBAAqB,QAAW,yCAAyC,MAAM,OAAO,OAAO,MAAM,OAAO,GAAG;AAC5H,QAAIF,SAAQE,OAAM,MAAM,IAAI;AAC5B,QAAIF,WAAU,QAAW;AACrB,MAAAA,SAAQ,MAAM;AAAA,IAClB;AAEA,QAAI,QAAQ,iBAAiBA,MAAK;AAElC,QAAI,MAAM,SAAS,SAAS;AACxB,sBAAgB,KAAK,EAAE,MAAM;AAC7B,UAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,gBAAU,KAAK,KAAK;AAAA,IACxB,OAAO;AACH,UAAI,EAAE,OAAO,KAAK;AAAA,IACtB;AAAA,EACJ;AAEA,WAAS,MAAM,GAAG,MAAM,UAAU,QAAQ,OAAO,GAAG;AAChD,QAAI,IAAI,gBAAgB,GAAG;AAC3B,QAAI,SAAS,EAAE;AACf,UAAM,SAAS,SAAS,OAAO,WAAWE,OAAM,YAAY,WAAW;AACvE,MAAE,CAAC,IAAI,UAAU;AACjB,MAAE,IAAI,CAAC,IAAI,SAAS;AACpB,QAAI,EAAE,OAAO,UAAU,GAAG,CAAC;AAAA,EAC/B;AAEA,SAAO;AACX;AAMA,OAAO,QAAQ,SAASA,QAAO;AAC3B,MAAI,WAAW;AACf,MAAId,UAASc,OAAM,OAAO;AAE1B,WAAS,IAAI,GAAG,IAAId,SAAQ,KAAK,GAAG;AAChC,QAAI,QAAQc,OAAM,OAAO,CAAC;AAC1B,QAAI,iBAAiB,OAAO,MAAM,IAAI;AACtC,UAAM,SAAS,mBAAmB,QAAW,uCAAuC,MAAM,OAAO,OAAO,MAAM,OAAO,GAAG;AACxH,QAAIF,SAAQE,OAAM,MAAM,IAAI;AAC5B,QAAIF,WAAU,QAAW;AACrB,MAAAA,SAAQ,MAAM;AAAA,IAClB;AAEA,gBAAY,eAAeA,MAAK;AAGhC,QAAI,MAAM,SAAS,SAAS;AACxB,kBAAY;AAAA,IAChB;AAAA,EACJ;AAEA,SAAO;AACX;AAEA,OAAO,SAAS,OAAO;AACvB,OAAO,SAAS,OAAO;AAGvB,OAAO,UAAU,SAAS,GAAG;AACzB,SAAO;AACX;AAEA,OAAO,UAAU,SAAS,GAAG;AACzB,SAAO,EAAE;AACb;AAYA,SAAS,MAAM,WAAW,QAAQ,SAAS;AAIvC,MAAI,OAAO,WAAW,OAAO,CAAC,EAAE,SAAS,oBAAoB,OAAO,CAAC,EAAE,UAAU,IAAI;AACjF,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACvC,UAAI,QAAQ,OAAO,CAAC;AACpB,WAAK,MAAM,IAAI,IAAI,MAAM;AAAA,IAC7B;AAAA,EACJ;AAEA,OAAK,YAAY;AACjB,OAAK,SAAS;AACd,MAAI,SAAS;AACT,QAAI,aAAa,OAAO,KAAK,OAAO;AACpC,aAAS,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO,GAAG;AACjD,UAAIK,KAAI,WAAW,GAAG;AACtB,UAAI,IAAI,QAAQA,EAAC;AACjB,UAAI,KAAKA,EAAC,MAAM,QAAW;AACvB,aAAKA,EAAC,IAAI;AAAA,MACd;AAAA,IACJ;AAAA,EACJ;AACJ;AAMA,MAAM,UAAU,SAAS,WAAW;AAChC,SAAO,OAAO,MAAM,IAAI;AAC5B;AAMA,MAAM,UAAU,SAAS,WAAW;AAChC,SAAO,OAAO,MAAM,IAAI;AAC5B;AAKA,SAAS,WAAW,UAAU,MAAM,OAAO;AACvC,MAAI,UAAU,QAAW;AACrB,YAAQ,KAAK;AAAA,EACjB;AACA,MAAI,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC;AACtC,SAAO,CAAC,IAAI,EAAC,MAAM,WAAW,SAAS,MAAM,UAAU,OAAO,MAAK;AACnE,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,WAAO,IAAI,CAAC,IAAI,EAAC,MAAM,WAAW,GAAG,MAAM,UAAU,OAAO,KAAK,CAAC,EAAC;AAAA,EACvE;AACA,SAAO;AACX;AAKA,SAAS,UAAU,UAAU,SAAS,cAAc;AAChD,MAAI,QAAQ,QAAQ;AACpB,MAAI,SAAS,IAAI,MAAM,QAAQ,CAAC;AAChC,SAAO,CAAC,IAAI,EAAC,MAAM,WAAW,SAAS,MAAM,UAAU,OAAO,MAAK;AACnE,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,WAAO,IAAI,CAAC,IAAI,EAAC,MAAM,WAAW,GAAG,MAAM,SAAS,OAAO,aAAa,QAAQ,CAAC,GAAG,CAAC,EAAC;AAAA,EAC1F;AACA,SAAO;AACX;AAKA,SAAS,WAAW,UAAU,SAAS,cAAc;AACjD,MAAI,QAAQ,QAAQ;AACpB,MAAI,SAAS,CAAC;AACd,SAAO,CAAC,IAAI,EAAC,MAAM,WAAW,SAAS,MAAM,UAAU,OAAO,MAAK;AACnE,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,aAAS,OAAO,OAAO,aAAa,QAAQ,CAAC,GAAG,CAAC,CAAC;AAAA,EACtD;AACA,SAAO;AACX;AAWA,SAAS,SAAS,eAAe;AAC7B,MAAI,cAAc,WAAW,GAAG;AAC5B,UAAM;AAAA,MAAK;AAAA,MAAM;AAAA,MACb,CAAC,EAAC,MAAM,kBAAkB,MAAM,UAAU,OAAO,EAAC,CAAC,EAClD,OAAO,WAAW,SAAS,cAAc,MAAM,CAAC;AAAA,IACrD;AAAA,EACJ,WAAW,cAAc,WAAW,GAAG;AACnC,UAAM;AAAA,MAAK;AAAA,MAAM;AAAA,MACb,CAAC,EAAC,MAAM,kBAAkB,MAAM,UAAU,OAAO,EAAC,CAAC,EAClD,OAAO,WAAW,eAAe,cAAc,QAAQ,SAAS,aAAa;AAC1E,eAAO;AAAA,UACH,EAAC,MAAM,gBAAgB,MAAM,UAAU,OAAO,YAAY,MAAK;AAAA,UAC/D,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,YAAY,IAAG;AAAA,UAC3D,EAAC,MAAM,sBAAsB,MAAM,UAAU,OAAO,YAAY,MAAK;AAAA,QAAE;AAAA,MAC/E,CAAC,CAAC;AAAA,IACN;AAAA,EACJ,OAAO;AACH,UAAM,OAAO,OAAO,iCAAiC;AAAA,EACzD;AACJ;AACA,SAAS,YAAY,OAAO,OAAO,MAAM,SAAS;AAClD,SAAS,UAAU,cAAc;AAEjC,SAAS,WAAW,iBAAiB;AACjC,QAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IACb,WAAW,gBAAgB,iBAAiB,SAAS,cAAc,GAAG;AAClE,UAAI,SAAS,aAAa;AAC1B,UAAI,iBAAiB,OAAO;AAC5B,YAAM,OAAO,CAAC,CAAC,gBAAgB,kCAAkC,aAAa,MAAM,kCAAkC;AACtH,aAAO;AAAA,QACH,EAAC,MAAM,cAAc,GAAG,MAAM,OAAO,OAAO,aAAa,IAAG;AAAA,QAC5D,EAAC,MAAM,WAAW,GAAG,MAAM,SAAS,OAAO,IAAI,MAAM,eAAe;AAAA,UAChE,EAAC,MAAM,kBAAkB,MAAM,SAAS,OAAO,IAAI,MAAM,kBAAkB;AAAA,YACvE,EAAC,MAAM,eAAe,MAAM,UAAU,OAAO,EAAC;AAAA,YAC9C,EAAC,MAAM,mBAAmB,MAAM,UAAU,OAAO,eAAe,gBAAe;AAAA,UAAC,EAC/E,OAAO,WAAW,gBAAgB,eAAe,cAAc,CAAC,CAAC,EAAC;AAAA,QACvE,EAAE,OAAO,WAAW,WAAW,OAAO,gBAAgB,SAAS,eAAeN,IAAG;AAC7E,cAAI,UAAU,cAAc;AAC5B,iBAAO;AAAA,YACH,EAAC,MAAM,eAAeA,IAAG,MAAM,OAAO,OAAO,cAAc,IAAG;AAAA,YAC9D,EAAC,MAAM,YAAYA,IAAG,MAAM,SAAS,OAAO,IAAI,MAAM,WAAW;AAAA,cAC7D,EAAC,MAAM,eAAe,MAAM,UAAU,OAAO,EAAC;AAAA,cAC9C,EAAC,MAAM,mBAAmB,MAAM,UAAU,OAAO,QAAQ,gBAAe;AAAA,YACxE,EAAE,OAAO,WAAW,gBAAgB,QAAQ,cAAc,CAAC,CAAC,EAAC;AAAA,UACrE;AAAA,QACJ,CAAC,CAAC,CAAC,EAAC;AAAA,MACZ;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AACA,WAAW,YAAY,OAAO,OAAO,MAAM,SAAS;AACpD,WAAW,UAAU,cAAc;AASnC,SAAS,YAAY,kBAAkB;AACnC,QAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IACb,WAAW,iBAAiB,kBAAkB,SAAS,eAAe,GAAG;AACrE,UAAI,UAAU,cAAc;AAC5B,aAAO;AAAA,QACH,EAAC,MAAM,eAAe,GAAG,MAAM,OAAO,OAAO,cAAc,IAAG;AAAA,QAC9D,EAAC,MAAM,YAAY,GAAG,MAAM,SAAS,OAAO,IAAI,MAAM,gBAAgB;AAAA,UAClE,EAAC,MAAM,iBAAiB,MAAM,UAAU,OAAO,QAAQ,cAAa;AAAA,QAAE,EAAE,OAAO,WAAW,mBAAmB,QAAQ,iBAAiB,CAAC,CAAC,EAAC;AAAA,MACjJ;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;AACA,YAAY,YAAY,OAAO,OAAO,MAAM,SAAS;AACrD,YAAY,UAAU,cAAc;AAUpC,SAAS,WAAW,iBAAiBO,iBAAgB;AACjD,QAAM,KAAK,MAAM,mBAAmB,UAAU,UAAU,iBAAiB,SAAS,aAAa;AAC3F,QAAI,mBAAmBA,gBAAe,YAAY,UAAU;AAC5D,UAAM,OAAO,CAAC,CAAC,kBAAkB,sCAAsC,YAAY,aAAa,UAAU;AAC1G,WAAO,IAAI,MAAM,eAAe;AAAA,MAC5B,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,YAAY,WAAU;AAAA,MAClE,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,YAAY,WAAU;AAAA,IACtE,EAAE,OAAO,UAAU,YAAY,YAAY,WAAW,gBAAgB,CAAC,CAAC;AAAA,EAC5E,CAAC,CAAC;AACN;AACA,WAAW,YAAY,OAAO,OAAO,MAAM,SAAS;AACpD,WAAW,UAAU,cAAc;AAInC,IAAI,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAKA,SAAS,QAAQ,UAAU,QAAQ;AAC/B,SAAO,SAAS,SAAS,MAAM;AACnC;AAIA,SAAS,UAAU,UAAU,QAAQ;AACjC,SAAO,SAAS,UAAU,QAAQ,KAAK;AAC3C;AAIA,SAAS,SAAS,UAAU,QAAQ;AAChC,SAAO,SAAS,SAAS,QAAQ,KAAK;AAC1C;AAIA,SAAS,SAAS,UAAU,QAAQ;AAChC,SAAO,SAAS,UAAU,QAAQ,KAAK;AAC3C;AAIA,SAAS,SAAS,UAAU,QAAQ;AAChC,MAAI,UAAU,SAAS,SAAS,QAAQ,KAAK;AAC7C,MAAI,WAAW,SAAS,UAAU,SAAS,GAAG,KAAK;AACnD,SAAO,UAAU,WAAW;AAChC;AAIA,SAAS,OAAO,UAAU,QAAQ;AAC9B,MAAI,MAAM;AACV,WAAS,IAAI,QAAQ,IAAI,SAAS,GAAG,KAAK,GAAG;AACzC,WAAO,OAAO,aAAa,SAAS,QAAQ,CAAC,CAAC;AAAA,EAClD;AAEA,SAAO;AACX;AAIA,SAAS,UAAU,UAAU,QAAQ,SAAS;AAC1C,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK,GAAG;AACjC,UAAM;AACN,SAAK,SAAS,SAAS,SAAS,CAAC;AAAA,EACrC;AAEA,SAAO;AACX;AAGA,SAAS,SAAS,UAAU,aAAa,WAAW;AAChD,MAAI,QAAQ,CAAC;AACb,WAAS,IAAI,aAAa,IAAI,WAAW,KAAK,GAAG;AAC7C,UAAM,KAAK,SAAS,SAAS,CAAC,CAAC;AAAA,EACnC;AAEA,SAAO;AACX;AAGA,SAAS,cAAc,OAAO;AAC1B,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACtC,SAAK,OAAO,aAAa,MAAM,CAAC,CAAC;AAAA,EACrC;AAEA,SAAO;AACX;AAEA,IAAI,cAAc;AAAA,EACd,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc;AAAA,EACd,KAAK;AACT;AAIA,SAASC,QAAON,OAAM,QAAQ;AAC1B,OAAK,OAAOA;AACZ,OAAK,SAAS;AACd,OAAK,iBAAiB;AAC1B;AAEAM,QAAO,UAAU,YAAY,WAAW;AACpC,MAAI,IAAI,KAAK,KAAK,SAAS,KAAK,SAAS,KAAK,cAAc;AAC5D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,YAAY,WAAW;AACpC,MAAI,IAAI,KAAK,KAAK,QAAQ,KAAK,SAAS,KAAK,cAAc;AAC3D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,aAAaA,QAAO,UAAU;AAE/CA,QAAO,UAAU,cAAc,WAAW;AACtC,MAAI,IAAI,KAAK,KAAK,UAAU,KAAK,SAAS,KAAK,cAAc;AAC7D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,cAAcA,QAAO,UAAU;AAChDA,QAAO,UAAU,WAAWA,QAAO,UAAU;AAC7CA,QAAO,UAAU,gBAAgBA,QAAO,UAAU;AAElDA,QAAO,UAAU,aAAa,WAAW;AACrC,MAAI,IAAI,KAAK,KAAK,SAAS,KAAK,SAAS,KAAK,cAAc;AAC5D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,eAAe,WAAW;AACvC,MAAI,IAAI,KAAK,KAAK,SAAS,KAAK,SAAS,KAAK,cAAc,IAAI;AAChE,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,aAAa,WAAW;AACrC,MAAI,IAAI,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,cAAc;AAC7D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,gBAAgBA,QAAO,UAAU;AAElDA,QAAO,UAAU,aAAa,WAAW;AACrC,MAAI,IAAI,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,cAAc;AAC7D,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,cAAc,SAASnB,SAAQ;AAC5C,MAAI,WAAW,KAAK;AACpB,MAAI,SAAS,KAAK,SAAS,KAAK;AAChC,MAAI,SAAS;AACb,OAAK,kBAAkBA;AACvB,WAAS,IAAI,GAAG,IAAIA,SAAQ,KAAK;AAC7B,cAAU,OAAO,aAAa,SAAS,SAAS,SAAS,CAAC,CAAC;AAAA,EAC/D;AAEA,SAAO;AACX;AAEAmB,QAAO,UAAU,WAAW,WAAW;AACnC,SAAO,KAAK,YAAY,CAAC;AAC7B;AAMAA,QAAO,UAAU,oBAAoB,WAAW;AAC5C,MAAI,IAAI,SAAS,KAAK,MAAM,KAAK,SAAS,KAAK,iBAAiB,CAAC;AAGjE,OAAK;AACL,OAAK,kBAAkB;AACvB,SAAO;AACX;AAEAA,QAAO,UAAU,eAAe,SAAS,WAAW;AAChD,MAAI,QAAQ,UAAU,KAAK,MAAM,KAAK,SAAS,KAAK,cAAc;AAKlE,MAAI,QAAQ,UAAU,KAAK,MAAM,KAAK,SAAS,KAAK,iBAAiB,CAAC;AACtE,OAAK,kBAAkB;AACvB,MAAI,cAAc,QAAW;AAAE,gBAAY;AAAA,EAAQ;AACnD,SAAO,QAAQ,QAAQ,YAAY;AACvC;AAEAA,QAAO,UAAU,OAAO,SAAS,MAAM,QAAQ;AAC3C,MAAI,WAAW,QAAW;AACtB,aAAS;AAAA,EACb;AAEA,OAAK,kBAAkB,YAAY,IAAI,IAAI;AAC/C;AAKAA,QAAO,UAAU,iBAAiB,SAAS,OAAO;AAC9C,MAAI,UAAU,QAAW;AAAE,YAAQ,KAAK,WAAW;AAAA,EAAG;AACtD,MAAI,UAAU,IAAI,MAAM,KAAK;AAC7B,MAAI,WAAW,KAAK;AACpB,MAAI,SAAS,KAAK,SAAS,KAAK;AAChC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,YAAQ,CAAC,IAAI,SAAS,UAAU,MAAM;AACtC,cAAU;AAAA,EACd;AAEA,OAAK,kBAAkB,QAAQ;AAC/B,SAAO;AACX;AAIAA,QAAO,UAAU,oBACjBA,QAAO,UAAU,kBAAkB,SAAS,OAAO;AAC/C,MAAI,UAAU,QAAW;AAAE,YAAQ,KAAK,YAAY;AAAA,EAAG;AACvD,MAAI,UAAU,IAAI,MAAM,KAAK;AAC7B,MAAI,WAAW,KAAK;AACpB,MAAI,SAAS,KAAK,SAAS,KAAK;AAChC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,YAAQ,CAAC,IAAI,SAAS,UAAU,MAAM;AACtC,cAAU;AAAA,EACd;AAEA,OAAK,kBAAkB,QAAQ;AAC/B,SAAO;AACX;AAGAA,QAAO,UAAU,iBAAiB,SAAS,OAAO;AAC9C,MAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,MAAI,WAAW,KAAK;AACpB,MAAI,SAAS,KAAK,SAAS,KAAK;AAChC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,SAAK,CAAC,IAAI,SAAS,SAAS,MAAM;AAClC,cAAU;AAAA,EACd;AAEA,OAAK,kBAAkB,QAAQ;AAC/B,SAAO;AACX;AAGAA,QAAO,UAAU,gBAAgB,SAAS,OAAO;AAC7C,MAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,MAAI,WAAW,KAAK;AACpB,MAAI,SAAS,KAAK,SAAS,KAAK;AAChC,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,SAAK,CAAC,IAAI,SAAS,SAAS,QAAQ;AAAA,EACxC;AAEA,OAAK,kBAAkB;AACvB,SAAO;AACX;AAOAA,QAAO,UAAU,YAAY,SAAS,OAAO,cAAc;AACvD,MAAI,CAAC,cAAc;AACf,mBAAe;AACf,YAAQ,KAAK,YAAY;AAAA,EAC7B;AACA,MAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,SAAK,CAAC,IAAI,aAAa,KAAK,IAAI;AAAA,EACpC;AACA,SAAO;AACX;AAEAA,QAAO,UAAU,cAAc,SAAS,OAAO,cAAc;AACzD,MAAI,CAAC,cAAc;AACf,mBAAe;AACf,YAAQ,KAAK,WAAW;AAAA,EAC5B;AACA,MAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,SAAK,CAAC,IAAI,aAAa,KAAK,IAAI;AAAA,EACpC;AACA,SAAO;AACX;AAOAA,QAAO,UAAU,kBAAkB,SAAS,OAAO,mBAAmB;AAElE,MAAI,CAAC,mBAAmB;AACpB,wBAAoB;AACpB,YAAQ,KAAK,YAAY;AAAA,EAC7B;AACA,MAAI,UAAU,IAAI,MAAM,KAAK;AAC7B,MAAI,SAAS,OAAO,KAAK,iBAAiB;AAC1C,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,QAAI,MAAM,CAAC;AACX,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,YAAY,OAAO,CAAC;AACxB,UAAI,YAAY,kBAAkB,SAAS;AAC3C,UAAI,SAAS,IAAI,UAAU,KAAK,IAAI;AAAA,IACxC;AACA,YAAQ,CAAC,IAAI;AAAA,EACjB;AACA,SAAO;AACX;AAEAA,QAAO,UAAU,oBAAoB,SAAS,OAAO,mBAAmB;AAEpE,MAAI,CAAC,mBAAmB;AACpB,wBAAoB;AACpB,YAAQ,KAAK,WAAW;AAAA,EAC5B;AACA,MAAI,UAAU,IAAI,MAAM,KAAK;AAC7B,MAAI,SAAS,OAAO,KAAK,iBAAiB;AAC1C,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,QAAI,MAAM,CAAC;AACX,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,YAAY,OAAO,CAAC;AACxB,UAAI,YAAY,kBAAkB,SAAS;AAC3C,UAAI,SAAS,IAAI,UAAU,KAAK,IAAI;AAAA,IACxC;AACA,YAAQ,CAAC,IAAI;AAAA,EACjB;AACA,SAAO;AACX;AAIAA,QAAO,UAAU,cAAc,SAAS,aAAa;AACjD,MAAI,OAAO,gBAAgB,YAAY;AACnC,WAAO,YAAY,KAAK,IAAI;AAAA,EAChC,OAAO;AACH,QAAI,SAAS,OAAO,KAAK,WAAW;AACpC,QAAI,SAAS,CAAC;AACd,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,YAAY,OAAO,CAAC;AACxB,UAAI,YAAY,YAAY,SAAS;AACrC,aAAO,SAAS,IAAI,UAAU,KAAK,IAAI;AAAA,IAC3C;AACA,WAAO;AAAA,EACX;AACJ;AAOAA,QAAO,UAAU,mBAAmB,SAAS,aAAa;AACtD,MAAI,gBAAgB,QAAW;AAC3B,kBAAc,KAAK,YAAY;AAAA,EACnC;AACA,MAAI,gBAAgB,GAAG;AAGnB;AAAA,EACJ;AACA,MAAI,cAAc,CAAC;AAEnB,MAAI,cAAc,GAAQ;AAAE,gBAAY,aAAa,KAAK,WAAW;AAAA,EAAG;AACxE,MAAI,cAAc,GAAQ;AAAE,gBAAY,aAAa,KAAK,WAAW;AAAA,EAAG;AACxE,MAAI,cAAc,GAAQ;AAAE,gBAAY,WAAW,KAAK,WAAW;AAAA,EAAG;AACtE,MAAI,cAAc,GAAQ;AAAE,gBAAY,WAAW,KAAK,WAAW;AAAA,EAAG;AAItE,MAAI,cAAc,IAAQ;AAAE,gBAAY,aAAa;AAAW,SAAK,WAAW;AAAA,EAAG;AACnF,MAAI,cAAc,IAAQ;AAAE,gBAAY,aAAa;AAAW,SAAK,WAAW;AAAA,EAAG;AACnF,MAAI,cAAc,IAAQ;AAAE,gBAAY,aAAa;AAAW,SAAK,WAAW;AAAA,EAAG;AACnF,MAAI,cAAc,KAAQ;AAAE,gBAAY,aAAa;AAAW,SAAK,WAAW;AAAA,EAAG;AAEnF,SAAO;AACX;AAOAA,QAAO,UAAU,uBAAuB,WAAW;AAC/C,MAAI,cAAc,KAAK,YAAY;AACnC,MAAI,aAAa,KAAK,YAAY;AAClC,MAAIC,UAAS,IAAI,MAAM,UAAU;AACjC,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,IAAAA,QAAO,CAAC,IAAI,KAAK,iBAAiB,WAAW;AAAA,EACjD;AACA,SAAOA;AACX;AAEAD,QAAO,UAAU,eAAe,SAAS,aAAa;AAClD,MAAI,eAAe,KAAK,cAAc;AACtC,MAAI,eAAe,GAAG;AAElB,WAAO,IAAIA,QAAO,KAAK,MAAM,KAAK,SAAS,YAAY,EAAE,YAAY,WAAW;AAAA,EACpF;AACA,SAAO;AACX;AAEAA,QAAO,UAAU,iBAAiB,SAAS,aAAa;AACpD,MAAI,eAAe,KAAK,cAAc;AACtC,MAAI,eAAe,GAAG;AAElB,WAAO,IAAIA,QAAO,KAAK,MAAM,KAAK,SAAS,YAAY,EAAE,YAAY,WAAW;AAAA,EACpF;AACA,SAAO;AACX;AASAA,QAAO,UAAU,mBAAmB,SAAS,cAAc;AACvD,MAAI,UAAU,KAAK,kBAAkB;AACrC,MAAI,QAAQ,QAAQ;AACpB,MAAI,iBAAiB,KAAK;AAC1B,MAAI,OAAO,IAAI,MAAM,KAAK;AAC1B,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,QAAI,QAAQ,QAAQ,CAAC;AACrB,QAAI,UAAU,GAAG;AAGb,WAAK,CAAC,IAAI;AACV;AAAA,IACJ;AACA,SAAK,iBAAiB;AACtB,QAAI,cAAc;AACd,UAAI,aAAa,KAAK,kBAAkB;AACxC,UAAI,UAAU,IAAI,MAAM,WAAW,MAAM;AACzC,eAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,aAAK,iBAAiB,QAAQ,WAAW,CAAC;AAC1C,gBAAQ,CAAC,IAAI,aAAa,KAAK,IAAI;AAAA,MACvC;AACA,WAAK,CAAC,IAAI;AAAA,IACd,OAAO;AACH,WAAK,CAAC,IAAI,KAAK,gBAAgB;AAAA,IACnC;AAAA,EACJ;AACA,OAAK,iBAAiB;AACtB,SAAO;AACX;AAOAA,QAAO,UAAU,gBAAgB,WAAW;AACxC,MAAI,cAAc,KAAK,SAAS,KAAK;AACrC,MAAI,SAAS,KAAK,YAAY;AAC9B,MAAI,QAAQ,KAAK,YAAY;AAC7B,MAAI,WAAW,GAAG;AACd,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ,KAAK,gBAAgB,KAAK;AAAA,IACtC;AAAA,EACJ,WAAW,WAAW,GAAG;AACrB,QAAI,SAAS,IAAI,MAAM,KAAK;AAC5B,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,aAAO,CAAC,IAAI;AAAA,QACR,OAAO,KAAK,YAAY;AAAA,QACxB,KAAK,KAAK,YAAY;AAAA,QACtB,OAAO,KAAK,YAAY;AAAA,MAC5B;AAAA,IACJ;AACA,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACA,QAAM,IAAI,MAAM,OAAO,YAAY,SAAS,EAAE,IAAI,mCAAmC;AACzF;AAIAA,QAAO,UAAU,gBAAgB,WAAW;AACxC,MAAI,cAAc,KAAK,SAAS,KAAK;AACrC,MAAI,SAAS,KAAK,YAAY;AAC9B,MAAI,WAAW,GAAG;AACd,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,YAAY,KAAK,YAAY;AAAA,MAC7B,SAAS,KAAK,gBAAgB;AAAA,IAClC;AAAA,EACJ,WAAW,WAAW,GAAG;AACrB,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,QAAQ,KAAK,gBAAgB;AAAA,QACzB,OAAOA,QAAO;AAAA,QACd,KAAKA,QAAO;AAAA,QACZ,SAASA,QAAO;AAAA,MACpB,CAAC;AAAA,IACL;AAAA,EACJ;AACA,QAAM,IAAI,MAAM,OAAO,YAAY,SAAS,EAAE,IAAI,mCAAmC;AACzF;AAKAA,QAAO,OAAO,SAAS,OAAO,cAAc;AACxC,SAAO,WAAW;AACd,WAAO,KAAK,UAAU,OAAO,YAAY;AAAA,EAC7C;AACJ;AAEAA,QAAO,SAAS,SAAS,OAAO,cAAc;AAC1C,SAAO,WAAW;AACd,WAAO,KAAK,YAAY,OAAO,YAAY;AAAA,EAC/C;AACJ;AAEAA,QAAO,aAAa,SAAS,OAAO,mBAAmB;AACnD,SAAO,WAAW;AACd,WAAO,KAAK,gBAAgB,OAAO,iBAAiB;AAAA,EACxD;AACJ;AAEAA,QAAO,eAAe,SAAS,OAAO,mBAAmB;AACrD,SAAO,WAAW;AACd,WAAO,KAAK,kBAAkB,OAAO,iBAAiB;AAAA,EAC1D;AACJ;AAEAA,QAAO,UAAU,SAAS,aAAa;AACnC,SAAO,WAAW;AACd,WAAO,KAAK,aAAa,WAAW;AAAA,EACxC;AACJ;AAEAA,QAAO,YAAY,SAAS,aAAa;AACrC,SAAO,WAAW;AACd,WAAO,KAAK,eAAe,WAAW;AAAA,EAC1C;AACJ;AAEAA,QAAO,MAAMA,QAAO,UAAU;AAC9BA,QAAO,OAAOA,QAAO,UAAU;AAC/BA,QAAO,SAASA,QAAO,WAAWA,QAAO,UAAU;AACnDA,QAAO,aAAaA,QAAO,UAAU;AACrCA,QAAO,QAAQA,QAAO,WAAWA,QAAO,UAAU;AAClDA,QAAO,YAAYA,QAAO,UAAU;AACpCA,QAAO,SAASA,QAAO,UAAU;AACjCA,QAAO,WAAWA,QAAO,UAAU;AACnCA,QAAO,WAAWA,QAAO,UAAU;AAKnC,IAAI,eAAe;AAAA,EACf,UAAUA,QAAO;AAAA,EACjB,iBAAiBA,QAAO;AAAA,EACxB,gBAAgBA,QAAO;AAC3B;AAEAA,QAAO,UAAU,kBAAkB,WAAW;AAC1C,SAAO,KAAK,aAAaA,QAAO,WAAW;AAAA,IACvC,KAAKA,QAAO;AAAA,IACZ,QAAQA,QAAO,QAAQ;AAAA,MACnB,gBAAgBA,QAAO,QAAQ,YAAY;AAAA,MAC3C,gBAAgBA,QAAO,WAAW;AAAA,QAC9B,KAAKA,QAAO;AAAA,QACZ,SAASA,QAAO,QAAQ,YAAY;AAAA,MACxC,CAAC;AAAA,IACL,CAAC;AAAA,EACL,CAAC,CAAC,KAAK,CAAC;AACZ;AAEAA,QAAO,UAAU,mBAAmB,WAAW;AAC3C,SAAO,KAAK,aAAaA,QAAO,WAAW;AAAA,IACvC,KAAKA,QAAO;AAAA,IACZ,SAASA,QAAO,QAAQ;AAAA,MACpB,eAAeA,QAAO;AAAA,MACtB,mBAAmBA,QAAO;AAAA,IAC9B,CAAC;AAAA,EACL,CAAC,CAAC,KAAK,CAAC;AACZ;AAEAA,QAAO,UAAU,kBAAkB,SAAS,oBAAoB;AAC5D,SAAO,KAAK,aAAaA,QAAO,KAAKA,QAAO,QAAQ,WAAW;AAC3D,QAAI,aAAa,KAAK,YAAY;AAClC,UAAM,SAAS,KAAK,cAAc,cAAc,GAAG,2BAA2B,aAAa,WAAW;AACtG,QAAI,aAAa,KAAK,YAAY;AAClC,QAAI,sBAAsB,aAAa;AACvC,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA,WAAW,KAAK,UAAUA,QAAO,QAAQ,mBAAmB,UAAU,CAAC,CAAC;AAAA,MACxE,kBAAkB,sBAAsB,KAAK,YAAY,IAAI;AAAA,IACjE;AAAA,EACJ,CAAC,CAAC,CAAC,KAAK,CAAC;AACb;AAEAA,QAAO,UAAU,6BAA6B,WAAW;AACrD,SAAO,KAAK,eAAe,WAAW;AAClC,QAAI,eAAe,KAAK,YAAY;AACpC,QAAI,eAAe,KAAK,YAAY;AACpC,UAAM,SAAS,iBAAiB,KAAK,eAAe,GAAG,6CAA6C;AACpG,QAAI,oBAAoB,KAAK,kBAAkB;AAAA,MAC3C,oBAAoBA,QAAO;AAAA,MAC3B,gCAAgCA,QAAO;AAAA,IAC3C,CAAC;AACD,WAAO;AAAA,EACX,CAAC,KAAK,CAAC;AACX;AAEA,IAAI,QAAQ;AAAA,EACR;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQA;AACZ;AAIA,SAAS,uBAAuBE,OAAMC,IAAG;AAErC,EAAAA,GAAE,YAAY;AAGd,EAAAD,MAAK,SAASC,GAAE,WAAW;AAC3B,EAAAD,MAAK,WAAWC,GAAE,WAAW;AAE7B,MAAI;AACJ,EAAAD,MAAK,aAAa,aAAaC,GAAE,WAAW;AAC5C,EAAAD,MAAK,gBAAgB,CAAC;AAEtB,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK,GAAG;AACpC,QAAI,gBAAgBC,GAAE,WAAW;AACjC,QAAI,cAAcA,GAAE,WAAW;AAC/B,QAAI,eAAeA,GAAE,WAAW;AAEhC,aAASd,KAAI,eAAeA,MAAK,aAAaA,MAAK,GAAG;AAClD,MAAAa,MAAK,cAAcb,EAAC,IAAI;AACxB;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,sBAAsBa,OAAMC,IAAGT,OAAM,OAAO,QAAQ;AAEzD,EAAAQ,MAAK,SAASC,GAAE,YAAY;AAC5B,EAAAD,MAAK,WAAWC,GAAE,YAAY;AAG9B,MAAI;AACJ,EAAAD,MAAK,WAAW,WAAWC,GAAE,YAAY,KAAK;AAG9C,EAAAA,GAAE,KAAK,UAAU,CAAC;AAGlB,EAAAD,MAAK,gBAAgB,CAAC;AACtB,MAAI,iBAAiB,IAAI,MAAM,OAAOR,OAAM,QAAQ,SAAS,EAAE;AAC/D,MAAI,mBAAmB,IAAI,MAAM,OAAOA,OAAM,QAAQ,SAAS,KAAK,WAAW,CAAC;AAChF,MAAI,gBAAgB,IAAI,MAAM,OAAOA,OAAM,QAAQ,SAAS,KAAK,WAAW,CAAC;AAC7E,MAAI,sBAAsB,IAAI,MAAM,OAAOA,OAAM,QAAQ,SAAS,KAAK,WAAW,CAAC;AACnF,MAAI,mBAAmB,QAAQ,SAAS,KAAK,WAAW;AACxD,WAAS,IAAI,GAAG,IAAI,WAAW,GAAG,KAAK,GAAG;AACtC,QAAI,aAAc;AAClB,QAAI,WAAW,eAAe,YAAY;AAC1C,QAAI,aAAa,iBAAiB,YAAY;AAC9C,QAAI,UAAU,cAAc,WAAW;AACvC,QAAI,gBAAgB,oBAAoB,YAAY;AACpD,aAASL,KAAI,YAAYA,MAAK,UAAUA,MAAK,GAAG;AAC5C,UAAI,kBAAkB,GAAG;AAGrB,2BAAoB,oBAAoB,SAAS,oBAAoB,iBAAiB;AAGtF,4BAAoB;AAGpB,6BAAqBA,KAAI,cAAc;AACvC,qBAAa,MAAM,UAAUK,OAAM,gBAAgB;AACnD,YAAI,eAAe,GAAG;AAClB,uBAAc,aAAa,UAAW;AAAA,QAC1C;AAAA,MACJ,OAAO;AACH,qBAAcL,KAAI,UAAW;AAAA,MACjC;AAEA,MAAAa,MAAK,cAAcb,EAAC,IAAI;AAAA,IAC5B;AAAA,EACJ;AACJ;AAKA,SAAS,eAAeK,OAAM,OAAO;AACjC,MAAIQ,QAAO,CAAC;AACZ,EAAAA,MAAK,UAAU,MAAM,UAAUR,OAAM,KAAK;AAC1C,QAAM,SAASQ,MAAK,YAAY,GAAG,iCAAiC;AAIpE,EAAAA,MAAK,YAAY,MAAM,UAAUR,OAAM,QAAQ,CAAC;AAChD,MAAI,SAAS;AACb,WAAS,IAAIQ,MAAK,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG;AAC7C,QAAI,aAAa,MAAM,UAAUR,OAAM,QAAQ,IAAK,IAAI,CAAE;AAC1D,QAAI,aAAa,MAAM,UAAUA,OAAM,QAAQ,IAAK,IAAI,IAAK,CAAC;AAC9D,QAAK,eAAe,MAAM,eAAe,KAAK,eAAe,KAAK,eAAe,OAC5E,eAAe,MAAM,eAAe,KAAK,eAAe,KAAK,eAAe,KAAK,eAAe,KAAK,eAAe,IAAK;AAC1H,eAAS,MAAM,SAASA,OAAM,QAAQ,IAAK,IAAI,IAAK,CAAC;AACrD;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,WAAW,IAAI;AAEf,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACrD;AAEA,MAAIS,KAAI,IAAI,MAAM,OAAOT,OAAM,QAAQ,MAAM;AAC7C,EAAAQ,MAAK,SAASC,GAAE,YAAY;AAE5B,MAAID,MAAK,WAAW,IAAI;AACpB,2BAAuBA,OAAMC,EAAC;AAAA,EAClC,WAAWD,MAAK,WAAW,GAAG;AAC1B,0BAAsBA,OAAMC,IAAGT,OAAM,OAAO,MAAM;AAAA,EACtD,OAAO;AACH,UAAM,IAAI,MAAM,kEAAkEQ,MAAK,SAAS,IAAI;AAAA,EACxG;AAEA,SAAOA;AACX;AAEA,SAAS,WAAWxB,IAAG,MAAM,YAAY;AACrC,EAAAA,GAAE,SAAS,KAAK;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO,EAAE,OAAO;AAAA,IAChB,QAAQ;AAAA,IACR;AAAA,EACJ,CAAC;AACL;AAEA,SAAS,qBAAqBA,IAAG;AAC7B,EAAAA,GAAE,SAAS,KAAK;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ,CAAC;AACL;AAGA,SAAS,cAAc,QAAQ;AAE3B,MAAI,cAAc;AAClB,MAAI;AAGJ,OAAK,IAAI,OAAO,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG;AACvC,QAAI0B,KAAI,OAAO,IAAI,CAAC;AACpB,QAAIA,GAAE,UAAU,OAAO;AACnB,cAAQ,IAAI,iCAAiC;AAC7C,oBAAc;AACd;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,YAAY;AAAA,IACZ,EAAC,MAAM,WAAW,MAAM,UAAU,OAAO,EAAC;AAAA,IAC1C,EAAC,MAAM,aAAa,MAAM,UAAU,OAAO,cAAc,IAAI,EAAC;AAAA;AAAA,IAG9D,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,EAAC;AAAA,IAC7C,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,EAAC;AAAA,IAC7C,EAAC,MAAM,UAAU,MAAM,SAAS,OAAO,cAAc,KAAM,KAAK,EAAE;AAAA,EACtE;AAEA,MAAI,CAAC,aACD;AAAE,gBAAY,UAAU,OAAO;AAAA;AAAA,MAE3B,EAAC,MAAM,oBAAoB,MAAM,UAAU,OAAO,EAAC;AAAA;AAAA,MACnD,EAAC,MAAM,oBAAoB,MAAM,UAAU,OAAO,GAAE;AAAA,MACpD,EAAC,MAAM,gBAAgB,MAAM,SAAS,OAAO,EAAC;AAAA,IAClD,CAAC;AAAA,EAAG;AAER,cAAY,UAAU,OAAO;AAAA;AAAA,IAEzB,EAAC,MAAM,UAAU,MAAM,UAAU,OAAO,EAAC;AAAA,IACzC,EAAC,MAAM,eAAe,MAAM,UAAU,OAAO,EAAC;AAAA,IAC9C,EAAC,MAAM,YAAY,MAAM,UAAU,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,EAAC;AAAA,IAC7C,EAAC,MAAM,eAAe,MAAM,UAAU,OAAO,EAAC;AAAA,IAC9C,EAAC,MAAM,iBAAiB,MAAM,UAAU,OAAO,EAAC;AAAA,IAChD,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,EAAC;AAAA,EACjD,CAAC;AAED,MAAI1B,KAAI,IAAI,MAAM,MAAM,QAAQ,SAAS;AAEzC,EAAAA,GAAE,WAAW,CAAC;AACd,OAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACnC,QAAI,QAAQ,OAAO,IAAI,CAAC;AACxB,aAAS,IAAI,GAAG,IAAI,MAAM,SAAS,QAAQ,KAAK,GAAG;AAC/C,iBAAWA,IAAG,MAAM,SAAS,CAAC,GAAG,CAAC;AAAA,IACtC;AAEA,IAAAA,GAAE,WAAWA,GAAE,SAAS,KAAK,SAAUU,IAAGD,IAAG;AACzC,aAAOC,GAAE,QAAQD,GAAE;AAAA,IACvB,CAAC;AAAA,EACL;AAEA,uBAAqBT,EAAC;AAEtB,MAAI,WAAWA,GAAE,SAAS;AAC1B,MAAI,mBAAmB;AAIvB,MAAI,YAAY,CAAC;AACjB,MAAI,cAAc,CAAC;AACnB,MAAI,WAAW,CAAC;AAChB,MAAI,iBAAiB,CAAC;AACtB,MAAI,WAAW,CAAC;AAGhB,MAAI,eAAe,CAAC;AAMpB,OAAK,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG;AAC9B,QAAI,UAAUA,GAAE,SAAS,CAAC;AAG1B,QAAI,QAAQ,OAAO,SAAS,QAAQ,SAAS,OAAO;AAChD,kBAAY,UAAU,OAAO,EAAC,MAAM,SAAS,GAAG,MAAM,UAAU,OAAO,QAAQ,IAAG,CAAC;AACnF,oBAAc,YAAY,OAAO,EAAC,MAAM,WAAW,GAAG,MAAM,UAAU,OAAO,QAAQ,MAAK,CAAC;AAC3F,iBAAW,SAAS,OAAO,EAAC,MAAM,aAAa,GAAG,MAAM,SAAS,OAAO,QAAQ,MAAK,CAAC;AACtF,uBAAiB,eAAe,OAAO,EAAC,MAAM,mBAAmB,GAAG,MAAM,UAAU,OAAO,QAAQ,OAAM,CAAC;AAC1G,UAAI,QAAQ,YAAY,QAAW;AAC/B,mBAAW,SAAS,OAAO,EAAC,MAAM,WAAW,GAAG,MAAM,UAAU,OAAO,QAAQ,QAAO,CAAC;AAAA,MAC3F;AAAA,IACJ,OAAO;AAEH,0BAAoB;AAAA,IACxB;AAIA,QAAI,CAAC,eAAe,QAAQ,eAAe,QAAW;AAClD,qBAAe,aAAa,OAAO,EAAC,MAAM,iBAAiB,GAAG,MAAM,SAAS,OAAO,QAAQ,MAAK,CAAC;AAClG,qBAAe,aAAa,OAAO,EAAC,MAAM,eAAe,GAAG,MAAM,SAAS,OAAO,QAAQ,IAAG,CAAC;AAC9F,qBAAe,aAAa,OAAO,EAAC,MAAM,iBAAiB,GAAG,MAAM,SAAS,OAAO,QAAQ,WAAU,CAAC;AAAA,IAC3G;AAAA,EACJ;AAGA,EAAAA,GAAE,cAAc,WAAW,oBAAoB;AAC/C,EAAAA,GAAE,cAAc,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,IAAK,WAAW,gBAAiB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI;AACjG,EAAAA,GAAE,gBAAgB,KAAK,IAAIA,GAAE,cAAc,CAAC,IAAI,KAAK,IAAI,CAAC;AAC1D,EAAAA,GAAE,aAAaA,GAAE,aAAaA,GAAE;AAEhC,EAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,SAAS;AACpC,EAAAA,GAAE,OAAO,KAAK,EAAC,MAAM,eAAe,MAAM,UAAU,OAAO,EAAC,CAAC;AAC7D,EAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,WAAW;AACtC,EAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,QAAQ;AACnC,EAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,cAAc;AACzC,EAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,QAAQ;AAEnC,EAAAA,GAAE,cAAc;AAAA,EACZ,UAAU,SAAS,IACnB;AAAA,EACA,YAAY,SAAS,IACrB,SAAS,SAAS,IAClB,eAAe,SAAS,IACxB,SAAS,SAAS;AAEtB,MAAI,CAAC,aAAa;AAEd,QAAI,eAAe;AAAA,IACf,aAAa,SAAS;AAE1B,IAAAA,GAAE,eAAe,KAAM,IAAI,IAAK,IAAIA,GAAE;AACtC,IAAAA,GAAE,SAASA,GAAE,OAAO,OAAO;AAAA,MACvB,EAAC,MAAM,gBAAgB,MAAM,UAAU,OAAO,GAAE;AAAA,MAChD,EAAC,MAAM,kBAAkB,MAAM,UAAU,OAAO,EAAC;AAAA,MACjD,EAAC,MAAM,gBAAgB,MAAM,SAAS,OAAO,aAAY;AAAA,MACzD,EAAC,MAAM,kBAAkB,MAAM,SAAS,OAAO,EAAC;AAAA,MAChD,EAAC,MAAM,iBAAiB,MAAM,SAAS,OAAO,aAAa,SAAS,EAAC;AAAA,IACzE,CAAC;AAED,IAAAA,GAAE,SAASA,GAAE,OAAO,OAAO,YAAY;AAAA,EAC3C;AAEA,SAAOA;AACX;AAEA,IAAI,OAAO,EAAE,OAAO,gBAAgB,MAAM,cAAc;AAIxD,IAAI,qBAAqB;AAAA,EACrB;AAAA,EAAW;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAc;AAAA,EAAU;AAAA,EAAW;AAAA,EAAa;AAAA,EAC1F;AAAA,EAAa;AAAA,EAAc;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAO;AAAA,EACpG;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EAAQ;AAAA,EAAS;AAAA,EACjG;AAAA,EAAY;AAAA,EAAM;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,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAe;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAe;AAAA,EAC9F;AAAA,EAAa;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,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAa;AAAA,EAAO;AAAA,EAAc;AAAA,EAAc;AAAA,EAAc;AAAA,EAAQ;AAAA,EACpG;AAAA,EAAY;AAAA,EAAO;AAAA,EAAU;AAAA,EAAW;AAAA,EAAY;AAAA,EAAe;AAAA,EAAgB;AAAA,EACnF;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAU;AAAA,EAAU;AAAA,EAAa;AAAA,EAAkB;AAAA,EAClG;AAAA,EAAU;AAAA,EAAkB;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAY;AAAA,EAC3F;AAAA,EAAgB;AAAA,EAAS;AAAA,EAAS;AAAA,EAAc;AAAA,EAAS;AAAA,EAAU;AAAA,EAAS;AAAA,EAAa;AAAA,EAAY;AAAA,EACrG;AAAA,EAAW;AAAA,EAAgB;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAM;AAAA,EAAe;AAAA,EAAU;AAAA,EAAU;AAAA,EACjG;AAAA,EAAgB;AAAA,EAAM;AAAA,EAAY;AAAA,EAAU;AAAA,EAAU;AAAA,EAAM;AAAA,EAAc;AAAA,EAAe;AAAA,EAAc;AAAA,EACvG;AAAA,EAAa;AAAA,EAAO;AAAA,EAAW;AAAA,EAAa;AAAA,EAAS;AAAA,EAAc;AAAA,EAAU;AAAA,EAAa;AAAA,EAAU;AAAA,EACpG;AAAA,EAAiB;AAAA,EAAe;AAAA,EAAc;AAAA,EAAS;AAAA,EAAO;AAAA,EAAY;AAAA,EAAiB;AAAA,EAC3F;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAU;AAAA,EACzF;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC3F;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAC3F;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EACtG;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAChG;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAChG;AAAA,EAAU;AAAA,EAAa;AAAA,EAAU;AAAA,EAAe;AAAA,EAAqB;AAAA,EAAkB;AAAA,EACvF;AAAA,EAAkB;AAAA,EAAc;AAAA,EAAqB;AAAA,EAAsB;AAAA,EAAU;AAAA,EACrF;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAC/F;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAAuB;AAAA,EAC1F;AAAA,EAAiB;AAAA,EAAa;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAClG;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAM;AAAA,EAAO;AAAA,EAC3F;AAAA,EAAqB;AAAA,EAAsB;AAAA,EAAmB;AAAA,EAAkB;AAAA,EAAc;AAAA,EAC9F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EACpG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EACpG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAiB;AAAA,EAAa;AAAA,EAAU;AAAA,EAAc;AAAA,EACpF;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAc;AAAA,EAC5F;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAc;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAa;AAAA,EAC7F;AAAA,EAAqB;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAgB;AAAA,EAAY;AAAA,EAC7F;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAiB;AAAA,EACjG;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAC/F;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAkB;AAAA,EACpF;AAAA,EAAiB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAe;AAAA,EAClF;AAAA,EAAc;AAAA,EAAW;AAAA,EAAiB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAoB;AAAA,EAC5F;AAAA,EAAe;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAY;AAAA,EAAe;AAAA,EAC/F;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAe;AAAA,EAAkB;AAAA,EAAW;AAAA,EAAe;AAAA,EAC9F;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAc;AAAA,EAAkB;AAAA,EACpG;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAW;AAAA,EAAS;AAAU;AAE/G,IAAI,sBAAsB;AAAA,EACtB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAc;AAAA,EAAU;AAAA,EAAW;AAAA,EAAa;AAAA,EAC/F;AAAA,EAAa;AAAA,EAAc;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAO;AAAA,EACpG;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EAAQ;AAAA,EAAS;AAAA,EACjG;AAAA,EAAY;AAAA,EAAM;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,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAe;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAe;AAAA,EAC9F;AAAA,EAAa;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,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAa;AAAA,EAAO;AAAA,EAAc;AAAA,EAAc;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC1G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpG;AAAA,EAAc;AAAA,EAAQ;AAAA,EAAY;AAAA,EAAY;AAAA,EAAO;AAAA,EAAU;AAAA,EAAW;AAAA,EAAY;AAAA,EACtF;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAI;AAAA,EAAU;AAAA,EAC9F;AAAA,EAAa;AAAA,EAAkB;AAAA,EAAI;AAAA,EAAa;AAAA,EAAU;AAAA,EAAkB;AAAA,EAAgB;AAAA,EAC5F;AAAA,EAAkB;AAAA,EAAY;AAAA,EAAe;AAAA,EAAI;AAAA,EAAgB;AAAA,EAAI;AAAA,EAAS;AAAA,EAAS;AAAA,EAAc;AAAA,EACrG;AAAA,EAAU;AAAA,EAAS;AAAA,EAAa;AAAA,EAAY;AAAA,EAAI;AAAA,EAAQ;AAAA,EAAW;AAAA,EAAI;AAAA,EAAgB;AAAA,EAAU;AAAA,EACjG;AAAA,EAAU;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAe;AAAA,EAAI;AAAA,EAAI;AAAA,EAC3G;AAAA,EAAI;AAAA,EAAU;AAAA,EAAU;AAAA,EAAM;AAAA,EAAgB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAM;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAY;AAAA,EAAI;AAAA,EACpG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAM;AAAY;AAE1C,IAAI,oBAAoB;AAAA,EACpB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAS;AAAA,EAAe;AAAA,EAAqB;AAAA,EAAI;AAAA,EAAkB;AAAA,EACnF;AAAA,EAAkB;AAAA,EAAc;AAAA,EAAqB;AAAA,EAAsB;AAAA,EAAkB;AAAA,EAC7F;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAY;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EACvF;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAgB;AAAA,EACjG;AAAA,EAAa;AAAA,EAAiB;AAAA,EAAuB;AAAA,EAAkB;AAAA,EAAiB;AAAA,EAAI;AAAA,EAC5F;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAa;AAAA,EAAa;AAAA,EAAI;AAAA,EAAI;AAAA,EAAa;AAAA,EAAI;AAAA,EAAI;AAAA,EAAa;AAAA,EACjG;AAAA,EAAa;AAAA,EAAa;AAAA,EAAI;AAAA,EAAI;AAAA,EAAa;AAAA,EAAa;AAAA,EAAa;AAAA,EAAI;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAO;AAAA,EACtG;AAAA,EAAqB;AAAA,EAAI;AAAA,EAAsB;AAAA,EAAmB;AAAA,EAAkB;AAAA,EAAc;AAAA,EAClG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EACpG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EACpG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAiB;AAAA,EAAa;AAAA,EAAU;AAAA,EAAc;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5G;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACxG;AAAA,EAAmB;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAI;AAAA,EAAI;AAAA,EAAe;AAAA,EAAe;AAAA,EACxF;AAAA,EAAc;AAAA,EAAc;AAAA,EAAI;AAAA,EAAkB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAe;AAAA,EAAI;AAAA,EAAI;AAAA,EAAc;AAAA,EAC/F;AAAA,EAAI;AAAA,EAAI;AAAA,EAAe;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAc;AAAA,EAAW;AAAA,EACzF;AAAA,EAAqB;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAgB;AAAA,EAAY;AAAA,EAAa;AAAA,EAC1G;AAAA,EAAI;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAgB;AAAA,EACnF;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAe;AAAA,EAChG;AAAA,EAAiB;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAiB;AAAA,EACjF;AAAA,EAAgB;AAAA,EAAgB;AAAA,EAAkB;AAAA,EAAkB;AAAA,EAAiB;AAAA,EACrF;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAe;AAAA,EAAkB;AAAA,EAAc;AAAA,EAAW;AAAA,EAC7F;AAAA,EAAe;AAAA,EAAe;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAe;AAAA,EACnF;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAY;AAAA,EAAe;AAAA,EAAe;AAAA,EAChF;AAAA,EAAoB;AAAA,EAAe;AAAA,EAAkB;AAAA,EAAW;AAAA,EAAe;AAAA,EAAe;AAAA,EAC9F;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAc;AAAgB;AAEvF,IAAI,gBAAgB;AAAA,EAChB;AAAA,EAAW;AAAA,EAAS;AAAA,EAAoB;AAAA,EAAS;AAAA,EAAU;AAAA,EAAY;AAAA,EAAc;AAAA,EAAU;AAAA,EAC/F;AAAA,EAAa;AAAA,EAAe;AAAA,EAAa;AAAA,EAAc;AAAA,EAAY;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EACxG;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAO;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAS;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAa;AAAA,EACtG;AAAA,EAAS;AAAA,EAAW;AAAA,EAAY;AAAA,EAAM;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,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAe;AAAA,EAAa;AAAA,EACnF;AAAA,EAAe;AAAA,EAAc;AAAA,EAAS;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,EAC5G;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAa;AAAA,EAAO;AAAA,EAAc;AAAA,EACzF;AAAA,EAAa;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;AAAA,EAAU;AAAA,EAAa;AAAA,EAAa;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAC9F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAC7F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAY;AAAA,EAClG;AAAA,EAAU;AAAA,EAAa;AAAA,EAAc;AAAA,EAAc;AAAA,EAAa;AAAA,EAAa;AAAA,EAAS;AAAA,EAAY;AAAA,EAClG;AAAA,EAAM;AAAA,EAAU;AAAA,EAAY;AAAA,EAAa;AAAA,EAAa;AAAA,EAAgB;AAAA,EAAO;AAAA,EAAM;AAAA,EAAe;AAAA,EAClG;AAAA,EAAW;AAAA,EAAM;AAAA,EAAY;AAAA,EAAe;AAAA,EAAgB;AAAA,EAAS;AAAA,EAAM;AAAA,EAAU;AAAA,EACrF;AAAA,EAAc;AAAA,EAAc;AAAA,EAAW;AAAA,EAAU;AAAA,EAAe;AAAA,EAAS;AAAA,EAAiB;AAAA,EAC1F;AAAA,EAAY;AAAA,EAAoB;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAM;AAAA,EAAM;AAAA,EAAU;AAAA,EAAU;AAAA,EAC9F;AAAA,EAAiB;AAAA,EAAa;AAAA,EAAc;AAAA,EAAU;AAAA,EAAW;AAAA,EAAa;AAAA,EAAa;AAAA,EAC3F;AAAA,EAAY;AAAA,EAAiB;AAAA,EAAkB;AAAA,EAAM;AAAA,EAAM;AAAA,EAAa;AAAA,EAAkB;AAAA,EAC1F;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAe;AAAA,EAAe;AAAA,EAAU;AAAA,EAAa;AAAA,EAAU;AAAA,EAC9F;AAAA,EAAe;AAAA,EAAa;AAAA,EAAU;AAAA,EAAU;AAAA,EAAe;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAC5F;AAAA,EAAU;AAAA,EAAY;AAAA,EAAc;AAAA,EAAS;AAAA,EAAU;AAAA,EAAS;AAAA,EAAa;AAAA,EAAQ;AAAA,EAAW;AAAA,EAChG;AAAA,EAAU;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAa;AAAA,EAAO;AAAA,EACnG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAY;AAAA,EAAe;AAAA,EAAe;AAAA,EACzF;AAAA,EAAW;AAAA,EAAc;AAAA,EAAiB;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EAAc;AAAA,EAAY;AAAA,EACjG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAQ;AAWpD,SAAS,gBAAgB,MAAM;AAC3B,OAAK,OAAO;AAChB;AAEA,gBAAgB,UAAU,mBAAmB,SAASW,IAAG;AACrD,MAAI,OAAOA,GAAE,YAAY,CAAC;AAC1B,MAAI,SAAS,KAAK,KAAK;AACvB,MAAI,QAAQ;AACR,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACvC,UAAI,QAAQ,OAAO,IAAI,CAAC;AACxB,eAAS,IAAI,GAAG,IAAI,MAAM,SAAS,QAAQ,KAAK,GAAG;AAC/C,YAAI,MAAM,SAAS,CAAC,MAAM,MAAM;AAC5B,iBAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAQA,SAAS,aAAaa,OAAM;AACxB,OAAK,OAAOA;AAChB;AAMA,aAAa,UAAU,mBAAmB,SAASb,IAAG;AAClD,SAAO,KAAK,KAAK,cAAcA,GAAE,YAAY,CAAC,CAAC,KAAK;AACxD;AASA,SAAS,YAAY,UAAU,SAAS;AACpC,OAAK,WAAW;AAChB,OAAK,UAAU;AACnB;AAMA,YAAY,UAAU,mBAAmB,SAAS,GAAG;AACjD,MAAI,OAAO,EAAE,YAAY,CAAC;AAC1B,MAAI,WAAW,KAAK,SAAS,IAAI;AACjC,SAAO,KAAK,QAAQ,QAAQ,QAAQ;AACxC;AAQA,SAAS,WAAWgB,OAAM;AACtB,UAAQA,MAAK,SAAS;AAAA,IAClB,KAAK;AACD,WAAK,QAAQ,cAAc,MAAM;AACjC;AAAA,IACJ,KAAK;AACD,WAAK,QAAQ,IAAI,MAAMA,MAAK,cAAc;AAC1C,eAAS,IAAI,GAAG,IAAIA,MAAK,gBAAgB,KAAK;AAC1C,YAAIA,MAAK,eAAe,CAAC,IAAI,cAAc,QAAQ;AAC/C,eAAK,MAAM,CAAC,IAAI,cAAcA,MAAK,eAAe,CAAC,CAAC;AAAA,QACxD,OAAO;AACH,eAAK,MAAM,CAAC,IAAIA,MAAK,MAAMA,MAAK,eAAe,CAAC,IAAI,cAAc,MAAM;AAAA,QAC5E;AAAA,MACJ;AAEA;AAAA,IACJ,KAAK;AACD,WAAK,QAAQ,IAAI,MAAMA,MAAK,cAAc;AAC1C,eAAS,MAAM,GAAG,MAAMA,MAAK,gBAAgB,OAAO;AAChD,aAAK,MAAM,GAAG,IAAI,cAAc,MAAMA,MAAK,eAAe,GAAG,CAAC;AAAA,MAClE;AAEA;AAAA,IACJ,KAAK;AACD,WAAK,QAAQ,CAAC;AACd;AAAA,IACJ;AACI,WAAK,QAAQ,CAAC;AACd;AAAA,EACR;AACJ;AAOA,WAAW,UAAU,mBAAmB,SAASC,OAAM;AACnD,SAAO,KAAK,MAAM,QAAQA,KAAI;AAClC;AAMA,WAAW,UAAU,mBAAmB,SAAS,KAAK;AAClD,SAAO,KAAK,MAAM,GAAG;AACzB;AAEA,SAAS,iBAAiB,MAAM;AAC5B,MAAI;AACJ,MAAI,gBAAgB,KAAK,OAAO,KAAK;AACrC,MAAI,YAAY,OAAO,KAAK,aAAa;AAEzC,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,QAAIjB,KAAI,UAAU,CAAC;AACnB,QAAI,aAAa,cAAcA,EAAC;AAChC,YAAQ,KAAK,OAAO,IAAI,UAAU;AAClC,UAAM,WAAW,SAASA,EAAC,CAAC;AAAA,EAChC;AAEA,WAAS,MAAM,GAAG,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAQ,KAAK,OAAO,IAAI,GAAG;AAC3B,QAAI,KAAK,aAAa;AAClB,UAAI,KAAK,WAAW;AAChB,cAAM,OAAO,QAAQ;AAAA,MACzB,OAAO;AACH,cAAM,OAAO,KAAK,YAAY,QAAQ,GAAG;AAAA,MAC7C;AAAA,IACJ,WAAW,KAAK,WAAW,OAAO;AAC9B,YAAM,OAAO,KAAK,WAAW,iBAAiB,GAAG;AAAA,IACrD;AAAA,EACJ;AACJ;AAEA,SAAS,0BAA0B,MAAM;AACrC,OAAK,qBAAqB,CAAC;AAE3B,MAAI,gBAAgB,KAAK,OAAO,KAAK;AACrC,MAAI,YAAY,OAAO,KAAK,aAAa;AAEzC,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,QAAIA,KAAI,UAAU,CAAC;AACnB,QAAI,aAAa,cAAcA,EAAC;AAChC,QAAI,KAAK,mBAAmB,UAAU,MAAM,QAAW;AACnD,WAAK,mBAAmB,UAAU,IAAI;AAAA,QAClC,UAAU,CAAC,SAASA,EAAC,CAAC;AAAA,MAC1B;AAAA,IACJ,OAAO;AACH,WAAK,mBAAmB,UAAU,EAAE,SAAS,KAAK,SAASA,EAAC,CAAC;AAAA,IACjE;AAAA,EACJ;AACJ;AAOA,SAAS,cAAc,MAAM,KAAK;AAC9B,MAAI,IAAI,WAAW;AACf,8BAA0B,IAAI;AAAA,EAClC,OAAO;AACH,qBAAiB,IAAI;AAAA,EACzB;AACJ;AAKA,SAAS,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI;AAC/B,MAAI,UAAU;AACd,MAAI,OAAO,IAAI,EAAE;AACjB,MAAI,OAAO,IAAI,EAAE;AACjB,MAAI,OAAO;AACf;AAEA,IAAI,OAAO,EAAE,KAAW;AAKxB,SAAS,kBAAkB,OAAO,MAAM;AACpC,MAAI,QAAQ,QAAQ,IAAIE,MAAK;AAC7B,SAAO;AAAA,IACH,cAAc;AAAA,IAEd,KAAK,WAAW;AACZ,UAAI,OAAO,UAAU,YAAY;AAC7B,gBAAQ,MAAM;AAAA,MAClB;AAEA,aAAO;AAAA,IACX;AAAA,IAEA,KAAK,SAASY,IAAG;AACb,cAAQA;AAAA,IACZ;AAAA,EACJ;AACJ;AAyBA,SAAS,MAAM,SAAS;AAGpB,OAAK,sBAAsB,OAAO;AACtC;AAKA,MAAM,UAAU,wBAAwB,SAAS,SAAS;AACtD,OAAK,QAAQ,QAAQ,SAAS;AAG9B,OAAK,OAAO,QAAQ,QAAQ;AAC5B,OAAK,UAAU,QAAQ,WAAW;AAClC,OAAK,WAAW,QAAQ,YAAY,QAAQ,YAAY,SAAY,CAAC,QAAQ,OAAO,IAAI,CAAC;AAIzF,MAAI,UAAU,SAAS;AACnB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,UAAU,SAAS;AACnB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,UAAU,SAAS;AACnB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,UAAU,SAAS;AACnB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAEA,MAAI,kBAAkB,SAAS;AAC3B,SAAK,eAAe,QAAQ;AAAA,EAChC;AAKA,SAAO,eAAe,MAAM,QAAQ,kBAAkB,MAAM,QAAQ,IAAI,CAAC;AAC7E;AAKA,MAAM,UAAU,aAAa,SAAS,SAAS;AAC3C,MAAI,KAAK,SAAS,WAAW,GAAG;AAC5B,SAAK,UAAU;AAAA,EACnB;AAEA,OAAK,SAAS,KAAK,OAAO;AAC9B;AAMA,MAAM,UAAU,iBAAiB,WAAW;AACxC,SAAO,KAAK,KAAK,eAAe;AACpC;AAWA,MAAM,UAAU,UAAU,SAASlB,IAAGC,IAAG,UAAU,SAAS,MAAM;AAC9D,EAAAD,KAAIA,OAAM,SAAYA,KAAI;AAC1B,EAAAC,KAAIA,OAAM,SAAYA,KAAI;AAC1B,aAAW,aAAa,SAAY,WAAW;AAC/C,MAAI;AACJ,MAAI;AACJ,MAAI,CAAC,SAAS;AAAE,cAAU,CAAE;AAAA,EAAG;AAC/B,MAAI,SAAS,QAAQ;AACrB,MAAI,SAAS,QAAQ;AAErB,MAAI,QAAQ,WAAW,QAAQ,KAAK,SAAS;AAGzC,cAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,MAAM,QAAQ;AAAA,EAG3D;AAEA,MAAI,SAAS;AAET,eAAW,KAAK,QAAQ,YAAY,OAAO;AAC3C,IAAAD,KAAI,KAAK,MAAMA,EAAC;AAChB,IAAAC,KAAI,KAAK,MAAMA,EAAC;AAEhB,aAAS,SAAS;AAAA,EACtB,OAAO;AACH,eAAW,KAAK,KAAK;AACrB,QAAIqB,SAAQ,KAAK,KAAK,KAAK,cAAc,OAAQ;AACjD,QAAI,WAAW,QAAW;AAAE,eAASA;AAAA,IAAO;AAC5C,QAAI,WAAW,QAAW;AAAE,eAASA;AAAA,IAAO;AAAA,EAChD;AAEA,MAAIJ,KAAI,IAAIZ,MAAK;AACjB,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AACzC,QAAI,MAAM,SAAS,CAAC;AACpB,QAAI,IAAI,SAAS,KAAK;AAClB,MAAAY,GAAE,OAAOlB,KAAK,IAAI,IAAI,QAASC,KAAK,CAAC,IAAI,IAAI,MAAO;AAAA,IACxD,WAAW,IAAI,SAAS,KAAK;AACzB,MAAAiB,GAAE,OAAOlB,KAAK,IAAI,IAAI,QAASC,KAAK,CAAC,IAAI,IAAI,MAAO;AAAA,IACxD,WAAW,IAAI,SAAS,KAAK;AACzB,MAAAiB,GAAE;AAAA,QAAiBlB,KAAK,IAAI,KAAK;AAAA,QAASC,KAAK,CAAC,IAAI,KAAK;AAAA,QACtCD,KAAK,IAAI,IAAI;AAAA,QAASC,KAAK,CAAC,IAAI,IAAI;AAAA,MAAO;AAAA,IAClE,WAAW,IAAI,SAAS,KAAK;AACzB,MAAAiB,GAAE;AAAA,QAAQlB,KAAK,IAAI,KAAK;AAAA,QAASC,KAAK,CAAC,IAAI,KAAK;AAAA,QACtCD,KAAK,IAAI,KAAK;AAAA,QAASC,KAAK,CAAC,IAAI,KAAK;AAAA,QACtCD,KAAK,IAAI,IAAI;AAAA,QAASC,KAAK,CAAC,IAAI,IAAI;AAAA,MAAO;AAAA,IACzD,WAAW,IAAI,SAAS,KAAK;AACzB,MAAAiB,GAAE,UAAU;AAAA,IAChB;AAAA,EACJ;AAEA,SAAOA;AACX;AAQA,MAAM,UAAU,cAAc,WAAW;AACrC,MAAI,KAAK,WAAW,QAAW;AAC3B,WAAO,CAAC;AAAA,EACZ;AAEA,MAAI,WAAW,CAAC;AAChB,MAAI,iBAAiB,CAAC;AACtB,WAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC5C,QAAI,KAAK,KAAK,OAAO,CAAC;AACtB,mBAAe,KAAK,EAAE;AACtB,QAAI,GAAG,oBAAoB;AACvB,eAAS,KAAK,cAAc;AAC5B,uBAAiB,CAAC;AAAA,IACtB;AAAA,EACJ;AAEA,QAAM,SAAS,eAAe,WAAW,GAAG,qDAAqD;AACjG,SAAO;AACX;AAMA,MAAM,UAAU,aAAa,WAAW;AACpC,MAAI,WAAW,KAAK,KAAK;AACzB,MAAI,UAAU,CAAC;AACf,MAAI,UAAU,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AACzC,QAAI,MAAM,SAAS,CAAC;AACpB,QAAI,IAAI,SAAS,KAAK;AAClB,cAAQ,KAAK,IAAI,CAAC;AAClB,cAAQ,KAAK,IAAI,CAAC;AAAA,IACtB;AAEA,QAAI,IAAI,SAAS,OAAO,IAAI,SAAS,KAAK;AACtC,cAAQ,KAAK,IAAI,EAAE;AACnB,cAAQ,KAAK,IAAI,EAAE;AAAA,IACvB;AAEA,QAAI,IAAI,SAAS,KAAK;AAClB,cAAQ,KAAK,IAAI,EAAE;AACnB,cAAQ,KAAK,IAAI,EAAE;AAAA,IACvB;AAAA,EACJ;AAEA,MAAI,UAAU;AAAA,IACV,MAAM,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,IAClC,iBAAiB,KAAK;AAAA,EAC1B;AAEA,MAAI,CAAC,SAAS,QAAQ,IAAI,GAAG;AACzB,YAAQ,OAAO;AAAA,EACnB;AAEA,MAAI,CAAC,SAAS,QAAQ,IAAI,GAAG;AACzB,YAAQ,OAAO,KAAK;AAAA,EACxB;AAEA,MAAI,CAAC,SAAS,QAAQ,IAAI,GAAG;AACzB,YAAQ,OAAO;AAAA,EACnB;AAEA,MAAI,CAAC,SAAS,QAAQ,IAAI,GAAG;AACzB,YAAQ,OAAO;AAAA,EACnB;AAEA,UAAQ,mBAAmB,KAAK,eAAe,QAAQ,mBAAmB,QAAQ,OAAO,QAAQ;AACjG,SAAO;AACX;AAUA,MAAM,UAAU,OAAO,SAAS,KAAKlB,IAAGC,IAAG,UAAU,SAAS;AAC1D,OAAK,QAAQD,IAAGC,IAAG,UAAU,OAAO,EAAE,KAAK,GAAG;AAClD;AAUA,MAAM,UAAU,aAAa,SAAS,KAAKD,IAAGC,IAAG,UAAU;AACvD,WAAS,YAAYU,IAAGX,IAAGC,IAAGqB,QAAO;AACjC,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAIX,GAAE,QAAQ,KAAK,GAAG;AAClC,UAAI,OAAOX,KAAKW,GAAE,CAAC,EAAE,IAAIW,QAAQrB,KAAKU,GAAE,CAAC,EAAE,IAAIW,MAAM;AACrD,UAAI,IAAItB,KAAKW,GAAE,CAAC,EAAE,IAAIW,QAAQrB,KAAKU,GAAE,CAAC,EAAE,IAAIW,QAAQ,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK;AAAA,IAChF;AAEA,QAAI,UAAU;AACd,QAAI,KAAK;AAAA,EACb;AAEA,EAAAtB,KAAIA,OAAM,SAAYA,KAAI;AAC1B,EAAAC,KAAIA,OAAM,SAAYA,KAAI;AAC1B,aAAW,aAAa,SAAY,WAAW;AAC/C,MAAIqB,SAAQ,IAAI,KAAK,KAAK,aAAa;AAEvC,MAAI,cAAc,CAAC;AACnB,MAAI,aAAa,CAAC;AAClB,MAAI,OAAO,KAAK;AAChB,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK,GAAG;AAC9C,QAAI,MAAM,KAAK,SAAS,CAAC;AACzB,QAAI,IAAI,MAAM,QAAW;AACrB,kBAAY,KAAK,EAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,EAAC,CAAC;AAAA,IAC1C;AAEA,QAAI,IAAI,OAAO,QAAW;AACtB,iBAAW,KAAK,EAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,GAAE,CAAC;AAAA,IAC3C;AAEA,QAAI,IAAI,OAAO,QAAW;AACtB,iBAAW,KAAK,EAAC,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,GAAE,CAAC;AAAA,IAC3C;AAAA,EACJ;AAEA,MAAI,YAAY;AAChB,cAAY,aAAatB,IAAGC,IAAGqB,MAAK;AACpC,MAAI,YAAY;AAChB,cAAY,YAAYtB,IAAGC,IAAGqB,MAAK;AACvC;AAYA,MAAM,UAAU,cAAc,SAAS,KAAKtB,IAAGC,IAAG,UAAU;AACxD,MAAIqB;AACJ,EAAAtB,KAAIA,OAAM,SAAYA,KAAI;AAC1B,EAAAC,KAAIA,OAAM,SAAYA,KAAI;AAC1B,aAAW,aAAa,SAAY,WAAW;AAC/C,EAAAqB,SAAQ,IAAI,KAAK,KAAK,aAAa;AACnC,MAAI,YAAY;AAGhB,MAAI,cAAc;AAClB,OAAK,KAAK,KAAKtB,IAAG,MAAQA,IAAG,GAAK;AAClC,OAAK,KAAK,KAAK,MAAQC,IAAG,KAAOA,EAAC;AAIlC,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,OAAO,KAAK,QAAQ;AACxB,MAAI,eAAe,KAAK,gBAAgB;AAGxC,MAAI,cAAc;AAClB,OAAK,KAAK,KAAKD,KAAK,OAAOsB,QAAQ,MAAQtB,KAAK,OAAOsB,QAAQ,GAAK;AACpE,OAAK,KAAK,KAAKtB,KAAK,OAAOsB,QAAQ,MAAQtB,KAAK,OAAOsB,QAAQ,GAAK;AACpE,OAAK,KAAK,KAAK,MAAQrB,KAAK,CAAC,OAAOqB,QAAQ,KAAOrB,KAAK,CAAC,OAAOqB,MAAM;AACtE,OAAK,KAAK,KAAK,MAAQrB,KAAK,CAAC,OAAOqB,QAAQ,KAAOrB,KAAK,CAAC,OAAOqB,MAAM;AAGtE,MAAI,cAAc;AAClB,OAAK,KAAK,KAAKtB,KAAK,eAAesB,QAAQ,MAAQtB,KAAK,eAAesB,QAAQ,GAAK;AACxF;AAKA,SAAS,wBAAwB,OAAO,cAAc,cAAc;AAChE,SAAO,eAAe,OAAO,cAAc;AAAA,IACvC,KAAK,WAAW;AAEZ,YAAM;AACN,aAAO,MAAM,YAAY;AAAA,IAC7B;AAAA,IACA,KAAK,SAAS,UAAU;AACpB,YAAM,YAAY,IAAI;AAAA,IAC1B;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAClB,CAAC;AACL;AAWA,SAAS,SAAS,MAAM,QAAQ;AAC5B,OAAK,OAAO;AACZ,OAAK,SAAS,CAAC;AACf,MAAI,MAAM,QAAQ,MAAM,GAAG;AACvB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,QAAQ,OAAO,CAAC;AACpB,YAAM,KAAK,aAAa,KAAK;AAC7B,WAAK,OAAO,CAAC,IAAI;AAAA,IACrB;AAAA,EACJ;AAEA,OAAK,SAAU,UAAU,OAAO,UAAW;AAC/C;AAMA,SAAS,UAAU,MAAM,SAASlC,QAAO;AAErC,MAAI,KAAK,OAAOA,MAAK,MAAM,QAAW;AAClC,SAAK,KAAK,MAAMA,MAAK;AACrB,QAAI,OAAO,KAAK,OAAOA,MAAK,MAAM,YAAY;AAC1C,WAAK,OAAOA,MAAK,IAAI,KAAK,OAAOA,MAAK,EAAE;AAAA,IAC5C;AAEA,QAAI,QAAQ,KAAK,OAAOA,MAAK;AAC7B,QAAI,aAAa,KAAK,KAAK,mBAAmBA,MAAK;AAEnD,QAAI,YAAY;AACZ,eAAS,IAAI,GAAG,IAAI,WAAW,SAAS,QAAQ,KAC5C;AAAE,cAAM,WAAW,WAAW,SAAS,CAAC,CAAC;AAAA,MAAG;AAAA,IACpD;AAEA,QAAI,KAAK,KAAK,aAAa;AACvB,UAAI,KAAK,KAAK,WAAW;AACrB,cAAM,OAAO,QAAQA;AAAA,MACzB,OAAO;AACH,cAAM,OAAO,KAAK,KAAK,YAAY,QAAQA,MAAK;AAAA,MACpD;AAAA,IACJ,WAAW,KAAK,KAAK,WAAW,OAAO;AACnC,YAAM,OAAO,KAAK,KAAK,WAAW,iBAAiBA,MAAK;AAAA,IAC5D;AAEA,SAAK,OAAOA,MAAK,EAAE,eAAe,KAAK,KAAK,eAAeA,MAAK,EAAE;AAClE,SAAK,OAAOA,MAAK,EAAE,kBAAkB,KAAK,KAAK,eAAeA,MAAK,EAAE;AAAA,EACzE,OAAO;AACH,QAAI,OAAO,KAAK,OAAOA,MAAK,MAAM,YAAY;AAC1C,WAAK,OAAOA,MAAK,IAAI,KAAK,OAAOA,MAAK,EAAE;AAAA,IAC5C;AAAA,EACJ;AAEA,SAAO,KAAK,OAAOA,MAAK;AAC5B;AAMA,SAAS,UAAU,OAAO,SAASA,QAAO,QAAQ;AAC9C,OAAK,OAAOA,MAAK,IAAI;AACrB,OAAK;AACT;AAQA,SAAS,YAAY,MAAMA,QAAO;AAC9B,SAAO,IAAI,MAAM,EAAC,OAAOA,QAAO,KAAU,CAAC;AAC/C;AAeA,SAAS,eAAe,MAAMA,QAAOmC,aAAYd,OAAMvB,WAAUsC,YAAW;AACxE,SAAO,WAAW;AACd,QAAI,QAAQ,IAAI,MAAM,EAAC,OAAOpC,QAAO,KAAU,CAAC;AAEhD,UAAM,OAAO,WAAW;AACpB,MAAAmC,YAAW,OAAOd,OAAMvB,SAAQ;AAChC,UAAI,OAAOsC,WAAU,KAAK,QAAQ,KAAK;AACvC,WAAK,aAAa,KAAK;AACvB,aAAO;AAAA,IACX;AAEA,4BAAwB,OAAO,QAAQ,OAAO;AAC9C,4BAAwB,OAAO,QAAQ,OAAO;AAC9C,4BAAwB,OAAO,QAAQ,OAAO;AAC9C,4BAAwB,OAAO,QAAQ,OAAO;AAE9C,WAAO;AAAA,EACX;AACJ;AASA,SAAS,eAAe,MAAMpC,QAAOqC,qBAAoB,YAAY;AACjE,SAAO,WAAW;AACd,QAAI,QAAQ,IAAI,MAAM,EAAC,OAAOrC,QAAO,KAAU,CAAC;AAEhD,UAAM,OAAO,WAAW;AACpB,UAAI,OAAOqC,oBAAmB,MAAM,OAAO,UAAU;AACrD,WAAK,aAAa,KAAK;AACvB,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;AAEA,IAAI,WAAW,EAAE,UAAoB,aAA0B,gBAAgC,eAA+B;AAK9H,SAAS,OAAOtB,IAAGD,IAAG;AAClB,MAAIC,OAAMD,IAAG;AACT,WAAO;AAAA,EACX,WAAW,MAAM,QAAQC,EAAC,KAAK,MAAM,QAAQD,EAAC,GAAG;AAC7C,QAAIC,GAAE,WAAWD,GAAE,QAAQ;AACvB,aAAO;AAAA,IACX;AAEA,aAAS,IAAI,GAAG,IAAIC,GAAE,QAAQ,KAAK,GAAG;AAClC,UAAI,CAAC,OAAOA,GAAE,CAAC,GAAGD,GAAE,CAAC,CAAC,GAAG;AACrB,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,OAAO;AACH,WAAO;AAAA,EACX;AACJ;AAIA,SAAS,sBAAsB,OAAO;AAClC,MAAI;AACJ,MAAI,MAAM,SAAS,MAAM;AACrB,WAAO;AAAA,EACX,WAAW,MAAM,SAAS,OAAO;AAC7B,WAAO;AAAA,EACX,OAAO;AACH,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAIA,SAAS,cAAcO,OAAM,OAAO,cAAc;AAC9C,MAAI,UAAU,CAAC;AACf,MAAI,UAAU,CAAC;AACf,MAAI,QAAQ,MAAM,UAAUA,OAAM,KAAK;AACvC,MAAI;AACJ,MAAI;AACJ,MAAI,UAAU,GAAG;AACb,QAAI,aAAa,MAAM,QAAQA,OAAM,QAAQ,CAAC;AAC9C,mBAAe,SAAU,QAAQ,KAAK,aAAc;AACpD,QAAI,MAAM,QAAQ;AAClB,aAAS,IAAI,GAAG,IAAI,QAAQ,GAAG,KAAK,GAAG;AACnC,cAAQ,KAAK,MAAM,UAAUA,OAAM,KAAK,UAAU,CAAC;AACnD,aAAO;AAAA,IACX;AAGA,gBAAY,eAAe,QAAQ,KAAK;AAAA,EAC5C,OAAO;AACH,gBAAY,QAAQ;AAAA,EACxB;AAEA,WAAS,MAAM,GAAG,MAAM,QAAQ,SAAS,GAAG,OAAO,GAAG;AAClD,QAAID,SAAQ,MAAM,SAASC,OAAM,eAAe,QAAQ,GAAG,GAAG,eAAe,QAAQ,MAAM,CAAC,CAAC;AAC7F,QAAI,cAAc;AACd,MAAAD,SAAQ,aAAaA,MAAK;AAAA,IAC9B;AAEA,YAAQ,KAAKA,MAAK;AAAA,EACtB;AAEA,SAAO,EAAC,SAAkB,aAAa,OAAO,UAAoB;AACtE;AAEA,SAAS,uBAAuBC,OAAM,OAAO;AACzC,MAAI,UAAU,CAAC;AACf,MAAI,QAAQ,MAAM,UAAUA,OAAM,KAAK;AACvC,MAAI;AACJ,MAAI;AACJ,MAAI,UAAU,GAAG;AACb,QAAI,aAAa,MAAM,QAAQA,OAAM,QAAQ,CAAC;AAC9C,mBAAe,SAAU,QAAQ,KAAK,aAAc;AACpD,QAAI,MAAM,QAAQ;AAClB,aAAS,IAAI,GAAG,IAAI,QAAQ,GAAG,KAAK,GAAG;AACnC,cAAQ,KAAK,MAAM,UAAUA,OAAM,KAAK,UAAU,CAAC;AACnD,aAAO;AAAA,IACX;AAGA,gBAAY,eAAe,QAAQ,KAAK;AAAA,EAC5C,OAAO;AACH,gBAAY,QAAQ;AAAA,EACxB;AAEA,SAAO,EAAC,SAAkB,aAAa,OAAO,UAAoB;AACtE;AACA,SAAS,kBAAkB,GAAG,SAASA,OAAM,OAAO,cAAc;AAC9D,MAAI,QAAQ,MAAM,UAAUA,OAAM,KAAK;AACvC,MAAI,eAAe;AACnB,MAAI,UAAU,GAAG;AACb,QAAI,aAAa,MAAM,QAAQA,OAAM,QAAQ,CAAC;AAC9C,mBAAe,SAAU,QAAQ,KAAK,aAAc;AAAA,EACxD;AAEA,MAAID,SAAQ,MAAM,SAASC,OAAM,eAAe,QAAQ,CAAC,GAAG,eAAe,QAAQ,IAAI,CAAC,CAAC;AACzF,MAAI,cAAc;AACd,IAAAD,SAAQ,aAAaA,MAAK;AAAA,EAC9B;AACA,SAAOA;AACX;AAGA,SAAS,kBAAkB,QAAQ;AAC/B,MAAI,IAAI;AACR,MAAI,MAAM;AACV,MAAI,SAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,GAAG;AACzF,SAAO,MAAM;AACT,QAAIN,KAAI,OAAO,UAAU;AACzB,QAAI,KAAKA,MAAK;AACd,QAAI,KAAKA,KAAI;AAEb,QAAI,OAAO,KAAK;AACZ;AAAA,IACJ;AAEA,SAAK,OAAO,EAAE;AAEd,QAAI,OAAO,KAAK;AACZ;AAAA,IACJ;AAEA,SAAK,OAAO,EAAE;AAAA,EAClB;AAEA,SAAO,WAAW,CAAC;AACvB;AAGA,SAAS,aAAa,QAAQ,IAAI;AAC9B,MAAI;AACJ,MAAIwB;AACJ,MAAI;AACJ,MAAIC;AACJ,MAAI,OAAO,IAAI;AACX,SAAK,OAAO,UAAU;AACtB,IAAAD,MAAK,OAAO,UAAU;AACtB,WAAO,MAAM,IAAIA;AAAA,EACrB;AAEA,MAAI,OAAO,IAAI;AACX,SAAK,OAAO,UAAU;AACtB,IAAAA,MAAK,OAAO,UAAU;AACtB,SAAK,OAAO,UAAU;AACtB,IAAAC,MAAK,OAAO,UAAU;AACtB,WAAO,MAAM,KAAKD,OAAM,KAAK,MAAM,IAAIC;AAAA,EAC3C;AAEA,MAAI,OAAO,IAAI;AACX,WAAO,kBAAkB,MAAM;AAAA,EACnC;AAEA,MAAI,MAAM,MAAM,MAAM,KAAK;AACvB,WAAO,KAAK;AAAA,EAChB;AAEA,MAAI,MAAM,OAAO,MAAM,KAAK;AACxB,SAAK,OAAO,UAAU;AACtB,YAAQ,KAAK,OAAO,MAAM,KAAK;AAAA,EACnC;AAEA,MAAI,MAAM,OAAO,MAAM,KAAK;AACxB,SAAK,OAAO,UAAU;AACtB,WAAO,EAAE,KAAK,OAAO,MAAM,KAAK;AAAA,EACpC;AAEA,QAAM,IAAI,MAAM,gBAAgB,EAAE;AACtC;AAIA,SAAS,gBAAgB,SAAS;AAC9B,MAAI,IAAI,CAAC;AACT,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AACxC,QAAIC,OAAM,QAAQ,CAAC,EAAE,CAAC;AACtB,QAAIZ,UAAS,QAAQ,CAAC,EAAE,CAAC;AACzB,QAAIR,SAAS;AACb,QAAIQ,QAAO,WAAW,GAAG;AACrB,MAAAR,SAAQQ,QAAO,CAAC;AAAA,IACpB,OAAO;AACH,MAAAR,SAAQQ;AAAA,IACZ;AAEA,QAAI,EAAE,eAAeY,IAAG,KAAK,CAAC,MAAM,EAAEA,IAAG,CAAC,GAAG;AACzC,YAAM,IAAI,MAAM,YAAY,IAAI,sBAAsBA,IAAG;AAAA,IAC7D;AAEA,MAAEA,IAAG,IAAIpB;AAAA,EACb;AAEA,SAAO;AACX;AAIA,SAAS,aAAaC,OAAM,OAAOtB,OAAM;AACrC,UAAQ,UAAU,SAAY,QAAQ;AACtC,MAAI,SAAS,IAAI,MAAM,OAAOsB,OAAM,KAAK;AACzC,MAAI,UAAU,CAAC;AACf,MAAI,WAAW,CAAC;AAChB,EAAAtB,QAAOA,UAAS,SAAYA,QAAOsB,MAAK;AAExC,SAAO,OAAO,iBAAiBtB,OAAM;AACjC,QAAI,KAAK,OAAO,UAAU;AAI1B,QAAI,MAAM,IAAI;AAEV,UAAI,OAAO,IAAI;AACX,aAAK,OAAO,OAAO,UAAU;AAAA,MACjC;AAEA,cAAQ,KAAK,CAAC,IAAI,QAAQ,CAAC;AAC3B,iBAAW,CAAC;AAAA,IAChB,OAAO;AAGH,eAAS,KAAK,aAAa,QAAQ,EAAE,CAAC;AAAA,IAC1C;AAAA,EACJ;AAEA,SAAO,gBAAgB,OAAO;AAClC;AAIA,SAAS,aAAa,SAASC,QAAO;AAClC,MAAIA,UAAS,KAAK;AACd,IAAAA,SAAQ,mBAAmBA,MAAK;AAAA,EACpC,OAAO;AACH,IAAAA,SAAQ,QAAQA,SAAQ,GAAG;AAAA,EAC/B;AAEA,SAAOA;AACX;AAIA,SAAS,cAAc,MAAMyC,OAAM,SAAS;AACxC,MAAI,UAAU,CAAC;AACf,MAAIrB;AAIJ,WAAS,IAAI,GAAG,IAAIqB,MAAK,QAAQ,KAAK,GAAG;AACrC,QAAI,IAAIA,MAAK,CAAC;AAEd,QAAI,MAAM,QAAQ,EAAE,IAAI,GAAG;AACvB,UAAIb,UAAS,CAAC;AACd,MAAAA,QAAO,SAAS,EAAE,KAAK;AACvB,eAAS,IAAI,GAAG,IAAI,EAAE,KAAK,QAAQ,KAAK;AACpC,QAAAR,SAAQ,KAAK,EAAE,EAAE,MAAM,SAAY,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI;AACnD,YAAIA,WAAU,QAAW;AACrB,UAAAA,SAAQ,EAAE,UAAU,UAAa,EAAE,MAAM,CAAC,MAAM,SAAY,EAAE,MAAM,CAAC,IAAI;AAAA,QAC7E;AACA,YAAI,EAAE,KAAK,CAAC,MAAM,OAAO;AACrB,UAAAA,SAAQ,aAAa,SAASA,MAAK;AAAA,QACvC;AACA,QAAAQ,QAAO,CAAC,IAAIR;AAAA,MAChB;AACA,cAAQ,EAAE,IAAI,IAAIQ;AAAA,IACtB,OAAO;AACH,MAAAR,SAAQ,KAAK,EAAE,EAAE;AACjB,UAAIA,WAAU,QAAW;AACrB,QAAAA,SAAQ,EAAE,UAAU,SAAY,EAAE,QAAQ;AAAA,MAC9C;AAEA,UAAI,EAAE,SAAS,OAAO;AAClB,QAAAA,SAAQ,aAAa,SAASA,MAAK;AAAA,MACvC;AACA,cAAQ,EAAE,IAAI,IAAIA;AAAA,IACtB;AAAA,EACJ;AAEA,SAAO;AACX;AAGA,SAAS,eAAeC,OAAM,OAAO;AACjC,MAAI,SAAS,CAAC;AACd,SAAO,cAAc,MAAM,SAASA,OAAM,KAAK;AAC/C,SAAO,cAAc,MAAM,SAASA,OAAM,QAAQ,CAAC;AACnD,SAAO,OAAO,MAAM,SAASA,OAAM,QAAQ,CAAC;AAC5C,SAAO,aAAa,MAAM,SAASA,OAAM,QAAQ,CAAC;AAClD,SAAO,cAAc;AACrB,SAAO,YAAY,QAAQ;AAC3B,SAAO;AACX;AAEA,IAAI,gBAAgB;AAAA,EAChB,EAAC,MAAM,WAAW,IAAI,GAAG,MAAM,MAAK;AAAA,EACpC,EAAC,MAAM,UAAU,IAAI,GAAG,MAAM,MAAK;AAAA,EACnC,EAAC,MAAM,aAAa,IAAI,MAAM,MAAM,MAAK;AAAA,EACzC,EAAC,MAAM,YAAY,IAAI,GAAG,MAAM,MAAK;AAAA,EACrC,EAAC,MAAM,cAAc,IAAI,GAAG,MAAM,MAAK;AAAA,EACvC,EAAC,MAAM,UAAU,IAAI,GAAG,MAAM,MAAK;AAAA,EACnC,EAAC,MAAM,gBAAgB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACzD,EAAC,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACxD,EAAC,MAAM,qBAAqB,IAAI,MAAM,MAAM,UAAU,OAAO,KAAI;AAAA,EACjE,EAAC,MAAM,sBAAsB,IAAI,MAAM,MAAM,UAAU,OAAO,GAAE;AAAA,EAChE,EAAC,MAAM,aAAa,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACtD,EAAC,MAAM,kBAAkB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC3D;AAAA,IACI,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,IACrD,OAAO,CAAC,MAAO,GAAG,GAAG,MAAO,GAAG,CAAC;AAAA,EACpC;AAAA,EACA,EAAC,MAAM,YAAY,IAAI,IAAI,MAAM,SAAQ;AAAA,EACzC,EAAC,MAAM,YAAY,IAAI,GAAG,MAAM,CAAC,UAAU,UAAU,UAAU,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,EAAC;AAAA,EAC7F,EAAC,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACxD,EAAC,MAAM,QAAQ,IAAI,IAAI,MAAM,CAAC,GAAG,OAAO,KAAI;AAAA,EAC5C,EAAC,MAAM,WAAW,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EAClD,EAAC,MAAM,YAAY,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACnD,EAAC,MAAM,eAAe,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACtD,EAAC,MAAM,WAAW,IAAI,IAAI,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAAC;AAAA,EACnE,EAAC,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC,OAAO,OAAO,QAAQ,EAAC;AAAA,EACtD,EAAC,MAAM,kBAAkB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC3D,EAAC,MAAM,mBAAmB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC5D,EAAC,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACxD,EAAC,MAAM,YAAY,IAAI,MAAM,MAAM,UAAU,OAAO,KAAI;AAAA,EACxD,EAAC,MAAM,WAAW,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC1C,EAAC,MAAM,WAAW,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC1C,EAAC,MAAM,YAAY,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC3C,EAAC,MAAM,YAAY,IAAI,MAAM,MAAM,MAAK;AAC5C;AAEA,IAAI,oBAAoB;AAAA,EACpB,EAAC,MAAM,SAAS,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EAChD,EAAC,MAAM,iBAAiB,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACxD,EAAC,MAAM,iBAAiB,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAC5D;AAIA,SAAS,gBAAgBA,OAAM,SAAS;AACpC,MAAI,OAAO,aAAaA,OAAM,GAAGA,MAAK,UAAU;AAChD,SAAO,cAAc,MAAM,eAAe,OAAO;AACrD;AAGA,SAAS,oBAAoBA,OAAM,OAAOtB,OAAM,SAAS;AACrD,MAAI,OAAO,aAAasB,OAAM,OAAOtB,KAAI;AACzC,SAAO,cAAc,MAAM,mBAAmB,OAAO;AACzD;AAiBA,SAAS,kBAAkBsB,OAAM,OAAO,UAAU,SAAS;AACvD,MAAI,eAAe,CAAC;AACpB,WAAS,WAAW,GAAG,WAAW,SAAS,QAAQ,YAAY,GAAG;AAC9D,QAAI,cAAc,IAAI,SAAS,IAAI,WAAW,SAAS,QAAQ,CAAC,EAAE,MAAM;AACxE,QAAI,UAAU,gBAAgB,aAAa,OAAO;AAClD,YAAQ,SAAS,CAAC;AAClB,YAAQ,aAAa;AACrB,YAAQ,iBAAiB;AACzB,YAAQ,iBAAiB;AACzB,QAAI,cAAc,QAAQ,QAAQ,CAAC;AACnC,QAAI,gBAAgB,QAAQ,QAAQ,CAAC;AACrC,QAAI,gBAAgB,KAAK,kBAAkB,GAAG;AAC1C,UAAI,cAAc,oBAAoBA,OAAM,gBAAgB,OAAO,aAAa,OAAO;AACvF,cAAQ,iBAAiB,YAAY;AACrC,cAAQ,iBAAiB,YAAY;AACrC,UAAI,YAAY,UAAU,GAAG;AACzB,YAAI,aAAa,gBAAgB,YAAY;AAC7C,YAAI,YAAY,cAAcA,OAAM,aAAa,KAAK;AACtD,gBAAQ,SAAS,UAAU;AAC3B,gBAAQ,aAAa,sBAAsB,QAAQ,MAAM;AAAA,MAC7D;AACA,cAAQ,eAAe;AAAA,IAC3B;AACA,iBAAa,KAAK,OAAO;AAAA,EAC7B;AACA,SAAO;AACX;AAKA,SAAS,gBAAgBA,OAAM,OAAO,SAAS,SAAS;AACpD,MAAI;AACJ,MAAI;AACJ,MAAI,SAAS,IAAI,MAAM,OAAOA,OAAM,KAAK;AAGzC,aAAW;AACX,MAAI,UAAU,CAAC,SAAS;AAExB,MAAI,SAAS,OAAO,WAAW;AAC/B,MAAI,WAAW,GAAG;AACd,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK,GAAG;AACjC,YAAM,OAAO,SAAS;AACtB,cAAQ,KAAK,aAAa,SAAS,GAAG,CAAC;AAAA,IAC3C;AAAA,EACJ,WAAW,WAAW,GAAG;AACrB,WAAO,QAAQ,UAAU,SAAS;AAC9B,YAAM,OAAO,SAAS;AACtB,cAAQ,OAAO,WAAW;AAC1B,eAAS,MAAM,GAAG,OAAO,OAAO,OAAO,GAAG;AACtC,gBAAQ,KAAK,aAAa,SAAS,GAAG,CAAC;AACvC,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,WAAW,WAAW,GAAG;AACrB,WAAO,QAAQ,UAAU,SAAS;AAC9B,YAAM,OAAO,SAAS;AACtB,cAAQ,OAAO,YAAY;AAC3B,eAAS,MAAM,GAAG,OAAO,OAAO,OAAO,GAAG;AACtC,gBAAQ,KAAK,aAAa,SAAS,GAAG,CAAC;AACvC,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,UAAM,IAAI,MAAM,4BAA4B,MAAM;AAAA,EACtD;AAEA,SAAO;AACX;AAIA,SAAS,iBAAiBA,OAAM,OAAO,SAAS;AAC5C,MAAI;AACJ,MAAI,MAAM,CAAC;AACX,MAAI,SAAS,IAAI,MAAM,OAAOA,OAAM,KAAK;AACzC,MAAI,SAAS,OAAO,WAAW;AAC/B,MAAI,WAAW,GAAG;AACd,QAAI,SAAS,OAAO,WAAW;AAC/B,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAChC,aAAO,OAAO,WAAW;AACzB,UAAI,IAAI,IAAI;AAAA,IAChB;AAAA,EACJ,WAAW,WAAW,GAAG;AACrB,QAAI,UAAU,OAAO,WAAW;AAChC,WAAO;AACP,aAAS,MAAM,GAAG,MAAM,SAAS,OAAO,GAAG;AACvC,UAAIpB,SAAQ,OAAO,WAAW;AAC9B,UAAI,QAAQ,OAAO,WAAW;AAC9B,eAAS,IAAIA,QAAO,KAAKA,SAAQ,OAAO,KAAK,GAAG;AAC5C,YAAI,CAAC,IAAI;AACT,gBAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,UAAM,IAAI,MAAM,6BAA6B,MAAM;AAAA,EACvD;AAEA,SAAO,IAAI,YAAY,KAAK,OAAO;AACvC;AAKA,SAAS,mBAAmB,MAAM,OAAO,MAAM;AAC3C,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI6B,KAAI,IAAIZ,MAAK;AACjB,MAAI,QAAQ,CAAC;AACb,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,OAAO;AACX,MAAIN,KAAI;AACR,MAAIC,KAAI;AACR,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,KAAK,WAAW;AAChB,QAAI,UAAU,KAAK,OAAO,IAAI,QAAQ,UAAU,MAAM,KAAK;AAC3D,QAAI,SAAS,KAAK,OAAO,IAAI,QAAQ,SAAS,OAAO;AACrD,YAAQ,OAAO;AACf,gBAAY,OAAO;AACnB,oBAAgB,OAAO;AACvB,oBAAgB,OAAO;AAAA,EAC3B,OAAO;AACH,YAAQ,KAAK,OAAO,IAAI,QAAQ;AAChC,gBAAY,KAAK,OAAO,IAAI,QAAQ;AACpC,oBAAgB,KAAK,OAAO,IAAI,QAAQ;AACxC,oBAAgB,KAAK,OAAO,IAAI,QAAQ;AAAA,EAC5C;AACA,MAAI6B,SAAQ;AAEZ,WAAS,WAAW9B,IAAGC,IAAG;AACtB,QAAI,MAAM;AACN,MAAAiB,GAAE,UAAU;AAAA,IAChB;AAEA,IAAAA,GAAE,OAAOlB,IAAGC,EAAC;AACb,WAAO;AAAA,EACX;AAEA,WAAS,aAAa;AAClB,QAAI;AAIJ,kBAAc,MAAM,SAAS,MAAM;AACnC,QAAI,eAAe,CAAC,WAAW;AAC3B,MAAA6B,SAAQ,MAAM,MAAM,IAAI;AAAA,IAC5B;AAEA,cAAU,MAAM,UAAU;AAC1B,UAAM,SAAS;AACf,gBAAY;AAAA,EAChB;AAEA,WAASC,OAAMC,OAAM;AACjB,QAAI;AACJ,QAAIN;AACJ,QAAI;AACJ,QAAIC;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,IAAI;AACR,WAAO,IAAIK,MAAK,QAAQ;AACpB,UAAI,IAAIA,MAAK,CAAC;AACd,WAAK;AACL,cAAQ,GAAG;AAAA,QACP,KAAK;AACD,qBAAW;AACX;AAAA,QACJ,KAAK;AACD,qBAAW;AACX;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,KAAK,CAAC,WAAW;AAChC,YAAAF,SAAQ,MAAM,MAAM,IAAI;AACxB,wBAAY;AAAA,UAChB;AAEA,UAAA7B,MAAK,MAAM,IAAI;AACf,qBAAWD,IAAGC,EAAC;AACf;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,YAAAD,MAAK,MAAM,MAAM;AACjB,YAAAC,MAAK,MAAM,MAAM;AACjB,YAAAiB,GAAE,OAAOlB,IAAGC,EAAC;AAAA,UACjB;AAEA;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,YAAAD,MAAK,MAAM,MAAM;AACjB,YAAAkB,GAAE,OAAOlB,IAAGC,EAAC;AACb,gBAAI,MAAM,WAAW,GAAG;AACpB;AAAA,YACJ;AAEA,YAAAA,MAAK,MAAM,MAAM;AACjB,YAAAiB,GAAE,OAAOlB,IAAGC,EAAC;AAAA,UACjB;AAEA;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,YAAAA,MAAK,MAAM,MAAM;AACjB,YAAAiB,GAAE,OAAOlB,IAAGC,EAAC;AACb,gBAAI,MAAM,WAAW,GAAG;AACpB;AAAA,YACJ;AAEA,YAAAD,MAAK,MAAM,MAAM;AACjB,YAAAkB,GAAE,OAAOlB,IAAGC,EAAC;AAAA,UACjB;AAEA;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAMD,KAAI,MAAM,MAAM;AACtB,kBAAMC,KAAI,MAAM,MAAM;AACtB,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAC,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA;AAAA,QACJ,KAAK;AACD,sBAAY,MAAM,IAAI,IAAI;AAC1B,qBAAW,MAAM,SAAS;AAC1B,cAAI,UAAU;AACV,YAAA8B,OAAM,QAAQ;AAAA,UAClB;AAEA;AAAA,QACJ,KAAK;AACD;AAAA,QACJ,KAAK;AACD,cAAIC,MAAK,CAAC;AACV,eAAK;AACL,kBAAQ,GAAG;AAAA,YACP,KAAK;AAED,oBAAMhC,KAAM,MAAM,MAAM;AACxB,oBAAMC,KAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,cAAAD,KAAI,MAAQ,MAAM,MAAM;AACxB,cAAAC,KAAI,MAAQ,MAAM,MAAM;AACxB,oBAAM,MAAM;AACZ,cAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACtC,cAAAA,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC;AAAA,YACJ,KAAK;AAED,oBAAMD,KAAM,MAAM,MAAM;AACxB,oBAAMC;AACN,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM;AACN,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM;AACN,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAMA;AACN,cAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,cAAAkB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACtC,cAAAA,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC;AAAA,YACJ,KAAK;AAED,oBAAMD,KAAM,MAAM,MAAM;AACxB,oBAAMC,KAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM;AACN,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM;AACN,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,cAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,cAAAkB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACtC,cAAAA,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC;AAAA,YACJ,KAAK;AAED,oBAAMD,KAAM,MAAM,MAAM;AACxB,oBAAMC,KAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,oBAAM,MAAM,MAAM,MAAM;AACxB,kBAAI,KAAK,IAAI,MAAMD,EAAC,IAAI,KAAK,IAAI,MAAMC,EAAC,GAAG;AACvC,gBAAAD,KAAI,MAAM,MAAM,MAAM;AAAA,cAC1B,OAAO;AACH,gBAAAC,KAAI,MAAM,MAAM,MAAM;AAAA,cAC1B;AAEA,cAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACtC,cAAAA,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC;AAAA,YACJ;AACI,sBAAQ,IAAI,WAAW,MAAM,QAAQ,4BAA+B,CAAC;AACrE,oBAAM,SAAS;AAAA,UACvB;AACA;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,KAAK,CAAC,WAAW;AAChC,YAAA6B,SAAQ,MAAM,MAAM,IAAI;AACxB,wBAAY;AAAA,UAChB;AAEA,cAAI,MAAM;AACN,YAAAZ,GAAE,UAAU;AACZ,mBAAO;AAAA,UACX;AAEA;AAAA,QACJ,KAAK;AACD,qBAAW;AACX;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AACD,qBAAW;AACX,eAAM,SAAS,KAAM;AACrB;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,KAAK,CAAC,WAAW;AAChC,YAAAY,SAAQ,MAAM,MAAM,IAAI;AACxB,wBAAY;AAAA,UAChB;AAEA,UAAA7B,MAAK,MAAM,IAAI;AACf,UAAAD,MAAK,MAAM,IAAI;AACf,qBAAWA,IAAGC,EAAC;AACf;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,KAAK,CAAC,WAAW;AAChC,YAAA6B,SAAQ,MAAM,MAAM,IAAI;AACxB,wBAAY;AAAA,UAChB;AAEA,UAAA9B,MAAK,MAAM,IAAI;AACf,qBAAWA,IAAGC,EAAC;AACf;AAAA,QACJ,KAAK;AACD,qBAAW;AACX;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAMD,KAAI,MAAM,MAAM;AACtB,kBAAMC,KAAI,MAAM,MAAM;AACtB,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAC,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA,UAAAD,MAAK,MAAM,MAAM;AACjB,UAAAC,MAAK,MAAM,MAAM;AACjB,UAAAiB,GAAE,OAAOlB,IAAGC,EAAC;AACb;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,YAAAD,MAAK,MAAM,MAAM;AACjB,YAAAC,MAAK,MAAM,MAAM;AACjB,YAAAiB,GAAE,OAAOlB,IAAGC,EAAC;AAAA,UACjB;AAEA,gBAAMD,KAAI,MAAM,MAAM;AACtB,gBAAMC,KAAI,MAAM,MAAM;AACtB,gBAAM,MAAM,MAAM,MAAM;AACxB,gBAAM,MAAM,MAAM,MAAM;AACxB,UAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,UAAAC,KAAI,MAAM,MAAM,MAAM;AACtB,UAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,GAAG;AAClB,YAAAD,MAAK,MAAM,MAAM;AAAA,UACrB;AAEA,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAMA;AACN,kBAAMC,KAAI,MAAM,MAAM;AACtB,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI;AACJ,YAAAC,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA;AAAA,QACJ,KAAK;AACD,cAAI,MAAM,SAAS,GAAG;AAClB,YAAAA,MAAK,MAAM,MAAM;AAAA,UACrB;AAEA,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAMD,KAAI,MAAM,MAAM;AACtB,kBAAMC;AACN,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAC,KAAI;AACJ,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA;AAAA,QACJ,KAAK;AACD,eAAK+B,MAAK,CAAC;AACX,UAAAN,MAAKM,MAAK,IAAI,CAAC;AACf,gBAAM,MAAO,MAAM,KAAON,OAAM,OAAQ,EAAE;AAC1C,eAAK;AACL;AAAA,QACJ,KAAK;AACD,sBAAY,MAAM,IAAI,IAAI,KAAK;AAC/B,qBAAW,KAAK,OAAO,SAAS;AAChC,cAAI,UAAU;AACV,YAAAK,OAAM,QAAQ;AAAA,UAClB;AAEA;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAM/B;AACN,kBAAMC,KAAI,MAAM,MAAM;AACtB,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAC,KAAI,OAAO,MAAM,WAAW,IAAI,MAAM,MAAM,IAAI;AAChD,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC,gBAAI,MAAM,WAAW,GAAG;AACpB;AAAA,YACJ;AAEA,kBAAMD,KAAI,MAAM,MAAM;AACtB,kBAAMC;AACN,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAA,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAD,KAAI,OAAO,MAAM,WAAW,IAAI,MAAM,MAAM,IAAI;AAChD,YAAAkB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA;AAAA,QACJ,KAAK;AACD,iBAAO,MAAM,SAAS,GAAG;AACrB,kBAAMD,KAAI,MAAM,MAAM;AACtB,kBAAMC;AACN,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAA,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAD,KAAI,OAAO,MAAM,WAAW,IAAI,MAAM,MAAM,IAAI;AAChD,YAAAkB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAClC,gBAAI,MAAM,WAAW,GAAG;AACpB;AAAA,YACJ;AAEA,kBAAMD;AACN,kBAAMC,KAAI,MAAM,MAAM;AACtB,kBAAM,MAAM,MAAM,MAAM;AACxB,kBAAM,MAAM,MAAM,MAAM;AACxB,YAAAD,KAAI,MAAM,MAAM,MAAM;AACtB,YAAAC,KAAI,OAAO,MAAM,WAAW,IAAI,MAAM,MAAM,IAAI;AAChD,YAAAiB,GAAE,QAAQ,KAAK,KAAK,KAAK,KAAKlB,IAAGC,EAAC;AAAA,UACtC;AAEA;AAAA,QACJ;AACI,cAAI,IAAI,IAAI;AACR,oBAAQ,IAAI,WAAW,MAAM,QAAQ,wBAAwB,CAAC;AAAA,UAClE,WAAW,IAAI,KAAK;AAChB,kBAAM,KAAK,IAAI,GAAG;AAAA,UACtB,WAAW,IAAI,KAAK;AAChB,iBAAK+B,MAAK,CAAC;AACX,iBAAK;AACL,kBAAM,MAAM,IAAI,OAAO,MAAM,KAAK,GAAG;AAAA,UACzC,WAAW,IAAI,KAAK;AAChB,iBAAKA,MAAK,CAAC;AACX,iBAAK;AACL,kBAAM,KAAK,EAAE,IAAI,OAAO,MAAM,KAAK,GAAG;AAAA,UAC1C,OAAO;AACH,iBAAKA,MAAK,CAAC;AACX,YAAAN,MAAKM,MAAK,IAAI,CAAC;AACf,iBAAKA,MAAK,IAAI,CAAC;AACf,YAAAL,MAAKK,MAAK,IAAI,CAAC;AACf,iBAAK;AACL,kBAAM,MAAO,MAAM,KAAON,OAAM,KAAO,MAAM,IAAKC,OAAM,KAAK;AAAA,UACjE;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AAEA,EAAAI,OAAM,IAAI;AAEV,QAAM,eAAeD;AACrB,SAAOZ;AACX;AAEA,SAAS,iBAAiBT,OAAM,OAAO,SAAS,cAAc;AAC1D,MAAI,WAAW,CAAC;AAChB,MAAI;AACJ,MAAI,SAAS,IAAI,MAAM,OAAOA,OAAM,KAAK;AACzC,MAAI,SAAS,OAAO,WAAW;AAC/B,MAAI,WAAW,GAAG;AAEd,aAAS,OAAO,GAAG,OAAO,SAAS,QAAQ;AACvC,gBAAU,OAAO,WAAW;AAC5B,UAAI,WAAW,cAAc;AACzB,cAAM,IAAI,MAAM,wDAAwD,UAAU,gBAAgB,eAAe,GAAG;AAAA,MACxH;AACA,eAAS,KAAK,OAAO;AAAA,IACzB;AAAA,EACJ,WAAW,WAAW,GAAG;AAErB,QAAI,UAAU,OAAO,YAAY;AACjC,QAAIpB,SAAQ,OAAO,YAAY;AAC/B,QAAIA,WAAU,GAAG;AACb,YAAM,IAAI,MAAM,oEAAoEA,MAAK;AAAA,IAC7F;AACA,QAAI;AACJ,aAAS,SAAS,GAAG,SAAS,SAAS,UAAU;AAC7C,gBAAU,OAAO,WAAW;AAC5B,aAAO,OAAO,YAAY;AAC1B,UAAI,WAAW,cAAc;AACzB,cAAM,IAAI,MAAM,wDAAwD,UAAU,gBAAgB,eAAe,GAAG;AAAA,MACxH;AACA,UAAI,OAAO,SAAS;AAChB,cAAM,IAAI,MAAM,4DAA4D,IAAI;AAAA,MACpF;AACA,aAAOA,SAAQ,MAAMA,UAAS;AAC1B,iBAAS,KAAK,OAAO;AAAA,MACzB;AACA,MAAAA,SAAQ;AAAA,IACZ;AACA,QAAI,SAAS,SAAS;AAClB,YAAM,IAAI,MAAM,kEAAkE,IAAI;AAAA,IAC1F;AAAA,EACJ,OAAO;AACH,UAAM,IAAI,MAAM,8DAA8D,MAAM;AAAA,EACxF;AACA,SAAO;AACX;AAGA,SAAS,cAAcoB,OAAM,OAAO,MAAM,KAAK;AAC3C,OAAK,OAAO,MAAM,CAAC;AACnB,MAAI,SAAS,eAAeA,OAAM,KAAK;AACvC,MAAI,YAAY,cAAcA,OAAM,OAAO,WAAW,MAAM,aAAa;AACzE,MAAI,eAAe,cAAcA,OAAM,UAAU,SAAS;AAC1D,MAAI,cAAc,cAAcA,OAAM,aAAa,WAAW,MAAM,aAAa;AACjF,MAAI,kBAAkB,cAAcA,OAAM,YAAY,SAAS;AAC/D,OAAK,SAAS,gBAAgB;AAC9B,OAAK,aAAa,sBAAsB,KAAK,MAAM;AAEnD,MAAI,eAAe,kBAAkBA,OAAM,OAAO,aAAa,SAAS,YAAY,OAAO;AAC3F,MAAI,aAAa,WAAW,GAAG;AAC3B,UAAM,IAAI,MAAM,mFAAqF,aAAa,MAAM;AAAA,EAC5H;AAEA,MAAI,UAAU,aAAa,CAAC;AAC5B,OAAK,OAAO,IAAI,UAAU;AAE1B,MAAI,QAAQ,cAAc;AACtB,SAAK,gBAAgB,QAAQ,aAAa;AAC1C,SAAK,gBAAgB,QAAQ,aAAa;AAAA,EAC9C;AAEA,MAAI,QAAQ,IAAI,CAAC,MAAM,UAAa,QAAQ,IAAI,CAAC,MAAM,QAAW;AAC9D,SAAK,YAAY;AAAA,EACrB;AAEA,MAAI,KAAK,WAAW;AAChB,QAAI,gBAAgB,QAAQ;AAC5B,QAAI,iBAAiB,QAAQ;AAC7B,QAAI,kBAAkB,KAAK,mBAAmB,GAAG;AAC7C,YAAM,IAAI,MAAM,kFAAkF;AAAA,IACtG;AACA,qBAAiB;AACjB,QAAI,eAAe,cAAcA,OAAM,aAAa;AACpD,QAAI,UAAU,kBAAkBA,OAAM,OAAO,aAAa,SAAS,YAAY,OAAO;AACtF,YAAQ,WAAW;AACnB,sBAAkB;AAClB,YAAQ,YAAY,iBAAiBA,OAAM,gBAAgB,KAAK,WAAW,QAAQ,MAAM;AAAA,EAC7F;AAEA,MAAI,oBAAoB,QAAQ,QAAQ,QAAQ,CAAC;AACjD,MAAI,cAAc,oBAAoBA,OAAM,mBAAmB,QAAQ,QAAQ,CAAC,GAAG,YAAY,OAAO;AACtG,OAAK,gBAAgB,YAAY;AACjC,OAAK,gBAAgB,YAAY;AAEjC,MAAI,YAAY,UAAU,GAAG;AACzB,QAAI,aAAa,oBAAoB,YAAY;AACjD,QAAI,YAAY,cAAcA,OAAM,UAAU;AAC9C,SAAK,QAAQ,UAAU;AACvB,SAAK,YAAY,sBAAsB,KAAK,KAAK;AAAA,EACrD,OAAO;AACH,SAAK,QAAQ,CAAC;AACd,SAAK,YAAY;AAAA,EACrB;AAGA,MAAI;AACJ,MAAI,IAAI,WAAW;AACf,uBAAmB,uBAAuBA,OAAM,QAAQ,QAAQ,WAAW;AAC3E,SAAK,UAAU,iBAAiB,QAAQ;AAAA,EAC5C,OAAO;AACH,uBAAmB,cAAcA,OAAM,QAAQ,QAAQ,WAAW;AAClE,SAAK,UAAU,iBAAiB,QAAQ;AAAA,EAC5C;AAEA,MAAI,UAAU,gBAAgBA,OAAM,QAAQ,QAAQ,SAAS,KAAK,SAAS,YAAY,OAAO;AAC9F,MAAI,QAAQ,aAAa,GAAG;AAExB,SAAK,cAAc,IAAI,YAAY,qBAAqB,OAAO;AAAA,EACnE,WAAW,QAAQ,aAAa,GAAG;AAE/B,SAAK,cAAc,IAAI,YAAY,mBAAmB,OAAO;AAAA,EACjE,OAAO;AACH,SAAK,cAAc,iBAAiBA,OAAM,QAAQ,QAAQ,UAAU,OAAO;AAAA,EAC/E;AAGA,OAAK,WAAW,KAAK,YAAY,KAAK;AAEtC,OAAK,SAAS,IAAI,SAAS,SAAS,IAAI;AACxC,MAAI,IAAI,WAAW;AACf,SAAK,QAAQ,SAASF,IAAG;AACrB,UAAI0B,cAAa,kBAAkB1B,IAAG,iBAAiB,SAASE,OAAM,QAAQ,QAAQ,WAAW;AACjG,WAAK,OAAO,KAAKF,IAAG,SAAS,eAAe,MAAMA,IAAG,oBAAoB0B,WAAU,CAAC;AAAA,IACxF;AAAA,EACJ,OAAO;AACH,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK,GAAG;AACtC,UAAI,aAAa,iBAAiB,QAAQ,CAAC;AAC3C,WAAK,OAAO,KAAK,GAAG,SAAS,eAAe,MAAM,GAAG,oBAAoB,UAAU,CAAC;AAAA,IACxF;AAAA,EACJ;AACJ;AAIA,SAAS,aAAa,GAAG,SAAS;AAC9B,MAAI;AAGJ,MAAI,IAAI,mBAAmB,QAAQ,CAAC;AACpC,MAAI,KAAK,GAAG;AACR,UAAM;AAAA,EACV;AAGA,MAAI,QAAQ,QAAQ,CAAC;AACrB,MAAI,KAAK,GAAG;AACR,UAAM,IAAI,mBAAmB;AAAA,EACjC,OAAO;AACH,UAAM,mBAAmB,SAAS,QAAQ;AAC1C,YAAQ,KAAK,CAAC;AAAA,EAClB;AAEA,SAAO;AACX;AAEA,SAAS,aAAa;AAClB,SAAO,IAAI,MAAM,OAAO,UAAU;AAAA,IAC9B,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IACzC,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,EAC3C,CAAC;AACL;AAEA,SAAS,cAAc,WAAW;AAC9B,MAAIxC,KAAI,IAAI,MAAM,OAAO,cAAc;AAAA,IACnC,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,CAAC,EAAC;AAAA,EAC5C,CAAC;AACD,EAAAA,GAAE,QAAQ,CAAC;AACX,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,IAAAA,GAAE,MAAM,KAAK,EAAC,MAAM,UAAU,GAAG,MAAM,QAAQ,OAAO,UAAU,CAAC,EAAC,CAAC;AAAA,EACvE;AAEA,SAAOA;AACX;AAGA,SAAS,SAASoC,OAAM,OAAO,SAAS;AACpC,MAAI,IAAI,CAAC;AACT,WAAS,IAAI,GAAG,IAAIA,MAAK,QAAQ,KAAK,GAAG;AACrC,QAAI,QAAQA,MAAK,CAAC;AAClB,QAAIrB,SAAQ,MAAM,MAAM,IAAI;AAC5B,QAAIA,WAAU,UAAa,CAAC,OAAOA,QAAO,MAAM,KAAK,GAAG;AACpD,UAAI,MAAM,SAAS,OAAO;AACtB,QAAAA,SAAQ,aAAaA,QAAO,OAAO;AAAA,MACvC;AAEA,QAAE,MAAM,EAAE,IAAI,EAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOA,OAAK;AAAA,IACnE;AAAA,EACJ;AAEA,SAAO;AACX;AAGA,SAAS,YAAY,OAAO,SAAS;AACjC,MAAIf,KAAI,IAAI,MAAM,OAAO,YAAY;AAAA,IACjC,EAAC,MAAM,QAAQ,MAAM,QAAQ,OAAO,CAAC,EAAC;AAAA,EAC1C,CAAC;AACD,EAAAA,GAAE,OAAO,SAAS,eAAe,OAAO,OAAO;AAC/C,SAAOA;AACX;AAEA,SAAS,iBAAiB,SAAS;AAC/B,MAAIA,KAAI,IAAI,MAAM,OAAO,kBAAkB;AAAA,IACvC,EAAC,MAAM,YAAY,MAAM,SAAS,OAAO,CAAC,EAAC;AAAA,EAC/C,CAAC;AACD,EAAAA,GAAE,WAAW,CAAC,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,QAAO,CAAC;AAChE,SAAOA;AACX;AAEA,SAAS,gBAAgB,SAAS;AAC9B,MAAIA,KAAI,IAAI,MAAM,OAAO,gBAAgB;AAAA,IACrC,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,CAAC,EAAC;AAAA,EAC9C,CAAC;AACD,EAAAA,GAAE,UAAU,CAAC;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;AACxC,IAAAA,GAAE,QAAQ,KAAK,EAAC,MAAM,YAAY,GAAG,MAAM,UAAU,OAAO,QAAQ,CAAC,EAAC,CAAC;AAAA,EAC3E;AAEA,SAAOA;AACX;AAEA,SAAS,sBAAsB;AAE3B,SAAO,IAAI,MAAM,OAAO,qBAAqB;AAAA,IACzC,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,CAAC,EAAC;AAAA,EAC5C,CAAC;AACL;AAEA,SAAS,aAAa,YAAY,SAAS;AACvC,MAAIA,KAAI,IAAI,MAAM,OAAO,YAAY;AAAA,IACjC,EAAC,MAAM,UAAU,MAAM,SAAS,OAAO,EAAC;AAAA,EAC5C,CAAC;AACD,WAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK,GAAG;AAC3C,QAAI,YAAY,WAAW,CAAC;AAC5B,QAAI,WAAW,aAAa,WAAW,OAAO;AAC9C,IAAAA,GAAE,OAAO,KAAK,EAAC,MAAM,WAAW,GAAG,MAAM,OAAO,OAAO,SAAQ,CAAC;AAAA,EACpE;AAEA,SAAOA;AACX;AAEA,SAAS,WAAW,OAAO;AACvB,MAAI,MAAM,CAAC;AACX,MAAI,OAAO,MAAM;AACjB,MAAI,KAAK,EAAC,MAAM,SAAS,MAAM,UAAU,OAAO,MAAM,aAAY,CAAC;AACnE,MAAIO,KAAI;AACR,MAAIC,KAAI;AACR,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK,GAAG;AAC9C,QAAI,KAAM;AACV,QAAI,KAAM;AACV,QAAI,MAAM,KAAK,SAAS,CAAC;AACzB,QAAI,IAAI,SAAS,KAAK;AAElB,UAAI,MAAM,IAAI;AACd,UAAI,MAAM,IAAI;AAId,YAAM;AAAA,QACF,MAAM;AAAA,QACN,GAAG,IAAI;AAAA,QACP,GAAG,IAAI;AAAA,QACP,IAAI,KAAK,MAAM,MAAMD,KAAI,MAAM,IAAI,EAAE;AAAA,QACrC,IAAI,KAAK,MAAM,MAAMC,KAAI,MAAM,IAAI,EAAE;AAAA,QACrC,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE;AAAA,QACzC,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE;AAAA,MAC7C;AAAA,IACJ;AAEA,QAAI,IAAI,SAAS,KAAK;AAClB,WAAK,KAAK,MAAM,IAAI,IAAID,EAAC;AACzB,WAAK,KAAK,MAAM,IAAI,IAAIC,EAAC;AACzB,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,WAAW,MAAM,MAAM,OAAO,GAAE,CAAC;AACjD,MAAAD,KAAI,KAAK,MAAM,IAAI,CAAC;AACpB,MAAAC,KAAI,KAAK,MAAM,IAAI,CAAC;AAAA,IACxB,WAAW,IAAI,SAAS,KAAK;AACzB,WAAK,KAAK,MAAM,IAAI,IAAID,EAAC;AACzB,WAAK,KAAK,MAAM,IAAI,IAAIC,EAAC;AACzB,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,WAAW,MAAM,MAAM,OAAO,EAAC,CAAC;AAChD,MAAAD,KAAI,KAAK,MAAM,IAAI,CAAC;AACpB,MAAAC,KAAI,KAAK,MAAM,IAAI,CAAC;AAAA,IACxB,WAAW,IAAI,SAAS,KAAK;AACzB,UAAI,MAAM,KAAK,MAAM,IAAI,KAAKD,EAAC;AAC/B,UAAI,MAAM,KAAK,MAAM,IAAI,KAAKC,EAAC;AAC/B,UAAI,MAAM,KAAK,MAAM,IAAI,KAAK,IAAI,EAAE;AACpC,UAAI,MAAM,KAAK,MAAM,IAAI,KAAK,IAAI,EAAE;AACpC,WAAK,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AAC9B,WAAK,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AAC9B,UAAI,KAAK,EAAC,MAAM,OAAO,MAAM,UAAU,OAAO,IAAG,CAAC;AAClD,UAAI,KAAK,EAAC,MAAM,OAAO,MAAM,UAAU,OAAO,IAAG,CAAC;AAClD,UAAI,KAAK,EAAC,MAAM,OAAO,MAAM,UAAU,OAAO,IAAG,CAAC;AAClD,UAAI,KAAK,EAAC,MAAM,OAAO,MAAM,UAAU,OAAO,IAAG,CAAC;AAClD,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,MAAM,MAAM,UAAU,OAAO,GAAE,CAAC;AAChD,UAAI,KAAK,EAAC,MAAM,aAAa,MAAM,MAAM,OAAO,EAAC,CAAC;AAClD,MAAAD,KAAI,KAAK,MAAM,IAAI,CAAC;AACpB,MAAAC,KAAI,KAAK,MAAM,IAAI,CAAC;AAAA,IACxB;AAAA,EAGJ;AAEA,MAAI,KAAK,EAAC,MAAM,WAAW,MAAM,MAAM,OAAO,GAAE,CAAC;AACjD,SAAO;AACX;AAEA,SAAS,qBAAqB,QAAQ;AAClC,MAAIR,KAAI,IAAI,MAAM,OAAO,qBAAqB;AAAA,IAC1C,EAAC,MAAM,eAAe,MAAM,SAAS,OAAO,CAAC,EAAC;AAAA,EAClD,CAAC;AAED,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACvC,QAAI,QAAQ,OAAO,IAAI,CAAC;AACxB,QAAI,MAAM,WAAW,KAAK;AAC1B,IAAAA,GAAE,YAAY,KAAK,EAAC,MAAM,MAAM,MAAM,MAAM,cAAc,OAAO,IAAG,CAAC;AAAA,EACzE;AAEA,SAAOA;AACX;AAEA,SAAS,gBAAgB,OAAO,SAAS;AACrC,MAAIA,KAAI,IAAI,MAAM,OAAO,gBAAgB;AAAA,IACrC,EAAC,MAAM,QAAQ,MAAM,QAAQ,OAAO,CAAC,EAAC;AAAA,EAC1C,CAAC;AACD,EAAAA,GAAE,OAAO,SAAS,mBAAmB,OAAO,OAAO;AACnD,SAAOA;AACX;AAEA,SAAS,aAAa,QAAQ,SAAS;AACnC,MAAIA,KAAI,IAAI,MAAM,MAAM,QAAQ;AAAA,IAC5B,EAAC,MAAM,UAAU,MAAM,SAAQ;AAAA,IAC/B,EAAC,MAAM,aAAa,MAAM,SAAQ;AAAA,IAClC,EAAC,MAAM,gBAAgB,MAAM,SAAQ;AAAA,IACrC,EAAC,MAAM,eAAe,MAAM,SAAQ;AAAA,IACpC,EAAC,MAAM,mBAAmB,MAAM,SAAQ;AAAA,IACxC,EAAC,MAAM,YAAY,MAAM,SAAQ;AAAA,IACjC,EAAC,MAAM,oBAAoB,MAAM,SAAQ;AAAA,IACzC,EAAC,MAAM,eAAe,MAAM,SAAQ;AAAA,EACxC,CAAC;AAED,MAAI,YAAY,IAAI,QAAQ;AAI5B,MAAI,QAAQ;AAAA,IACR,SAAS,QAAQ;AAAA,IACjB,UAAU,QAAQ;AAAA,IAClB,YAAY,QAAQ;AAAA,IACpB,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACzC,YAAY,CAAC,WAAW,GAAG,GAAG,WAAW,GAAG,CAAC;AAAA,IAC7C,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS,CAAC,GAAG,GAAG;AAAA,EACpB;AAEA,MAAI,eAAe,CAAC;AAEpB,MAAI,aAAa,CAAC;AAClB,MAAI;AAGJ,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACvC,YAAQ,OAAO,IAAI,CAAC;AACpB,eAAW,KAAK,MAAM,IAAI;AAAA,EAC9B;AAEA,MAAI,UAAU,CAAC;AAEf,EAAAA,GAAE,SAAS,WAAW;AACtB,EAAAA,GAAE,YAAY,cAAc,CAAC,QAAQ,cAAc,CAAC;AACpD,MAAI,UAAU,YAAY,OAAO,OAAO;AACxC,EAAAA,GAAE,eAAe,iBAAiB,OAAO;AACzC,EAAAA,GAAE,kBAAkB,oBAAoB;AACxC,EAAAA,GAAE,WAAW,aAAa,YAAY,OAAO;AAC7C,EAAAA,GAAE,mBAAmB,qBAAqB,MAAM;AAChD,EAAAA,GAAE,cAAc,gBAAgB,cAAc,OAAO;AAGrD,EAAAA,GAAE,cAAc,gBAAgB,OAAO;AAEvC,MAAI,cAAcA,GAAE,OAAO,OAAO,IAC9BA,GAAE,UAAU,OAAO,IACnBA,GAAE,aAAa,OAAO,IACtBA,GAAE,YAAY,OAAO,IACrBA,GAAE,gBAAgB,OAAO;AAC7B,QAAM,UAAU;AAGhB,QAAM,WAAW;AACjB,QAAM,cAAc,MAAM,UAAUA,GAAE,SAAS,OAAO;AACtD,QAAM,QAAQ,CAAC,IAAI,MAAM,cAAcA,GAAE,iBAAiB,OAAO;AAGjE,YAAU,YAAY,OAAO,OAAO;AACpC,EAAAA,GAAE,eAAe,iBAAiB,OAAO;AAEzC,SAAOA;AACX;AAEA,IAAI,MAAM,EAAE,OAAO,eAAe,MAAM,aAAa;AAKrD,SAAS,eAAegB,OAAM,OAAO;AACjC,MAAIyB,QAAO,CAAC;AACZ,MAAIhB,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,EAAAyB,MAAK,UAAUhB,GAAE,aAAa;AAC9B,EAAAgB,MAAK,eAAe,KAAK,MAAMhB,GAAE,WAAW,IAAI,GAAI,IAAI;AACxD,EAAAgB,MAAK,qBAAqBhB,GAAE,WAAW;AACvC,EAAAgB,MAAK,cAAchB,GAAE,WAAW;AAChC,QAAM,SAASgB,MAAK,gBAAgB,YAAY,qCAAqC;AACrF,EAAAA,MAAK,QAAQhB,GAAE,YAAY;AAC3B,EAAAgB,MAAK,aAAahB,GAAE,YAAY;AAChC,EAAAgB,MAAK,UAAUhB,GAAE,kBAAkB;AACnC,EAAAgB,MAAK,WAAWhB,GAAE,kBAAkB;AACpC,EAAAgB,MAAK,OAAOhB,GAAE,WAAW;AACzB,EAAAgB,MAAK,OAAOhB,GAAE,WAAW;AACzB,EAAAgB,MAAK,OAAOhB,GAAE,WAAW;AACzB,EAAAgB,MAAK,OAAOhB,GAAE,WAAW;AACzB,EAAAgB,MAAK,WAAWhB,GAAE,YAAY;AAC9B,EAAAgB,MAAK,gBAAgBhB,GAAE,YAAY;AACnC,EAAAgB,MAAK,oBAAoBhB,GAAE,WAAW;AACtC,EAAAgB,MAAK,mBAAmBhB,GAAE,WAAW;AACrC,EAAAgB,MAAK,kBAAkBhB,GAAE,WAAW;AACpC,SAAOgB;AACX;AAEA,SAAS,cAAc,SAAS;AAE5B,MAAI,YAAY,KAAK,OAAM,oBAAI,KAAK,GAAE,QAAQ,IAAI,GAAI,IAAI;AAC1D,MAAI,mBAAmB;AAEvB,MAAI,QAAQ,kBAAkB;AAC1B,uBAAmB,QAAQ,mBAAmB;AAAA,EAClD;AAEA,SAAO,IAAI,MAAM,MAAM,QAAQ;AAAA,IAC3B,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,MAAU;AAAA,IAClD,EAAC,MAAM,gBAAgB,MAAM,SAAS,OAAO,MAAU;AAAA,IACvD,EAAC,MAAM,sBAAsB,MAAM,SAAS,OAAO,EAAC;AAAA,IACpD,EAAC,MAAM,eAAe,MAAM,SAAS,OAAO,WAAU;AAAA,IACtD,EAAC,MAAM,SAAS,MAAM,UAAU,OAAO,EAAC;AAAA,IACxC,EAAC,MAAM,cAAc,MAAM,UAAU,OAAO,IAAI;AAAA,IAChD,EAAC,MAAM,WAAW,MAAM,gBAAgB,OAAO,iBAAgB;AAAA,IAC/D,EAAC,MAAM,YAAY,MAAM,gBAAgB,OAAO,UAAS;AAAA,IACzD,EAAC,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACtC,EAAC,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACtC,EAAC,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACtC,EAAC,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACtC,EAAC,MAAM,YAAY,MAAM,UAAU,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,iBAAiB,MAAM,UAAU,OAAO,EAAC;AAAA,IAChD,EAAC,MAAM,qBAAqB,MAAM,SAAS,OAAO,EAAC;AAAA,IACnD,EAAC,MAAM,oBAAoB,MAAM,SAAS,OAAO,EAAC;AAAA,IAClD,EAAC,MAAM,mBAAmB,MAAM,SAAS,OAAO,EAAC;AAAA,EACrD,GAAG,OAAO;AACd;AAEA,IAAI,OAAO,EAAE,OAAO,gBAAgB,MAAM,cAAc;AAKxD,SAAS,eAAezB,OAAM,OAAO;AACjC,MAAI0B,QAAO,CAAC;AACZ,MAAIjB,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,EAAA0B,MAAK,UAAUjB,GAAE,aAAa;AAC9B,EAAAiB,MAAK,WAAWjB,GAAE,WAAW;AAC7B,EAAAiB,MAAK,YAAYjB,GAAE,WAAW;AAC9B,EAAAiB,MAAK,UAAUjB,GAAE,WAAW;AAC5B,EAAAiB,MAAK,kBAAkBjB,GAAE,YAAY;AACrC,EAAAiB,MAAK,qBAAqBjB,GAAE,WAAW;AACvC,EAAAiB,MAAK,sBAAsBjB,GAAE,WAAW;AACxC,EAAAiB,MAAK,aAAajB,GAAE,WAAW;AAC/B,EAAAiB,MAAK,iBAAiBjB,GAAE,WAAW;AACnC,EAAAiB,MAAK,gBAAgBjB,GAAE,WAAW;AAClC,EAAAiB,MAAK,cAAcjB,GAAE,WAAW;AAChC,EAAAA,GAAE,kBAAkB;AACpB,EAAAiB,MAAK,mBAAmBjB,GAAE,WAAW;AACrC,EAAAiB,MAAK,mBAAmBjB,GAAE,YAAY;AACtC,SAAOiB;AACX;AAEA,SAAS,cAAc,SAAS;AAC5B,SAAO,IAAI,MAAM,MAAM,QAAQ;AAAA,IAC3B,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,MAAU;AAAA,IAClD,EAAC,MAAM,YAAY,MAAM,SAAS,OAAO,EAAC;AAAA,IAC1C,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IACzC,EAAC,MAAM,mBAAmB,MAAM,UAAU,OAAO,EAAC;AAAA,IAClD,EAAC,MAAM,sBAAsB,MAAM,SAAS,OAAO,EAAC;AAAA,IACpD,EAAC,MAAM,uBAAuB,MAAM,SAAS,OAAO,EAAC;AAAA,IACrD,EAAC,MAAM,cAAc,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAC,MAAM,kBAAkB,MAAM,SAAS,OAAO,EAAC;AAAA,IAChD,EAAC,MAAM,iBAAiB,MAAM,SAAS,OAAO,EAAC;AAAA,IAC/C,EAAC,MAAM,eAAe,MAAM,SAAS,OAAO,EAAC;AAAA,IAC7C,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAC,MAAM,oBAAoB,MAAM,SAAS,OAAO,EAAC;AAAA,IAClD,EAAC,MAAM,oBAAoB,MAAM,UAAU,OAAO,EAAC;AAAA,EACvD,GAAG,OAAO;AACd;AAEA,IAAI,OAAO,EAAE,OAAO,gBAAgB,MAAM,cAAc;AAIxD,SAAS,kBAAkB1B,OAAM,OAAO,YAAY,WAAW,QAAQ;AACnE,MAAI;AACJ,MAAI;AACJ,MAAIS,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;AAEnC,QAAI,IAAI,YAAY;AAChB,qBAAeS,GAAE,YAAY;AAC7B,wBAAkBA,GAAE,WAAW;AAAA,IACnC;AAEA,QAAI,QAAQ,OAAO,IAAI,CAAC;AACxB,UAAM,eAAe;AACrB,UAAM,kBAAkB;AAAA,EAC5B;AACJ;AAEA,SAAS,0BAA0B,MAAMT,OAAM,OAAO,YAAY,WAAW;AACzE,OAAK,iBAAiB,CAAC;AAEvB,MAAI;AACJ,MAAI;AACJ,MAAIS,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;AAEnC,QAAI,IAAI,YAAY;AAChB,qBAAeS,GAAE,YAAY;AAC7B,wBAAkBA,GAAE,WAAW;AAAA,IACnC;AAEA,SAAK,eAAe,CAAC,IAAI;AAAA,MACrB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAIA,SAAS,eAAe,MAAMT,OAAM,OAAO,YAAY,WAAW,QAAQ,KAAK;AAC3E,MAAI,IAAI,WACJ;AAAE,8BAA0B,MAAMA,OAAM,OAAO,YAAY,SAAS;AAAA,EAAG,OAEvE;AAAE,sBAAkBA,OAAM,OAAO,YAAY,WAAW,MAAM;AAAA,EAAG;AACzE;AAEA,SAAS,cAAc,QAAQ;AAC3B,MAAIhB,KAAI,IAAI,MAAM,MAAM,QAAQ,CAAC,CAAC;AAClC,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACvC,QAAI,QAAQ,OAAO,IAAI,CAAC;AACxB,QAAI,eAAe,MAAM,gBAAgB;AACzC,QAAI,kBAAkB,MAAM,mBAAmB;AAC/C,IAAAA,GAAE,OAAO,KAAK,EAAC,MAAM,kBAAkB,GAAG,MAAM,UAAU,OAAO,aAAY,CAAC;AAC9E,IAAAA,GAAE,OAAO,KAAK,EAAC,MAAM,qBAAqB,GAAG,MAAM,SAAS,OAAO,gBAAe,CAAC;AAAA,EACvF;AAEA,SAAOA;AACX;AAEA,IAAI,OAAO,EAAE,OAAO,gBAAgB,MAAM,cAAc;AAIxD,SAAS,cAAc,MAAM;AACzB,MAAI,SAAS,IAAI,MAAM,MAAM,QAAQ;AAAA,IACjC,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IACzC,EAAC,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,KAAK,OAAM;AAAA,EACvD,CAAC;AAED,MAAI,aAAa;AACjB,MAAI,mBAAmB,KAAK,KAAK,SAAS;AAC1C,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AAClC,QAAI,MAAM,WAAW,QAAQ,KAAK,CAAC,CAAC;AACpC,QAAI,MAAM,GAAG;AACT,YAAM,WAAW;AACjB,oBAAc,KAAK,CAAC;AAAA,IACxB;AAEA,WAAO,OAAO,KAAK,EAAC,MAAM,YAAY,GAAG,MAAM,UAAU,OAAO,mBAAmB,IAAG,CAAC;AACvF,WAAO,OAAO,KAAK,EAAC,MAAM,YAAY,GAAG,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,OAAM,CAAC;AAAA,EACnF;AAEA,SAAO,OAAO,KAAK,EAAC,MAAM,cAAc,MAAM,aAAa,OAAO,WAAU,CAAC;AAC7E,SAAO;AACX;AAEA,SAAS,eAAegB,OAAM,OAAO;AACjC,MAAIS,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,MAAI,eAAeS,GAAE,WAAW;AAChC,QAAM,SAAS,iBAAiB,GAAG,iCAAiC;AAEpE,EAAAA,GAAE,KAAK,SAAS,CAAC;AACjB,MAAI,UAAUA,GAAE,WAAW;AAE3B,MAAI,OAAO,CAAC;AACZ,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAC9B,QAAI,MAAM;AACV,QAAI,SAAS,QAAQA,GAAE,YAAY;AACnC,QAAItB,UAASsB,GAAE,YAAY;AAC3B,aAAS,IAAI,QAAQ,IAAI,SAAStB,SAAQ,EAAE,GAAG;AAC3C,aAAO,OAAO,aAAaa,MAAK,QAAQ,CAAC,CAAC;AAAA,IAC9C;AAEA,SAAK,KAAK,GAAG;AAAA,EACjB;AAEA,SAAO;AACX;AAEA,IAAI,OAAO,EAAE,MAAM,eAAe,OAAO,eAAe;AAKxD,SAAS,eAAeA,OAAM,OAAO;AACjC,MAAI2B,QAAO,CAAC;AACZ,MAAIlB,KAAI,IAAI,MAAM,OAAOT,OAAM,KAAK;AACpC,EAAA2B,MAAK,UAAUlB,GAAE,aAAa;AAC9B,EAAAkB,MAAK,YAAYlB,GAAE,YAAY;AAC/B,MAAIkB,MAAK,YAAY,GAAK;AACtB,IAAAA,MAAK,YAAYlB,GAAE,YAAY;AAC/B,IAAAkB,MAAK,cAAclB,GAAE,YAAY;AACjC,IAAAkB,MAAK,qBAAqBlB,GAAE,YAAY;AACxC,IAAAkB,MAAK,uBAAuBlB,GAAE,YAAY;AAC1C,IAAAkB,MAAK,WAAWlB,GAAE,YAAY;AAC9B,IAAAkB,MAAK,oBAAoBlB,GAAE,YAAY;AACvC,IAAAkB,MAAK,aAAalB,GAAE,YAAY;AAChC,IAAAkB,MAAK,kBAAkBlB,GAAE,YAAY;AACrC,IAAAkB,MAAK,qBAAqBlB,GAAE,YAAY;AACxC,IAAAkB,MAAK,mBAAmBlB,GAAE,YAAY;AACtC,IAAAkB,MAAK,wBAAwBlB,GAAE,YAAY;AAC3C,IAAAkB,MAAK,uBAAuBlB,GAAE,YAAY;AAC1C,IAAAkB,MAAK,oBAAoBlB,GAAE,YAAY;AAAA,EAC3C;AAEA,SAAOkB;AACX;AAEA,SAAS,cAAc,WAAW;AAC9B,SAAO,IAAI,MAAM,MAAM,QAAQ;AAAA,IAC3B,EAAC,MAAM,WAAW,MAAM,SAAS,OAAO,MAAU;AAAA,IAClD,EAAC,MAAM,aAAa,MAAM,UAAU,OAAO,UAAS;AAAA,EACxD,CAAC;AACL;AAEA,IAAI,OAAO,EAAE,OAAO,gBAAgB,MAAM,cAAc;AAKxD,IAAI,iBAAiB;AAAA,EACjB;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;AACJ;AAEA,IAAI,eAAe;AAAA,EACf,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,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,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;AAAA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AAO,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,KA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CvC,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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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,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AG;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;AAA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AAE,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,GA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O;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,EAAK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AAG;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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AAG;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;AAAA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;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;AA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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;AAA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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;AAyP3B;;;ACrRA,IAAM,cAAc;AAAA,EAEnB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,eAAe,EAAE,OAAO,KAAK;AAAA,IAC7B,gBAAgB,EAAE,OAAO,KAAK;AAAA,IAC9B,kBAAkB,EAAE,OAAO,KAAK;AAAA,IAChC,cAAc,EAAE,OAAO,OAAQ;AAAA,EAEhC;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;AAuD3B;;;AC3EA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,EAC5C;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;AA6D3B;;;ACxFA,IAAM,wBAAwB;AAAA,EAE7B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,EAE3B;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;AAc3B;;;ACjBA,IAAM,yBAAyB;AAAA,EAE9B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,QAAQ;AAAA,MACP,OAAO;AAAA,IACR;AAAA,EAED;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;AAY3B;AAkBA,IAAM,wBAAwB;AAAA,EAE7B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,QAAQ;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IACA,WAAW;AAAA,MACV,OAAO;AAAA,IACR;AAAA,IACA,yBAAyB;AAAA,MACxB,OAAO,IAAI,QAAQ;AAAA,IACpB;AAAA,EAED;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;AAsF3B;AAOA,IAAM,uBAAuB;AAAA,EAE5B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,SAAS;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IAEA,UAAU;AAAA,MACT,OAAO;AAAA,IACR;AAAA,IAEA,kBAAkB;AAAA,MACjB,OAAO;AAAA,IACR;AAAA,EAED;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;AAoB3B;AAQA,IAAM,uBAAuB;AAAA,EAE5B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,yBAAyB;AAAA,MACxB,OAAO,IAAI,QAAQ;AAAA,IACpB;AAAA,IAEA,SAAS;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IAEA,UAAU;AAAA,MACT,OAAO,IAAI,MAAO,QAAS;AAAA,IAC5B;AAAA,IAEA,SAAS;AAAA,MACR,OAAO,IAAI,MAAO,CAAS;AAAA,IAC5B;AAAA,EAED;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;AA0B3B;;;ACrTA,IAAM,uBAAuB;AAAA,EAE5B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,KAAK,EAAE,OAAO,IAAM,IAAM;AAAA,EAE3B;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;AAyB3B;;;AC/CA,IAAM,4BAA4B;AAAA,EAEjC,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,KAAK,EAAE,OAAO,IAAM,IAAM;AAAA,IAC1B,KAAK,EAAE,OAAO,KAAK;AAAA,EAEpB;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;AA4B3B;;;ACrDA,IAAM,sBAAsB;AAAA,EAE3B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,OAAO,EAAE,OAAO,EAAE;AAAA,IAClB,cAAc,EAAE,OAAO,EAAE;AAAA,EAE1B;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;AAiC3B;;;ACtDA,IAAM,gBAAgB;AAAA,EAErB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,SAAS,EAAE,OAAO,EAAI;AAAA,IACtB,SAAS,EAAE,OAAO,EAAI;AAAA,EAEvB;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;AAsB3B;;;AClDA,IAAM,mBAAmB;AAAA,EAExB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,EAE3B;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;AAkB3B;;;ACtCA,IAAM,eAAe;AAAA,EAEpB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,QAAQ,EAAE,OAAO,EAAE;AAAA,EAEpB;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;AAwB3B;;;AC5CA,IAAM,kBAAkB;AAAA,EAEvB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,aAAa,EAAE,OAAO,KAAK;AAAA,IAC3B,cAAc,EAAE,OAAO,IAAI,QAAS,KAAK,GAAI,EAAE;AAAA,IAC/C,SAAS,EAAE,OAAO,IAAI,QAAS,GAAG,CAAE,EAAE;AAAA,IACtC,UAAU,EAAE,OAAO,KAAK;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;AAmB3B;;;AC1CA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,KAAM;AAAA,IACzB,SAAS,EAAE,OAAO,EAAI;AAAA,EAEvB;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;;;AC7CA,IAAM,cAAc;AAAA,EAEnB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,EAAI;AAAA,EAExB;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;AAqB3B;;;ACtCA,IAAM,sBAAsB;AAAA,EAE3B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,cAAc,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,EAEtC;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;AAuD3B;;;AC1EA,SAAS,WAAY,QAAQI,OAAM,SAAU;AAE5C,SAAO,OAAO,MAAOA,KAAK,EAAE,KAAM,OAAQ;AAE3C;AAEA,IAAM,sBAAsB,YAAa,gBAAiB,EAAE,MAAO,GAAG,YAAa,gBAAiB,EAAE,QAAS,eAAgB,CAAE;AACjI,IAAM,sBAAsB,YAAa,gBAAiB,EAAE,MAAO,YAAa,gBAAiB,EAAE,QAAS,eAAgB,CAAE;AAE9H,IAAM,6BAA6B;AAAA,EAElC,MAAM;AAAA,EAEN,UAAU,cAAc,MAAO;AAAA,IAC9B,UAAW,OAAQ,EAAE;AAAA,IACrB;AAAA,MACC,gBAAgB,EAAE,OAAO,KAAK;AAAA,MAC9B,kBAAkB,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,MACjD,uBAAuB,EAAE,OAAO,IAAI;AAAA,MACpC,oBAAoB,EAAE,OAAO,EAAI;AAAA,MACjC,wBAAwB,EAAE,OAAO,IAAI;AAAA,MACrC,kBAAkB,EAAE,OAAO,EAAI;AAAA,MAC/B,kBAAkB,EAAE,OAAO,GAAK;AAAA,IACjC;AAAA,EAED,CAAE;AAAA,EAEF,cAAc;AAAA,IACb;AAAA,IACA,YAAa,gBAAiB;AAAA,EAC/B,EAAE,KAAM,IAAK;AAAA,EAEb,gBAAgB;AAAA,IACf;AAAA,IACA;AAAA,IAEA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAEA,oBAAoB;AAAA,MAAS;AAAA,MAE5B;AAAA,QACC,YAAa,uBAAwB;AAAA,QACrC;AAAA,QACA;AAAA,UACC;AAAA,UAEA;AAAA,UACA;AAAA,UACA;AAAA,QACD,EAAE,KAAM,IAAK;AAAA,MACd;AAAA,IAED;AAAA,EAED,EAAE,KAAM,IAAK;AAEd;;;AChFA,IAAM,oBAAoB;AAAA,EAEzB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,EAE3B;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;AAc3B;;;AC5BA,IAAM,cAAc;AAAA,EAEnB,UAAU;AAAA,IAET,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACvC,kBAAkB,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAEjD,sBAAsB,EAAE,OAAO,IAAI,MAAO,MAAS,EAAE;AAAA,IAErD,cAAc,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,EAE9C;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,EAoBxB;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;AAuC3B;AAEA,IAAM,cAAc;AAAA,EAEnB,UAAU;AAAA,IAET,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACvC,kBAAkB,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAEjD,sBAAsB,EAAE,OAAO,IAAI,MAAO,MAAS,EAAE;AAAA,IAErD,cAAc,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAC7C,eAAe,EAAE,OAAO,IAAI,MAAO,OAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,EAE/C;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;AAsC3B;AAEA,IAAM,qBAAqB;AAAA,EAE1B,UAAU;AAAA,IAET,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACvC,kBAAkB,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAEjD,sBAAsB,EAAE,OAAO,IAAI,MAAO,MAAS,EAAE;AAAA,IAErD,cAAc,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAC7C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,IAC9C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,EAE/C;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;AAkE3B;AAEA,IAAM,mBAAmB;AAAA,EAExB,UAAU;AAAA,IAET,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACvC,kBAAkB,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAEjD,sBAAsB,EAAE,OAAO,IAAI,MAAO,MAAS,EAAE;AAAA,IAErD,cAAc,EAAE,OAAO,IAAI,MAAO,QAAS,EAAE;AAAA,IAC7C,eAAe,EAAE,OAAO,IAAI,MAAO,CAAS,EAAE;AAAA,EAE/C;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;AA8C3B;;;ACrTA,IAAM,qBAAqB;AAAA,EAE1B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,WAAW,EAAE,OAAO,KAAK;AAAA,IACzB,SAAS,EAAE,OAAO,IAAI,QAAS,GAAG,CAAE,EAAE;AAAA,EAEvC;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;AAmC3B;;;AClEA,IAAM,wBAAwB;AAAA,EAE7B,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;AAiB3B;;;AClCA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU,cAAc,MAAO;AAAA,IAC9B,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ;AAAA,MACC,iBAAiB,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,MACxC,6BAA6B,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,MACpD,8BAA8B,EAAE,OAAO,IAAI,QAAQ,EAAE;AAAA,IACtD;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,EAiExB;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;AAsC3B;;;ACtHA,IAAM,qBAAqB;AAAA,EAE1B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,KAAK,EAAE,OAAO,IAAM,IAAM;AAAA,EAE3B;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;AAyB3B;;;AC/CA,IAAM,0BAA0B;AAAA,EAE/B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,KAAK,EAAE,OAAO,IAAM,IAAM;AAAA,IAC1B,KAAK,EAAE,OAAO,KAAK;AAAA,EAEpB;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;AA4B3B;;;ACtDA,IAAM,iBAAiB;AAAA,EAEtB,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,YAAY,EAAE,OAAO,KAAK;AAAA,IAC1B,UAAU,EAAE,OAAO,EAAI;AAAA,IACvB,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;AAmB3B;;;ACrCA,IAAM,sBAAsB;AAAA,EAE3B,UAAU;AAAA,IACT,UAAU,EAAE,OAAO,IAAI,QAAS,GAAG,GAAG,CAAE,EAAE;AAAA,IAC1C,iBAAiB,EAAE,OAAO,EAAE;AAAA,IAC5B,qBAAqB,EAAE,OAAO,IAAI;AAAA,IAClC,UAAU,EAAE,OAAO,IAAI,QAAS,GAAG,CAAE,EAAE;AAAA,IACvC,UAAU,EAAE,OAAO,KAAK;AAAA,IACxB,YAAY,EAAE,OAAO,KAAK;AAAA,EAC3B;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;AAAA;AAAA,EAgCxB;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;AAwO3B;;;AC9RA,IAAM,wBAAwB;AAAA,EAE7B,MAAM;AAAA,EAEN,UAAU;AAAA,IAET,SAAS;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IAEA,QAAQ;AAAA,MACP,OAAO;AAAA,IACR;AAAA,IAEA,YAAY;AAAA,MACX,OAAO;AAAA,IACR;AAAA,IAEA,SAAS;AAAA,MACR,OAAO;AAAA,IACR;AAAA,IAEA,iBAAiB;AAAA,MAChB,OAAO;AAAA,IACR;AAAA,EAED;AAAA,EAEA;AAAA;AAAA,IAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBxB;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;AA+C3B;;;AC5FA,IAAM,gBAAN,MAAoB;AAAA,EAEnB,YAAaC,SAAQ,KAAKC,UAAS,KAAM;AAExC,UAAM,SAAS,SAAS,cAAe,QAAS;AAChD,WAAO,QAAQD;AACf,WAAO,SAASC;AAEhB,UAAM,UAAU,OAAO,WAAY,IAAK;AACxC,YAAQ,YAAY;AACpB,YAAQ,SAAU,GAAG,GAAGD,QAAOC,OAAO;AAEtC,aAAU,IAAI,GAAG,IAAI,KAAM,KAAO;AAEjC,YAAMC,KAAI,KAAK,OAAO,IAAIF;AAC1B,YAAMG,KAAI,KAAK,OAAO,IAAIF;AAC1B,YAAM,IAAI,KAAK,OAAO,IAAI,IAAI;AAE9B,UAAI,KAAK,KAAK,OAAO,IAAI,IAAI;AAC7B,UAAI,KAAK,KAAK,OAAO,IAAI,IAAI;AAC7B,UAAI,KAAK;AAET,YAAMG,KAAI,KAAK,KAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAG;AAEjD,YAAMA;AAAG,YAAMA;AAAG,YAAMA;AAExB,cAAQ,YAAY,UAAW,KAAK,MAAM,OAAQ,OAAQ,KAAK,MAAM,OAAQ,MAAQ,KAAK,MAAQ;AAClG,cAAQ,UAAU;AAClB,cAAQ,IAAKF,IAAGC,IAAG,GAAG,GAAG,KAAK,KAAK,CAAE;AACrC,cAAQ,KAAK;AAAA,IAEd;AAEA,WAAO;AAAA,EAER;AAED;;;ACrCA;AAAA;AAAA;AAAA;AAMA,IAAM,MAAoB,IAAI,QAAQ;AAAtC,IACC,MAAoB,IAAI,QAAQ;AADjC,IAEC,MAAoB,IAAI,QAAQ;AAFjC,IAGC,MAAoB,IAAI,QAAQ;AAHjC,IAIC,MAAoB,IAAI,QAAQ;AAJjC,IAKC,MAAoB,IAAI,QAAQ;AALjC,IAMC,OAAqB,IAAI,QAAQ;AANlC,IAOC,QAAsB,IAAI,WAAW;AAWtC,SAAS,aAAc,QAAQ,kBAAkB,mBAAmB,eAAe,sBAAsB,OAAQ;AAEhH,QAAME,MAAK,kBAAkB,KAAK,mBAAmB,KAAK;AAC1D,QAAMC,MAAK,OAAO;AAClB,QAAMC,KAAI,OAAO;AACjB,QAAM,IAAI,OAAO;AAEjB,MAAI,KAAM,EAAG,EAAE,IAAKF,GAAG,EAAE,UAAU;AACnC,MAAI,KAAM,EAAG,EAAE,IAAKA,GAAG,EAAE,UAAU;AACnC,MAAI,aAAc,KAAK,GAAI,EAAE,UAAU;AAEvC,MAAI,KAAMA,GAAG,EAAE,IAAKC,GAAG;AACvB,MAAI,KAAM,EAAG,EAAE,IAAKA,GAAG;AACvB,MAAI,KAAM,EAAG,EAAE,IAAKA,GAAG;AAEvB,QAAM,IAAI,CAAE,IAAI,IAAK,GAAI;AACzB,QAAME,KAAI,IAAI,IAAK,GAAI,IAAID,KAAI;AAC/B,QAAM,IAAI,IAAI,IAAK,GAAI,IAAIA,KAAI;AAC/B,QAAME,KAAI,IAAI,IAAK,GAAI,IAAIF,KAAI;AAC/B,QAAMG,KAAI,IAAI,IAAK,GAAI,IAAIH,KAAI;AAG/B,QAAM,mBAAoB,KAAK,IAAK,GAAG,GAAG,CAAE,GAAG,GAAI;AACnD,SAAO,WAAW,mBAAoB,KAAK,IAAK,GAAG,GAAG,CAAE,EAAE,gBAAiB,KAAM,GAAG,GAAI,EAAE,SAAU,KAAM;AAG1G,SAAO,iBAAiB;AAAA,IAAK,IAAMA,MAAM,IAAIC;AAAA,IAAK;AAAA,KAC/C,IAAIA,OAAQ,IAAIA;AAAA,IAAK;AAAA,IAAK;AAAA,IAC5B,IAAMD,MAAMG,KAAID;AAAA,KACdC,KAAID,OAAQC,KAAID;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,KAC/B,IAAIF,OAAQA,KAAI;AAAA,IAClB,IAAM,IAAIA,MAAMA,KAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAO;AAAA,EAAI;AAC/C,SAAO,wBAAwB,KAAM,OAAO,gBAAiB,EAAE,OAAO;AAGtE,MAAK,qBAAsB;AAI1B,WAAO,MACN,UAAU,UAAU,KAAK,IAAK,GAAK,OAAO,MAAO,IACjD,KAAK,MAAQ,KAAK,KAAM,EAAG,EAAE,IAAKF,GAAG,EAAE,OAAO,IACxC,KAAK,KAAM,EAAG,EAAE,IAAKA,GAAG,EAAE,OAAO,KAAQ,IAAI,OAAO,CAAE;AAAA,EAE9D;AAED;;;ACtEA,IAAI,QAAQ,WAAY;AAEvB,MAAI,OAAO;AAEX,MAAI,YAAY,SAAS,cAAe,KAAM;AAC9C,YAAU,MAAM,UAAU;AAC1B,YAAU,iBAAkB,SAAS,SAAW,OAAQ;AAEvD,UAAM,eAAe;AACrB,cAAW,EAAG,OAAO,UAAU,SAAS,MAAO;AAAA,EAEhD,GAAG,KAAM;AAIT,WAAS,SAAU,OAAQ;AAE1B,cAAU,YAAa,MAAM,GAAI;AACjC,WAAO;AAAA,EAER;AAEA,WAAS,UAAW,IAAK;AAExB,aAAU,IAAI,GAAG,IAAI,UAAU,SAAS,QAAQ,KAAO;AAEtD,gBAAU,SAAU,CAAE,EAAE,MAAM,UAAU,MAAM,KAAK,UAAU;AAAA,IAE9D;AAEA,WAAO;AAAA,EAER;AAIA,MAAI,aAAc,eAAe,MAAO,IAAI,GAAG,WAAW,WAAWM,UAAS;AAE9E,MAAI,WAAW,SAAU,IAAI,MAAM,MAAO,OAAO,QAAQ,MAAO,CAAE;AAClE,MAAI,UAAU,SAAU,IAAI,MAAM,MAAO,MAAM,QAAQ,MAAO,CAAE;AAEhE,MAAK,KAAK,eAAe,KAAK,YAAY,QAAS;AAElD,QAAI,WAAW,SAAU,IAAI,MAAM,MAAO,MAAM,QAAQ,MAAO,CAAE;AAAA,EAElE;AAEA,YAAW,CAAE;AAEb,SAAO;AAAA,IAEN,UAAU;AAAA,IAEV,KAAK;AAAA,IAEL;AAAA,IACA;AAAA,IAEA,OAAO,WAAY;AAElB,mBAAc,eAAe,MAAO,IAAI;AAAA,IAEzC;AAAA,IAEA,KAAK,WAAY;AAEhB,MAAAA;AAEA,UAAIC,SAAS,eAAe,MAAO,IAAI;AAEvC,cAAQ,OAAQA,QAAO,WAAW,GAAI;AAEtC,UAAKA,SAAQ,WAAW,KAAO;AAE9B,iBAAS,OAAUD,UAAS,OAAWC,QAAO,WAAY,GAAI;AAE9D,mBAAWA;AACX,QAAAD,UAAS;AAET,YAAK,UAAW;AAEf,cAAI,SAAS,YAAY;AACzB,mBAAS,OAAQ,OAAO,iBAAiB,SAAS,OAAO,kBAAkB,OAAQ;AAAA,QAEpF;AAAA,MAED;AAEA,aAAOC;AAAA,IAER;AAAA,IAEA,QAAQ,WAAY;AAEnB,kBAAY,KAAK,IAAI;AAAA,IAEtB;AAAA;AAAA,IAIA,YAAY;AAAA,IACZ,SAAS;AAAA,EAEV;AAED;AAEA,MAAM,QAAQ,SAAWC,OAAM,IAAI,IAAK;AAEvC,MAAI,MAAM,UAAUC,OAAM,GAAG,QAAQ,KAAK;AAC1C,MAAI,KAAK,MAAO,OAAO,oBAAoB,CAAE;AAE7C,MAAI,QAAQ,KAAK,IAAI,SAAS,KAAK,IAClC,SAAS,IAAI,IAAI,SAAS,IAAI,IAC9B,UAAU,IAAI,IAAI,UAAU,KAAK,IACjC,cAAc,KAAK,IAAI,eAAe,KAAK;AAE5C,MAAI,SAAS,SAAS,cAAe,QAAS;AAC9C,SAAO,QAAQ;AACf,SAAO,SAAS;AAChB,SAAO,MAAM,UAAU;AAEvB,MAAI,UAAU,OAAO,WAAY,IAAK;AACtC,UAAQ,OAAO,UAAY,IAAI,KAAO;AACtC,UAAQ,eAAe;AAEvB,UAAQ,YAAY;AACpB,UAAQ,SAAU,GAAG,GAAG,OAAO,MAAO;AAEtC,UAAQ,YAAY;AACpB,UAAQ,SAAUD,OAAM,QAAQ,MAAO;AACvC,UAAQ,SAAU,SAAS,SAAS,aAAa,YAAa;AAE9D,UAAQ,YAAY;AACpB,UAAQ,cAAc;AACtB,UAAQ,SAAU,SAAS,SAAS,aAAa,YAAa;AAE9D,SAAO;AAAA,IAEN,KAAK;AAAA,IAEL,QAAQ,SAAWE,QAAO,UAAW;AAEpC,YAAM,KAAK,IAAK,KAAKA,MAAM;AAC3B,MAAAD,OAAM,KAAK,IAAKA,MAAKC,MAAM;AAE3B,cAAQ,YAAY;AACpB,cAAQ,cAAc;AACtB,cAAQ,SAAU,GAAG,GAAG,OAAO,OAAQ;AACvC,cAAQ,YAAY;AACpB,cAAQ,SAAU,MAAOA,MAAM,IAAI,MAAMF,QAAO,OAAO,MAAO,GAAI,IAAI,MAAM,MAAOC,IAAI,IAAI,KAAK,QAAQ,MAAO;AAE/G,cAAQ,UAAW,QAAQ,UAAU,IAAI,SAAS,cAAc,IAAI,cAAc,SAAS,SAAS,cAAc,IAAI,YAAa;AAEnI,cAAQ,SAAU,UAAU,cAAc,IAAI,SAAS,IAAI,YAAa;AAExE,cAAQ,YAAY;AACpB,cAAQ,cAAc;AACtB,cAAQ,SAAU,UAAU,cAAc,IAAI,SAAS,IAAI,OAAS,IAAMC,SAAQ,YAAe,YAAa,CAAE;AAAA,IAEjH;AAAA,EAED;AAED;AAEA,IAAO,uBAAQ;;;ACnKR,IAAM,gBAAN,cAA4B,qBAAM,MAAM;AAAA,EAE9C,YAAa,SAASC,QAAO,UAAW;AAEvC,UAAOA,OAAM,QAAQ,MAAO;AAE5B,UAAM,YAAY,QAAQ,aAAc,iCAAkC;AAE1E,QAAK,cAAc,MAAO;AAEzB,cAAQ,KAAM,6DAA8D;AAAA,IAE7E;AAEA,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AAErB,SAAK,aAAa,WAAY;AAE7B,YAAM,KAAK,KAAK;AAChB,YAAM,MAAM,KAAK;AAEjB,UAAK,QAAQ,MAAO;AAEnB;AAAA,MAED;AAGA,YAAM,QAAQ,GAAG,YAAY;AAC7B,SAAG,WAAY,IAAI,kBAAkB,KAAM;AAE3C,WAAK;AAEL,YAAM,aAAa,MAAM;AAIxB,cAAM,YAAY,GAAG,kBAAmB,OAAO,GAAG,sBAAuB;AACzE,cAAM,WAAW,GAAG,aAAc,IAAI,gBAAiB;AACvD,cAAM,KAAK,GAAG,kBAAmB,OAAO,GAAG,YAAa;AAExD,cAAM,KAAK,KAAK;AAEhB,YAAK,WAAY;AAGhB,cAAK,CAAE,UAAW;AAEjB,iBAAK,OAAQ,IAAI,KAAK,OAAQ;AAAA,UAE/B;AAEA,aAAG,YAAa,KAAM;AAEtB,eAAK;AAAA,QAGN,WAAY,GAAG,cAAc,MAAM,OAAQ;AAG1C,gCAAuB,UAAW;AAAA,QAEnC;AAAA,MAED;AAEA,4BAAuB,UAAW;AAAA,IAEnC;AAEA,SAAK,WAAW,WAAY;AAG3B,YAAM,MAAM,KAAK;AACjB,YAAM,KAAK,KAAK;AAEhB,UAAK,QAAQ,MAAO;AAEnB;AAAA,MAED;AAEA,SAAG,SAAU,IAAI,gBAAiB;AAAA,IAEnC;AAAA,EAED;AAED;;;AC9FA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACaA,IAAM,sBAAN,cAAkC,kBAAkB;AAAA,EAEnD,YAAa,YAAa;AAEzB,UAAM;AAEN,SAAK,UAAU,CAAC;AAChB,SAAK,OAAO;AACZ,SAAK,WAAW,cAAc,MAAO;AAAA,MAEpC,UAAU,MAAM;AAAA,MAEhB;AAAA,QACC,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,eAAe,EAAE,OAAO,KAAK;AAAA,MAC9B;AAAA,IAED,CAAE;AAEF,SAAK,eAAe;AAAA,MACnB;AAAA,MAEA;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiCA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA;AAAA,MAEA,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ,YAAY;AAAA,MAEZ;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,MAEA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MAEZ;AAAA,IACD,EAAE,KAAM,IAAK;AAGb,SAAK,iBAAiB,UAAU,MAAM;AAEtC,SAAK,UAAW,UAAW;AAAA,EAE5B;AAED;;;ADtJA,SAAS,gBAAiB,MAAM,cAAe;AAE9C,MAAK,CAAE,KAAK,UAAW;AAEtB,YAAQ,MAAO,8BAA+B;AAAA,EAE/C;AAEA,QAAM,SAAS,KAAK,SAAS,WAAW;AAExC,MAAK,CAAE,QAAS;AAEf,YAAQ,MAAO,0CAA2C;AAAA,EAE3D;AAEA,MAAK,OAAO,SAAW;AAEvB,MAAK,OAAO,YAAY,GAAI;AAE3B,YAAQ,MAAO,qDAAsD;AAAA,EAEtE;AAEA,QAAM,QAAQ,OAAO;AACrB,QAAM,QAAQ,OAAO;AAErB,MAAI;AACJ,MAAK,gBAAgB,WAAY;AAGhC,aAAS,IAAI,WAAY,QAAQ,CAAE;AAEnC,aAAU,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAI;AAEjD,YAAM,UAAU,cAAe,MAAO,GAAI,GAAG,MAAO,MAAM,CAAE,GAAG,MAAO,MAAM,CAAE,GAAG,CAAE;AAEnF,aAAQ,MAAM,CAAE,IAAI,QAAS,CAAE;AAC/B,aAAQ,MAAM,CAAE,IAAI,QAAS,CAAE;AAC/B,aAAQ,MAAM,CAAE,IAAI,QAAS,CAAE;AAAA,IAEhC;AAEA,SAAK,SAAS,aAAc,UAAU,IAAI,gBAAiB,QAAQ,GAAG,IAAK,CAAE;AAC7E,SAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,EAEzD,WAAY,gBAAgB,YAAa;AAQxC,aAAS,IAAI,UAAW,QAAQ,CAAE;AAElC,aAAU,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAI;AAEjD,YAAM,UAAU,cAAe,MAAO,GAAI,GAAG,MAAO,MAAM,CAAE,GAAG,MAAO,MAAM,CAAE,GAAG,CAAE;AAEnF,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AACvC,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AAAA,IAExC;AAEA,SAAK,SAAS,aAAc,UAAU,IAAI,gBAAiB,QAAQ,GAAG,IAAK,CAAE;AAC7E,SAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,EAEzD,WAAY,gBAAgB,YAAa;AAExC,aAAS,IAAI,WAAY,QAAQ,CAAE;AAEnC,aAAU,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAI;AAEjD,YAAM,UAAU,cAAe,MAAO,GAAI,GAAG,MAAO,MAAM,CAAE,GAAG,MAAO,MAAM,CAAE,GAAG,CAAE;AAEnF,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AACvC,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AAAA,IAExC;AAEA,SAAK,SAAS,aAAc,UAAU,IAAI,gBAAiB,QAAQ,GAAG,IAAK,CAAE;AAC7E,SAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,EAEzD,WAAY,gBAAgB,UAAW;AAEtC,aAAS,IAAI,YAAa,QAAQ,CAAE;AAEpC,aAAU,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO,GAAI;AAEjD,YAAM,UAAU,aAAc,MAAO,GAAI,GAAG,MAAO,MAAM,CAAE,GAAG,MAAO,MAAM,CAAE,CAAE;AAE/E,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AACvC,aAAQ,MAAM,IAAI,IAAI,CAAE,IAAI,QAAS,CAAE;AAAA,IAExC;AAEA,SAAK,SAAS,aAAc,UAAU,IAAI,gBAAiB,QAAQ,GAAG,IAAK,CAAE;AAC7E,SAAK,SAAS,WAAW,OAAO,QAAQ,OAAO,SAAS;AAAA,EAEzD,OAAO;AAEN,YAAQ,MAAO,0EAA2E;AAAA,EAE3F;AAEA,OAAK,SAAS,WAAW,OAAO,cAAc;AAC9C,OAAK,SAAS,WAAW,OAAO,WAAW;AAC3C,OAAK,SAAS,WAAW,OAAO,gBAAgB;AAGhD,MAAK,EAAI,KAAK,oBAAoB,sBAAwB;AAEzD,SAAK,WAAW,IAAI,oBAAoB,EAAE,KAAM,KAAK,QAAS;AAAA,EAE/D;AAEA,MAAK,gBAAgB,UAAW;AAE/B,SAAK,SAAS,QAAQ,oBAAoB;AAAA,EAE3C;AAEA,MAAK,gBAAgB,YAAa;AAEjC,SAAK,SAAS,QAAQ,oBAAoB;AAAA,EAE3C;AAEA,MAAK,gBAAgB,YAAa;AAEjC,SAAK,SAAS,QAAQ,oBAAoB;AAAA,EAE3C;AAEA,MAAK,gBAAgB,WAAY;AAEhC,SAAK,SAAS,QAAQ,oBAAoB;AAAA,EAE3C;AAED;AAUA,SAAS,kBAAmB,MAAO;AAElC,MAAK,CAAE,KAAK,UAAW;AAEtB,YAAQ,MAAO,8BAA+B;AAAA,EAE/C;AAEA,QAAMC,YAAW,KAAK,SAAS,WAAW;AAE1C,MAAK,CAAEA,WAAW;AAEjB,YAAQ,MAAO,4CAA6C;AAAA,EAE7D;AAEA,MAAKA,UAAS,SAAW;AAEzB,MAAKA,UAAS,YAAY,GAAI;AAE7B,YAAQ,MAAO,sDAAuD;AAAA,EAEvE;AAEA,QAAM,QAAQA,UAAS;AACvB,QAAM,gBAAgB;AAEtB,QAAM,SAAS,gBAAiB,OAAO,aAAc;AAErD,QAAM,YAAY,OAAO;AACzB,QAAM,YAAY,OAAO;AAGzB,MAAK,KAAK,SAAS,eAAe,KAAO,MAAK,SAAS,mBAAmB;AAC1E,MAAK,KAAK,SAAS,kBAAkB,KAAO,MAAK,SAAS,sBAAsB;AAEhF,OAAK,SAAS,aAAc,YAAY,IAAI,gBAAiB,WAAW,CAAE,CAAE;AAC5E,OAAK,SAAS,WAAW,SAAS,WAAW;AAC7C,OAAK,SAAS,WAAW,SAAS,cAAc;AAChD,OAAK,SAAS,WAAW,SAAS,QAAQ,UAAU,SAAS;AAG7D,MAAK,EAAI,KAAK,oBAAoB,sBAAwB;AAEzD,SAAK,WAAW,IAAI,oBAAoB,EAAE,KAAM,KAAK,QAAS;AAAA,EAE/D;AAEA,OAAK,SAAS,QAAQ,sBAAsB;AAE5C,OAAK,SAAS,SAAS,eAAe,QAAQ;AAC9C,OAAK,SAAS,SAAS,eAAe,cAAc;AAErD;AASA,SAAS,YAAa,MAAO;AAE5B,MAAK,CAAE,KAAK,UAAW;AAEtB,YAAQ,MAAO,uCAAwC;AAAA,EAExD;AAEA,QAAM,MAAM,KAAK,SAAS,WAAW;AAErC,MAAK,CAAE,KAAM;AAEZ,YAAQ,MAAO,sCAAuC;AAAA,EAEvD;AAEA,MAAK,IAAI,SAAW;AAEpB,QAAM,QAAQ,EAAE,KAAK,UAAU,KAAK,UAAW;AAE/C,QAAM,QAAQ,IAAI;AAElB,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAO;AAEzC,UAAM,MAAM,KAAK,IAAK,MAAM,KAAK,MAAO,CAAE,CAAE;AAC5C,UAAM,MAAM,KAAK,IAAK,MAAM,KAAK,MAAO,CAAE,CAAE;AAAA,EAE7C;AAEA,MAAI;AAEJ,MAAK,MAAM,OAAO,MAAS,MAAM,OAAO,GAAM;AAG7C,aAAS,IAAI,YAAa,MAAM,MAAO;AAEvC,aAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAI;AAE3C,YAAM,UAAU,cAAe,MAAO,CAAE,GAAG,MAAO,IAAI,CAAE,GAAG,GAAG,CAAE;AAEhE,aAAQ,CAAE,IAAI,QAAS,CAAE;AACzB,aAAQ,IAAI,CAAE,IAAI,QAAS,CAAE;AAAA,IAE9B;AAEA,SAAK,SAAS,aAAc,MAAM,IAAI,gBAAiB,QAAQ,GAAG,IAAK,CAAE;AACzE,SAAK,SAAS,WAAW,GAAG,WAAW;AACvC,SAAK,SAAS,WAAW,GAAG,cAAc;AAC1C,SAAK,SAAS,WAAW,GAAG,QAAQ,OAAO,SAAS;AAEpD,QAAK,EAAI,KAAK,oBAAoB,sBAAwB;AAEzD,WAAK,WAAW,IAAI,oBAAoB,EAAE,KAAM,KAAK,QAAS;AAAA,IAE/D;AAEA,SAAK,SAAS,QAAQ,gBAAgB;AAAA,EAEvC,OAAO;AAGN,aAAS,kBAAmB,OAAO,CAAE;AAErC,SAAK,SAAS,aAAc,MAAM,IAAI,gBAAiB,OAAO,WAAW,CAAE,CAAE;AAC7E,SAAK,SAAS,WAAW,GAAG,WAAW;AACvC,SAAK,SAAS,WAAW,GAAG,cAAc;AAC1C,SAAK,SAAS,WAAW,GAAG,QAAQ,OAAO,UAAU,SAAS;AAE9D,QAAK,EAAI,KAAK,oBAAoB,sBAAwB;AAEzD,WAAK,WAAW,IAAI,oBAAoB,EAAE,KAAM,KAAK,QAAS;AAAA,IAE/D;AAEA,SAAK,SAAS,QAAQ,gBAAgB;AAEtC,SAAK,SAAS,SAAS,cAAc,QAAQ,OAAO;AACpD,SAAK,SAAS,SAAS,cAAc,cAAc;AAAA,EAEpD;AAED;AAKA,SAAS,cAAeC,IAAGC,IAAG,GAAG,OAAQ;AAExC,MAAK,SAAS,GAAI;AAEjB,UAAM,OAAO,KAAK,OAASD,KAAI,KAAM,MAAM,GAAI;AAC/C,UAAM,OAAO,KAAK,OAASC,KAAI,KAAM,MAAM,GAAI;AAC/C,UAAM,OAAO,KAAK,OAAS,IAAI,KAAM,MAAM,GAAI;AAC/C,WAAO,IAAI,WAAY,CAAE,MAAM,MAAM,IAAK,CAAE;AAAA,EAE7C,WAAY,SAAS,GAAI;AAExB,UAAM,OAAO,KAAK,OAASD,KAAI,KAAM,MAAM,KAAM;AACjD,UAAM,OAAO,KAAK,OAASC,KAAI,KAAM,MAAM,KAAM;AACjD,UAAM,OAAO,KAAK,OAAS,IAAI,KAAM,MAAM,KAAM;AACjD,WAAO,IAAI,YAAa,CAAE,MAAM,MAAM,IAAK,CAAE;AAAA,EAE9C,OAAO;AAEN,YAAQ,MAAO,gCAAiC;AAAA,EAEjD;AAED;AAGA,SAAS,aAAcD,IAAGC,IAAG,GAAI;AAEhC,QAAM,UAAU,SAAU,OAAQ,IAAM,KAAK,MAAOA,IAAGD,EAAE,IAAI,KAAK,MAAO,KAAM;AAC/E,QAAM,UAAU,SAAU,OAAQ,IAAM,KAAM,KAAM;AACpD,SAAO,IAAI,YAAa,CAAE,SAAS,OAAQ,CAAE;AAE9C;AAGA,SAAS,cAAeA,IAAGC,IAAG,GAAG,OAAQ;AAExC,MAAI,KAAK,KAAK,MAAM,YAAY;AAIhC,SAAO,MAAM,cAAeD,IAAGC,IAAG,GAAG,SAAS,OAAQ;AACtD,QAAM,cAAe,GAAI;AACzB,YAAU,IAAKD,IAAGC,IAAG,GAAG,GAAI;AAE5B,QAAM,cAAeD,IAAGC,IAAG,GAAG,QAAQ,OAAQ;AAC9C,QAAM,cAAe,GAAI;AACzB,eAAa,IAAKD,IAAGC,IAAG,GAAG,GAAI;AAE/B,MAAK,aAAa,SAAU;AAE3B,WAAO;AACP,cAAU;AAAA,EAEX;AAEA,QAAM,cAAeD,IAAGC,IAAG,GAAG,SAAS,MAAO;AAC9C,QAAM,cAAe,GAAI;AACzB,eAAa,IAAKD,IAAGC,IAAG,GAAG,GAAI;AAE/B,MAAK,aAAa,SAAU;AAE3B,WAAO;AACP,cAAU;AAAA,EAEX;AAEA,QAAM,cAAeD,IAAGC,IAAG,GAAG,QAAQ,MAAO;AAC7C,QAAM,cAAe,GAAI;AACzB,eAAa,IAAKD,IAAGC,IAAG,GAAG,GAAI;AAE/B,MAAK,aAAa,SAAU;AAE3B,WAAO;AAAA,EAER;AAEA,SAAO;AAEP,WAAS,cAAe,IAAI,IAAI,IAAI,OAAO,OAAQ;AAElD,QAAID,KAAI,MAAO,KAAK,IAAK,EAAG,IAAI,KAAK,IAAK,EAAG,IAAI,KAAK,IAAK,EAAG;AAC9D,QAAIC,KAAI,MAAO,KAAK,IAAK,EAAG,IAAI,KAAK,IAAK,EAAG,IAAI,KAAK,IAAK,EAAG;AAE9D,QAAK,IAAI,GAAI;AAEZ,YAAM,SAAU,IAAI,KAAK,IAAKA,EAAE,MAAQD,MAAK,IAAI,IAAI;AACrD,YAAM,SAAU,IAAI,KAAK,IAAKA,EAAE,MAAQC,MAAK,IAAI,IAAI;AAErD,MAAAD,KAAI;AACJ,MAAAC,KAAI;AAEJ,UAAI,OAAO,IAAI,KAAK,IAAKD,EAAE,IAAI,KAAK,IAAKC,EAAE;AAC3C,UAAK,OAAO,GAAI;AAEf,gBAAQ;AACR,QAAAD,MAAKA,KAAI,IAAI,OAAO,IAAI,CAAE,OAAO;AACjC,QAAAC,MAAKA,KAAI,IAAI,OAAO,IAAI,CAAE,OAAO;AAAA,MAElC;AAAA,IAED;AAEA,QAAK,SAAS,GAAI;AAEjB,aAAO,IAAI,UAAW;AAAA,QACrB,KAAM,KAAM,EAAGD,KAAI,SAAUA,KAAI,IAAI,IAAI,EAAI;AAAA,QAC7C,KAAM,KAAM,EAAGC,KAAI,SAAUA,KAAI,IAAI,IAAI,EAAI;AAAA,MAC9C,CAAE;AAAA,IAEH;AAEA,QAAK,SAAS,GAAI;AAEjB,aAAO,IAAI,WAAY;AAAA,QACtB,KAAM,KAAM,EAAGD,KAAI,WAAYA,KAAI,IAAI,IAAI,EAAI;AAAA,QAC/C,KAAM,KAAM,EAAGC,KAAI,WAAYA,KAAI,IAAI,IAAI,EAAI;AAAA,MAChD,CAAE;AAAA,IAEH;AAAA,EAGD;AAEA,WAAS,cAAeC,MAAM;AAE7B,QAAIF,KAAIE,KAAK,CAAE;AACf,QAAID,KAAIC,KAAK,CAAE;AAEf,QAAK,SAAS,GAAI;AAEjB,MAAAF,MAAKA,KAAI,IAAI,MAAM;AACnB,MAAAC,MAAKA,KAAI,IAAI,MAAM;AAAA,IAEpB,WAAY,SAAS,GAAI;AAExB,MAAAD,MAAKA,KAAI,IAAI,QAAQ;AACrB,MAAAC,MAAKA,KAAI,IAAI,QAAQ;AAAA,IAEtB;AAGA,UAAME,KAAI,IAAI,KAAK,IAAKH,EAAE,IAAI,KAAK,IAAKC,EAAE;AAE1C,QAAKE,KAAI,GAAI;AAEZ,YAAM,OAAOH;AACb,MAAAA,MAAM,IAAI,KAAK,IAAKC,EAAE,MAAQD,MAAK,IAAI,IAAI;AAC3C,MAAAC,MAAM,IAAI,KAAK,IAAK,IAAK,MAAQA,MAAK,IAAI,IAAI;AAAA,IAE/C;AAEA,UAAMG,UAAS,KAAK,KAAMJ,KAAIA,KAAIC,KAAIA,KAAIE,KAAIA,EAAE;AAEhD,WAAO;AAAA,MACNH,KAAII;AAAA,MACJH,KAAIG;AAAA,MACJD,KAAIC;AAAA,IACL;AAAA,EAED;AAEA,WAAS,IAAKJ,IAAGC,IAAGE,IAAG,MAAO;AAE7B,WAAOH,KAAI,KAAM,CAAE,IAAIC,KAAI,KAAM,CAAE,IAAIE,KAAI,KAAM,CAAE;AAAA,EAEpD;AAED;AAEA,SAAS,gBAAiB,OAAO,OAAQ;AAExC,MAAI,WAAW;AAEf,MAAK,SAAS,GAAI;AAEjB,gBAAY,IAAI,WAAY,MAAM,MAAO;AACzC,eAAW;AAAA,EAEZ,WAAY,SAAS,GAAI;AAExB,gBAAY,IAAI,YAAa,MAAM,MAAO;AAC1C,eAAW;AAAA,EAEZ,OAAO;AAEN,YAAQ,MAAO,yBAA0B;AAAA,EAE1C;AAEA,QAAM,YAAY,IAAI,QAAQ;AAE9B,QAAM,MAAM,IAAI,aAAc,CAAE;AAChC,QAAME,OAAM,IAAI,aAAc,CAAE;AAEhC,MAAK,CAAE,IAAI,IAAK,CAAE,IAAI,IAAK,CAAE,IAAI,OAAO;AACxC,EAAAA,KAAK,CAAE,IAAIA,KAAK,CAAE,IAAIA,KAAK,CAAE,IAAI,CAAE,OAAO;AAE1C,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAI;AAE3C,QAAK,CAAE,IAAI,KAAK,IAAK,IAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,QAAK,CAAE,IAAI,KAAK,IAAK,IAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,QAAK,CAAE,IAAI,KAAK,IAAK,IAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,IAAAA,KAAK,CAAE,IAAI,KAAK,IAAKA,KAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,IAAAA,KAAK,CAAE,IAAI,KAAK,IAAKA,KAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,IAAAA,KAAK,CAAE,IAAI,KAAK,IAAKA,KAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAAA,EAE/C;AAEA,YAAU,MAAO,IAAI;AAAA,KAClBA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,KACxBA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,KACxBA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,EAC3B,CAAE;AAEF,YAAU,SAAU,EAAG,IAAI,IAAK,CAAE;AAClC,YAAU,SAAU,EAAG,IAAI,IAAK,CAAE;AAClC,YAAU,SAAU,EAAG,IAAI,IAAK,CAAE;AAElC,YAAU,UAAU;AAGpB,QAAM,aAAa,IAAI,aAAc;AAAA,IACpCA,KAAK,CAAE,MAAM,IAAK,CAAE,IAAI,YAAaA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,IAC7DA,KAAK,CAAE,MAAM,IAAK,CAAE,IAAI,YAAaA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,IAC7DA,KAAK,CAAE,MAAM,IAAK,CAAE,IAAI,YAAaA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,EAC9D,CAAE;AAEF,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAI;AAE3C,cAAW,IAAI,CAAE,IAAI,KAAK,OAAS,MAAO,IAAI,CAAE,IAAI,IAAK,CAAE,KAAM,WAAY,CAAE,CAAE;AACjF,cAAW,IAAI,CAAE,IAAI,KAAK,OAAS,MAAO,IAAI,CAAE,IAAI,IAAK,CAAE,KAAM,WAAY,CAAE,CAAE;AACjF,cAAW,IAAI,CAAE,IAAI,KAAK,OAAS,MAAO,IAAI,CAAE,IAAI,IAAK,CAAE,KAAM,WAAY,CAAE,CAAE;AAAA,EAElF;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AAED;AAEA,SAAS,kBAAmB,OAAO,OAAQ;AAE1C,MAAI,WAAW;AAEf,MAAK,SAAS,GAAI;AAEjB,gBAAY,IAAI,WAAY,MAAM,MAAO;AACzC,eAAW;AAAA,EAEZ,WAAY,SAAS,GAAI;AAExB,gBAAY,IAAI,YAAa,MAAM,MAAO;AAC1C,eAAW;AAAA,EAEZ,OAAO;AAEN,YAAQ,MAAO,yBAA0B;AAAA,EAE1C;AAEA,QAAM,YAAY,IAAI,QAAQ;AAE9B,QAAM,MAAM,IAAI,aAAc,CAAE;AAChC,QAAMA,OAAM,IAAI,aAAc,CAAE;AAEhC,MAAK,CAAE,IAAI,IAAK,CAAE,IAAI,OAAO;AAC7B,EAAAA,KAAK,CAAE,IAAIA,KAAK,CAAE,IAAI,CAAE,OAAO;AAE/B,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAI;AAE3C,QAAK,CAAE,IAAI,KAAK,IAAK,IAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,QAAK,CAAE,IAAI,KAAK,IAAK,IAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,IAAAA,KAAK,CAAE,IAAI,KAAK,IAAKA,KAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAC9C,IAAAA,KAAK,CAAE,IAAI,KAAK,IAAKA,KAAK,CAAE,GAAG,MAAO,IAAI,CAAE,CAAE;AAAA,EAE/C;AAEA,YAAU;AAAA,KACPA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,KACxBA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,EAC3B;AAEA,YAAU,SAAU,CAAE,IAAI,IAAK,CAAE;AACjC,YAAU,SAAU,CAAE,IAAI,IAAK,CAAE;AAEjC,YAAU,UAAU;AAEpB,QAAM,aAAa,IAAI,aAAc;AAAA,IACpCA,KAAK,CAAE,MAAM,IAAK,CAAE,IAAI,YAAaA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,IAC7DA,KAAK,CAAE,MAAM,IAAK,CAAE,IAAI,YAAaA,KAAK,CAAE,IAAI,IAAK,CAAE,KAAM;AAAA,EAC9D,CAAE;AAEF,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAI;AAE3C,cAAW,IAAI,CAAE,IAAI,KAAK,OAAS,MAAO,IAAI,CAAE,IAAI,IAAK,CAAE,KAAM,WAAY,CAAE,CAAE;AACjF,cAAW,IAAI,CAAE,IAAI,KAAK,OAAS,MAAO,IAAI,CAAE,IAAI,IAAK,CAAE,KAAM,WAAY,CAAE,CAAE;AAAA,EAElF;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,EACD;AAED;;;AEtnBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA,SAAS,UAAW,SAAS,IAAI,QAAS,GAAG,GAAG,CAAE,GAAGC,QAAO,IAAI,aAAa,GAAG,KAAK,GAAGC,MAAK,GAAG,KAAK,GAAG,KAAK,GAAI;AAEhH,QAAM,OAAOD,QAAO;AAEpB,QAAM,QAAQ;AAAA,IACb,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,IAAI,IAAK;AAAA,IACxD,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,IAAI,IAAK;AAAA,IACxD,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,IAAI,IAAK;AAAA,IACxD,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,GAAG,OAAO,IAAI,IAAK;AAAA,EACzD;AAEA,QAAM,MAAM;AAAA,IACX,MAAO,EAAG;AAAA,IACV,MAAOC,GAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,EACX;AAGA,MAAK,KAAK,EAAG,YAAa;AAEzB,WAAO;AAAA,MACN,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,GAAG;AAAA,MACzD,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAIA,KAAI,IAAI,EAAG;AAAA,MACzD,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAIA,KAAI,IAAI,EAAG;AAAA,MACzD,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAIA,KAAI,IAAI,EAAG;AAAA,IAC1D;AAAA,EAED;AAGA,SAAO;AAER;AAoBA,SAAS,UAAW,SAAS,IAAI,QAAS,GAAG,GAAG,CAAE,GAAGD,QAAO,IAAI,aAAa,GAAG,KAAK,GAAGC,MAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAI;AAGhJ,QAAM,OAAOD,QAAO;AAEpB,QAAM,QAAQ;AAAA,IACb,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,IAC/D,IAAI,QAAS,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,IAAK;AAAA,EAChE;AAEA,QAAM,MAAM;AAAA,IACX,MAAO,EAAG;AAAA,IACV,MAAOC,GAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,IACV,MAAO,EAAG;AAAA,EACX;AAGA,MAAK,EAAG,cAAc,GAAI;AAEzB,WAAO;AAAA,MACN,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAIA,GAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,KAAI,IAAI,IAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,KAAI,IAAI,IAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,KAAI,IAAI,IAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,KAAI,IAAI,IAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAI,IAAI,IAAIA,KAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAI,IAAI,IAAIA,KAAI,IAAI,EAAG;AAAA,MACzE,GAAG,UAAW,IAAK,CAAE,GAAG,MAAM,YAAY,IAAI,IAAI,IAAIA,KAAI,IAAI,IAAI,IAAI,EAAG;AAAA,IAC1E;AAAA,EAED;AAGA,SAAO;AAER;AASA,SAAS,OAAQD,QAAO,GAAI;AAE3B,WAAS,WAAY,QAAS;AAE7B,QAAI;AACJ,QAAI,QAAQ,OAAO;AAEnB,aAAU,IAAI,GAAG,KAAK,OAAO,OAAO,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,MAAO,KAAO;AAEtF,eAAS;AAET,eAAU,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAO;AAElD,cAAM,OAAO,MAAO,CAAE;AAEtB,YAAK,QAAQ,OAAO,OAAQ;AAE3B,oBAAU,OAAO,MAAO,IAAK;AAAA,QAE9B,OAAO;AAEN,oBAAU;AAAA,QAEX;AAAA,MAED;AAEA,cAAQ;AAAA,IAET;AAEA,WAAO;AAAA,EAER;AAEA,WAAS,SAAU,QAAS;AAE3B,QAAI,QAAQ,GAAG,QAAQ;AACvB,QAAI,QAAQ;AACZ,UAAM,OAAO,CAAE,GAAG,GAAG,CAAE;AACvB,UAAM,UAAU,OAAO;AAEvB,aAAU,IAAI,GAAGE,KAAI,QAAQ,QAAQ,IAAIA,IAAG,KAAO;AAElD,YAAM,OAAO,QAAS,CAAE;AAExB,UAAK,SAAS,KAAM;AAEnB,iBAAS,OAAO;AAAA,MAEjB,WAAY,SAAS,KAAM;AAE1B,iBAAS,OAAO;AAAA,MAEjB,WAAY,SAAS,KAAM;AAE1B,iBAAS,OAAO,OAAO,KAAK,IAAK,KAAM;AACvC,iBAAS,CAAE,OAAO,OAAO,KAAK,IAAK,KAAM;AACzC,aAAK,KAAM,OAAO,OAAO,CAAE;AAAA,MAE5B;AAAA,IAED;AAEA,WAAO;AAAA,EAER;AAIA,QAAMC,UAAS,WAAY;AAAA,IAC1B,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAAA,EACD,CAAE;AAEF,QAAM,SAAS,SAAU;AAAA,IACxB,SAASA;AAAA,IACT,MAAMH;AAAA,IACN,OAAO,KAAK,KAAK;AAAA;AAAA,EAClB,CAAE;AAEF,SAAO;AAER;;;ACzMA,IAAM,aAAN,MAAiB;AAAA,EAEhB,OAAO,YAAa,QAAS;AAM5B,aAAS,aAAc,UAAU,OAAO,aAAa,mBAAoB;AAIxE,YAAM,cAAc,IAAI,eAAe;AAEvC,YAAM,oBAAoB,SAAS,aAAc,UAAW,EAAE;AAC9D,YAAM,kBAAkB,gBAAgB,IAAI,SAAS,aAAc,QAAS,EAAE,QAAQ;AAEtF,YAAM,gBAAgB,KAAK,IAAK,MAAM,OAAO,KAAK,MAAO,kBAAkB,SAAS,CAAE,IAAI,MAAM,KAAM;AACtG,YAAM,YAAY,MAAM,QAAQ;AAChC,YAAM,WAAY,MAAM,QAAQ,iBAAkB;AAElD,YAAM,YAAY,kBAAkB,SAAU,WAAW,OAAQ;AACjE,YAAM,UAAU,oBAAoB,OAAO,gBAAgB,SAAU,WAAW,OAAQ,IAAI;AAE5F,kBAAY,aAAc,YAAY,IAAI,gBAAiB,WAAW,CAAE,CAAE;AAC1E,UAAK,YAAY,KAAO,aAAY,aAAc,UAAU,IAAI,gBAAiB,SAAS,CAAE,CAAE;AAE9F,UAAK,mBAAoB;AAExB,cAAM,gBAAgB,SAAS,aAAc,UAAW,EAAE,MAAM,SAAU,WAAW,OAAQ;AAC7F,cAAM,gBAAgB,SAAS,aAAc,UAAW,EAAE,MAAM,SAAU,WAAW,OAAQ;AAC7F,cAAM,iBAAiB,SAAS,aAAc,WAAY,EAAE,MAAM,SAAU,WAAW,OAAQ;AAE/F,oBAAY,aAAc,YAAY,IAAI,gBAAiB,eAAe,GAAG,KAAM,CAAE;AACrF,oBAAY,aAAc,YAAY,IAAI,gBAAiB,eAAe,GAAG,KAAM,CAAE;AACrF,oBAAY,aAAc,aAAa,IAAI,gBAAiB,gBAAgB,GAAG,KAAM,CAAE;AAAA,MAExF;AAEA,aAAO;AAAA,IAER;AAEA,aAAS,YAAa,KAAK,UAAU,YAAa;AAEjD,YAAM,QAAQ,WAAY,IAAI,IAAK;AACnC,UAAK,CAAE,OAAQ;AAEd,mBAAY,IAAI,IAAK,IAAI;AAAA,UACxB;AAAA,UACA,KAAK,CAAE,QAAS;AAAA,QACjB;AAAA,MAED,OAAO;AAEN,cAAM,IAAI,KAAM,QAAS;AAAA,MAE1B;AAAA,IAED;AAEA,aAAS,iBAAkB,WAAW,UAAW;AAIhD,UAAK,CAAE,UAAY;AAEnB,YAAM,QAAQ,UAAU;AACxB,YAAM,WAAW,KAAK,MAAO,MAAM,SAAS,CAAE;AAC9C,UAAI,SAAS;AACb,eAAU,IAAI,GAAG,IAAI,UAAU,KAAO;AAErC,cAAMI,KAAI,MAAO,MAAO;AACxB,cAAMC,KAAI,MAAO,SAAS,CAAE;AAC5B,cAAM,IAAI,MAAO,SAAS,CAAE;AAE5B,cAAO,MAAO,IAAI,MAAO,SAAS,CAAE;AACpC,cAAO,SAAS,CAAE,IAAI,MAAO,SAAS,CAAE;AACxC,cAAO,SAAS,CAAE,IAAI,MAAO,SAAS,CAAE;AAExC,cAAO,SAAS,CAAE,IAAID;AACtB,cAAO,SAAS,CAAE,IAAIC;AACtB,cAAO,SAAS,CAAE,IAAI;AAEtB,kBAAU,WAAW;AAAA,MAEtB;AAAA,IAED;AAIA,UAAM,iBAAiB,CAAC;AACxB,UAAM,kBAAkB,CAAC;AACzB,UAAM,sBAAsB,CAAC;AAE7B,WAAO,kBAAmB,IAAK;AAC/B,UAAM,eAAe,IAAI,QAAQ;AAEjC,WAAO,SAAU,CAAAC,OAAK;AAErB,UAAKA,GAAE,SAASA,GAAE,gBAAiB;AAElC,cAAM,WAAWA,GAAE,SAAS,IAAI;AAEhC,cAAM,WAAWA,GAAE,SAAS,MAAM;AAClC,cAAM,mBAAmBA,GAAE,YAAY,YAAY,IAAI;AACvD,YAAK,kBAAmB;AAEvB,2BAAkB,SAAS,WAAW,UAAU,QAAS;AACzD,2BAAkB,SAAS,WAAW,QAAQ,QAAS;AAAA,QAExD;AAEA,iBAAS,aAAcA,GAAE,WAAY;AAErC,YAAKA,GAAE,mBAAoB;AAE1B,mBAAS,WAAW,SAAS,aAAcA,GAAE,WAAY;AACzD,mBAAS,WAAW,SAAS,aAAcA,GAAE,WAAY;AACzD,uBAAa,gBAAiBA,GAAE,WAAY;AAC5C,mBAAS,WAAW,UAAU,kBAAmB,YAAa;AAAA,QAE/D;AAEA,cAAM,aAAaA,GAAE,SAAS,iBAAmBA,GAAE,oBAAoB,sBAAsB;AAE7F,YAAK,MAAM,QAASA,GAAE,QAAS,GAAI;AAElC,qBAAY,cAAc,SAAS,QAAS;AAE3C,kBAAM,QAAQ,SAAS,OAAQ,UAAW;AAC1C,kBAAM,MAAMA,GAAE,SAAU,MAAM,aAAc;AAC5C,kBAAM,cAAc,aAAc,UAAU,OAAO,UAAUA,GAAE,iBAAkB;AACjF,wBAAa,KAAK,aAAa,UAAW;AAAA,UAE3C;AAAA,QAED,OAAO;AAEN,sBAAaA,GAAE,UAAU,UAAU,UAAW;AAAA,QAE/C;AAAA,MAED;AAAA,IAED,CAAE;AAIF,UAAM,eAAe,IAAI,MAAM;AAE/B,UAAM,mBAAmB,OAAO,KAAM,cAAe;AACrD,eAAY,mBAAmB,kBAAmB;AAEjD,YAAM,eAAe,eAAgB,eAAgB;AACrD,YAAM,iBAAiB,gBAAiB,aAAa,GAAI;AACzD,mBAAa,IAAK,IAAI,KAAM,gBAAgB,aAAa,GAAI,CAAE;AAAA,IAEhE;AAEA,UAAM,oBAAoB,OAAO,KAAM,eAAgB;AACvD,eAAY,oBAAoB,mBAAoB;AAEnD,YAAM,eAAe,gBAAiB,gBAAiB;AACvD,YAAM,iBAAiB,gBAAiB,aAAa,GAAI;AACzD,mBAAa,IAAK,IAAI,aAAc,gBAAgB,aAAa,GAAI,CAAE;AAAA,IAExE;AAEA,UAAM,wBAAwB,OAAO,KAAM,mBAAoB;AAC/D,eAAY,wBAAwB,uBAAwB;AAE3D,YAAM,mBAAmB,oBAAqB,oBAAqB;AACnE,YAAM,iBAAiB,gBAAiB,iBAAiB,GAAI;AAC7D,YAAM,YAAY,IAAI,aAAc,gBAAgB,iBAAiB,GAAI;AACzE,gBAAU,oBAAoB;AAC9B,mBAAa,IAAK,SAAU;AAAA,IAE7B;AAEA,iBAAa,SAAS,mBAAmB;AACzC,iBAAa,SAAS,uBAAuB;AAE7C,WAAO;AAAA,EAER;AAED;;;ACvMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,IAAMC,UAAsB,IAAI,MAAM;AACtC,IAAMC,WAAuB,IAAI,QAAQ;AAEzC,SAAS,8BAA+B,eAAgB;AAEvD,QAAM,QAAQ,IAAI,MAAM;AAExB,QAAM,QAAQ,cAAc;AAC5B,QAAM,WAAW,cAAc;AAC/B,QAAM,WAAW,cAAc;AAE/B,WAAU,IAAI,GAAG,IAAI,OAAO,KAAO;AAElC,UAAM,OAAO,IAAI,KAAM,UAAU,QAAS;AAE1C,kBAAc,YAAa,GAAG,KAAK,MAAO;AAC1C,SAAK,OAAO,UAAW,KAAK,UAAU,KAAK,YAAY,KAAK,KAAM;AAElE,UAAM,IAAK,IAAK;AAAA,EAEjB;AAEA,QAAM,KAAM,aAAc;AAC1B,QAAM,kBAAkB;AAExB,SAAO;AAER;AAEA,SAAS,kCAAmC,MAAO;AAElD,MAAK,MAAM,QAAS,KAAK,QAAS,MAAM,OAAQ;AAE/C,YAAQ,KAAM,iGAAkG;AAChH,WAAO;AAAA,EAER;AAEA,QAAM,SAAS,IAAI,MAAM;AACzB,SAAO,KAAM,IAAK;AAIlB,QAAM,WAAW,YAAa,KAAK,QAAS;AAE5C,QAAMC,SAAQ,SAAS;AACvB,QAAM,SAAS,SAAS;AACxB,QAAM,iBAAiB,OAAO,KAAM,SAAS,UAAW;AAIxD,WAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,UAAM,QAAQ,OAAQ,CAAE;AAExB,UAAM,QAAQ,MAAM;AACpB,UAAM,MAAM,QAAQ,MAAM;AAE1B,UAAM,cAAc,IAAI,eAAe;AACvC,UAAM,cAAc,KAAK,SAAU,MAAM,aAAc;AAIvD,aAAU,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAO;AAElD,YAAMC,QAAO,eAAgB,CAAE;AAC/B,YAAM,YAAY,SAAS,WAAYA,KAAK;AAC5C,YAAM,WAAW,UAAU;AAE3B,YAAM,YAAY,MAAM,QAAQ;AAChC,YAAM,OAAO,UAAU,MAAM;AAE7B,YAAM,WAAW,IAAI,KAAM,SAAU;AACrC,YAAM,eAAe,IAAI,gBAAiB,UAAU,QAAS;AAE7D,eAAUC,KAAI,OAAOC,KAAI,GAAGD,KAAI,KAAKA,MAAMC,MAAO;AAEjD,cAAM,MAAMH,OAAM,KAAME,EAAE;AAE1B,YAAK,YAAY,EAAI,cAAa,KAAMC,IAAG,UAAU,KAAM,GAAI,CAAE;AACjE,YAAK,YAAY,EAAI,cAAa,KAAMA,IAAG,UAAU,KAAM,GAAI,CAAE;AACjE,YAAK,YAAY,EAAI,cAAa,KAAMA,IAAG,UAAU,KAAM,GAAI,CAAE;AACjE,YAAK,YAAY,EAAI,cAAa,KAAMA,IAAG,UAAU,KAAM,GAAI,CAAE;AAAA,MAElE;AAGA,kBAAY,aAAcF,OAAM,YAAa;AAAA,IAE9C;AAEA,UAAM,UAAU,IAAI,KAAM,aAAa,WAAY;AACnD,WAAO,IAAK,OAAQ;AAAA,EAErB;AAEA,SAAO;AAER;AAEA,SAAS,0BAA2B,UAAU,WAAY;AAEzD,QAAM,QAAQ,IAAI,MAAM;AAExB,WAAU,IAAI,GAAGG,KAAI,UAAU,QAAQ,IAAIA,IAAG,KAAO;AAEpD,UAAM,IAAK,IAAI,KAAM,UAAU,UAAW,CAAE,CAAE,CAAE;AAAA,EAEjD;AAEA,SAAO;AAER;AAEA,SAAS,eAAgB,QAAQ,MAAM,cAAe;AAErD,MAAIC,SAAQ;AACZ,QAAM,SAAS,IAAI,QAAQ;AAE3B,SAAO,kBAAmB,MAAM,IAAK;AAErC,SAAO,gBAAiB,CAAE,UAAW;AAEpC,UAAM,EAAE,SAAS,IAAI;AAErB,QAAK,aAAa,QAAY;AAE7B,YAAM,EAAE,UAAAC,UAAS,IAAI,SAAS;AAE9B,UAAKA,cAAa,QAAY;AAE7B,iBAAU,IAAI,GAAGF,KAAIE,UAAS,OAAO,IAAIF,IAAG,KAAO;AAElD,cAAK,MAAM,QAAS;AAEnB,kBAAM,kBAAmB,GAAG,MAAO;AAAA,UAEpC,OAAO;AAEN,mBAAO,oBAAqBE,WAAU,CAAE;AAAA,UAEzC;AAEA,cAAK,CAAE,MAAM,eAAgB;AAE5B,mBAAO,aAAc,MAAM,WAAY;AAAA,UAExC;AAEA,UAAAD,SAAQ,KAAMA,QAAO,MAAO;AAAA,QAE7B;AAAA,MAED;AAAA,IAED;AAAA,EAED,CAAE;AAEF,SAAOA;AAER;AAMA,SAAS,kBAAmB,MAAM,WAAY;AAI7C,QAAM,oBAAoB,mBAAoB,KAAK,cAAe;AAClE,QAAM,mBAAmB,KAAK,gBAAgB,mBAAoB,KAAK,aAAc,IAAI;AAEzF,QAAM,gBAAgB,oBAAI,IAAI;AAE9B,aAAYJ,SAAQ,KAAK,SAAS,YAAa;AAE9C,UAAM,YAAY,KAAK,SAAS,WAAYA,KAAK;AAEjD,QAAK,UAAU,4BAA6B;AAE3C,oBAAc,IAAK,WAAW,mBAAoB,SAAU,CAAE;AAAA,IAE/D;AAAA,EAED;AAKA,QAAM,SAAS,CAAC;AAEhB,WAAU,IAAI,GAAG,IAAI,KAAK,OAAO,IAAO,QAAO,KAAM,CAAE;AAEvD,SAAO,KAAM,SAAU;AAKvB,WAAU,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAO;AAE1C,UAAM,WAAW,OAAQ,CAAE;AAE3B,IAAAF,SAAQ,UAAW,kBAAkB,OAAO,WAAW,KAAK,eAAe,QAAS;AACpF,IAAAA,SAAQ,QAAS,KAAK,eAAe,OAAO,IAAI,KAAK,eAAe,QAAS;AAE7E,QAAK,KAAK,eAAgB;AAEzB,MAAAD,QAAO,UAAW,iBAAiB,OAAO,WAAW,KAAK,cAAc,QAAS;AACjF,MAAAA,QAAO,QAAS,KAAK,cAAc,OAAO,IAAI,KAAK,cAAc,QAAS;AAAA,IAE3E;AAEA,eAAYG,SAAQ,KAAK,SAAS,YAAa;AAE9C,YAAM,YAAY,KAAK,SAAS,WAAYA,KAAK;AAEjD,UAAK,UAAU,4BAA6B;AAE3C,cAAM,eAAe,cAAc,IAAK,SAAU;AAElD,kBAAU,KAAM,GAAG,aAAa,KAAM,QAAS,CAAE;AACjD,YAAK,UAAU,WAAW,EAAI,WAAU,KAAM,GAAG,aAAa,KAAM,QAAS,CAAE;AAC/E,YAAK,UAAU,WAAW,EAAI,WAAU,KAAM,GAAG,aAAa,KAAM,QAAS,CAAE;AAC/E,YAAK,UAAU,WAAW,EAAI,WAAU,KAAM,GAAG,aAAa,KAAM,QAAS,CAAE;AAAA,MAEhF;AAAA,IAED;AAAA,EAED;AAED;AAMA,UAAU,kBAAmB,QAAS;AAErC,QAAM;AAEN,QAAM,WAAW,OAAO;AAExB,WAAU,IAAI,GAAGG,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,WAAO,kBAAmB,SAAU,CAAE,CAAE;AAAA,EAEzC;AAED;AAMA,UAAU,yBAA0B,QAAS;AAE5C,MAAK,OAAO,YAAY,MAAQ;AAEhC,QAAM;AAEN,QAAM,WAAW,OAAO;AAExB,WAAU,IAAI,GAAGA,KAAI,SAAS,QAAQ,IAAIA,IAAG,KAAO;AAEnD,WAAO,yBAA0B,SAAU,CAAE,CAAE;AAAA,EAEhD;AAED;AAMA,UAAU,2BAA4B,QAAS;AAE9C,QAAMG,UAAS,OAAO;AAEtB,MAAKA,YAAW,MAAO;AAEtB,UAAMA;AAEN,WAAO,2BAA4BA,OAAO;AAAA,EAE3C;AAED;;;ACpQA,IAAM,kBAAN,MAAsB;AAAA,EAErB,YAAa,OAAQ;AAGpB,UAAM,QAAQ;AACd,UAAM,gBAAkB,MAAM,SAAS,UAAa,MAAM,SAAS;AACnE,QAAI;AAGJ,UAAM,QAAQ;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,IACT;AAEA,UAAM,SAAS,IAAI,mBAAoB,OAAO,aAAa,IAAK,OAAO,aAAa,GAAG,OAAO,cAAc,GAAG,OAAO,cAAc,IAAK,GAAG,EAAG;AAC/I,WAAO,SAAS,IAAK,GAAG,GAAG,CAAE;AAC7B,UAAM,QAAQ,IAAI,MAAM;AAGxB,UAAM,SAAS;AAEf,UAAM,WAAW,cAAc,MAAO,OAAO,QAAS;AACtD,UAAM,WAAW,IAAI,eAAgB;AAAA,MACpC;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,IACxB,CAAE;AACF,UAAM,QAAQ,IAAI,cAAe,MAAM,OAAO,MAAM,MAAO;AAC3D,UAAM,OAAO,IAAI,KAAM,OAAO,QAAS;AAEvC,UAAM,IAAK,IAAK;AAIhB,QAAI,aAAa;AAEjB,QAAK,eAAgB;AAEpB,oBAAc,SAAS,cAAe,QAAS;AAE/C,YAAM,UAAU,YAAY,WAAY,IAAK;AAC7C,cAAQ,OAAO;AAEf,YAAM,aAAa,QAAQ,YAAa,MAAM,IAAK,EAAE;AACrD,kBAAY,QAAQ;AACpB,kBAAY,SAAS;AAErB,cAAQ,OAAO;AACf,cAAQ,YAAY;AACpB,cAAQ,SAAU,MAAM,MAAM,GAAG,EAAG;AAEpC,YAAM,eAAe,IAAI,QAAS,WAAY;AAC9C,mBAAa,YAAY;AACzB,mBAAa,YAAY;AACzB,mBAAa,cAAc;AAE3B,YAAM,gBAAgB,IAAI,kBAAmB,EAAE,KAAK,cAAc,MAAM,WAAW,CAAE;AACrF,oBAAc,cAAc;AAE5B,YAAM,aAAa,IAAI,cAAe,YAAY,OAAO,YAAY,MAAO;AAC5E,kBAAY,IAAI,KAAM,YAAY,aAAc;AAEhD,YAAM,IAAK,SAAU;AAAA,IAEtB;AAGA,aAAS,gBAAgB;AAExB,YAAM,SAAS,IAAK,MAAM,SAAS,GAAG,MAAM,SAAS,CAAE;AAAA,IAExD;AAIA,SAAK,UAAU;AAGf,SAAK,OAAO;AAAA,MACX,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,KAAK,SAAWC,QAAOC,SAAS;AAE/B,aAAK,QAAQD;AACb,aAAK,SAASC;AAEd,aAAK,MAAM,IAAK,KAAK,QAAQ,MAAM,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAE;AAGxE,sBAAc;AAAA,MAEf;AAAA,IACD;AAGA,SAAK,WAAW;AAAA,MACf,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,KAAK,SAAWC,IAAGC,IAAI;AAEtB,aAAK,IAAID;AACT,aAAK,IAAIC;AAET,cAAMH,SAAQ,MAAM,KAAK;AACzB,cAAMC,UAAS,MAAM,KAAK;AAE1B,aAAK,SAAS,IAAK,CAAE,OAAO,aAAa,IAAID,SAAQ,IAAI,KAAK,GAAG,OAAO,cAAc,IAAIC,UAAS,IAAI,KAAK,GAAG,CAAE;AAEjH,YAAK,cAAgB,WAAU,SAAS,IAAK,KAAK,SAAS,GAAG,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,SAAS,GAAG,CAAE;AAAA,MAEnI;AAAA,IACD;AAEA,SAAK,SAAS,SAAWG,WAAW;AAEnC,UAAK,KAAK,SAAU;AAOnB,iBAAS,SAAS,QAAQ,MAAM,OAAO,IAAI;AAE3C,+BAAuBA,UAAS;AAChC,QAAAA,UAAS,YAAY;AACrB,QAAAA,UAAS,WAAW;AACpB,QAAAA,UAAS,OAAQ,OAAO,MAAO;AAC/B,QAAAA,UAAS,YAAY;AAAA,MAEtB;AAAA,IAED;AAEA,SAAK,wBAAwB,WAAY;AAExC,UAAK,KAAK,SAAU;AAElB,eAAO,OAAO,OAAO,aAAa;AAClC,eAAO,QAAQ,OAAO,aAAa;AACnC,eAAO,MAAM,OAAO,cAAc;AAClC,eAAO,SAAS,OAAO,cAAc;AACrC,eAAO,uBAAuB;AAE9B,aAAK,OAAO;AAAA,MAEd;AAAA,IAED;AAEA,SAAK,SAAS,WAAY;AAEzB,WAAK,SAAS,IAAK,KAAK,SAAS,GAAG,KAAK,SAAS,CAAE;AACpD,WAAK,KAAK,IAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAO;AAAA,IAElD;AAGA,SAAK,OAAO;AAAA,EAEb;AAED;;;AC9MA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,SAAS,SAAU,QAAQ,QAAQ,UAAU,CAAC,GAAI;AAEjD,QAAM,MAAM,IAAI,QAAQ,GACvB,OAAO,IAAI,WAAW,GACtBC,SAAQ,IAAI,QAAQ,GACpB,iBAAiB,IAAI,QAAQ,GAC7B,iBAAiB,IAAI,QAAQ,GAC7B,eAAe,IAAI,QAAQ;AAE5B,UAAQ,iBAAiB,QAAQ,mBAAmB,SAAY,QAAQ,iBAAiB;AACzF,UAAQ,mBAAmB,QAAQ,qBAAqB,SAAY,QAAQ,mBAAmB;AAC/F,UAAQ,sBAAsB,QAAQ,wBAAwB,SAAY,QAAQ,sBAAsB;AACxG,UAAQ,kBAAkB,QAAQ,oBAAoB,SAAY,QAAQ,kBAAkB;AAC5F,UAAQ,MAAM,QAAQ,QAAQ,SAAY,QAAQ,MAAM;AACxD,UAAQ,QAAQ,QAAQ,SAAS,CAAC;AAElC,QAAM,cAAc,OAAO,aAAa,OAAO,SAAS,QAAQ,SAAU,MAAO,GAChF,QAAQ,OAAO,aAAa,OAAO,SAAS,QAAQ,SAAU,MAAO;AAEtE,MAAI,WACH,MAAMC,OAAM,QACZ;AAID,MAAK,OAAO,YAAa;AAExB,WAAO,SAAS,KAAK;AAAA,EAEtB,OAAO;AAEN,YAAQ,kBAAkB;AAC1B,YAAQ,iBAAiB;AAAA,EAE1B;AAEA,MAAK,QAAQ,kBAAmB;AAE/B,oBAAgB,CAAC;AAEjB,aAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAO;AAEzC,oBAAc,KAAM,MAAO,CAAE,EAAE,SAAS,MAAM,CAAE;AAAA,IAEjD;AAAA,EAED;AAEA,MAAK,QAAQ,gBAAiB;AAI7B,WAAO,kBAAkB;AAEzB,WAAO,YAAY,SAAS;AAI5B,aAAU,IAAI,GAAG,IAAI,OAAO,SAAS,QAAQ,EAAG,GAAI;AAEnD,aAAO,SAAU,CAAE,EAAE,kBAAmB,IAAK;AAAA,IAE9C;AAAA,EAED;AAEA,MAAK,QAAQ,SAAU;AAEtB,gBAAY,CAAC;AAEb,aAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAG,GAAI;AAEzC,aAAO,MAAO,CAAE;AAChB,MAAAA,QAAO,QAAQ,MAAO,KAAK,IAAK,KAAK,KAAK;AAE1C,UAAK,QAAQ,QAASA,KAAK,GAAI;AAE9B,aAAK,OAAO,SAAU,QAAQ,QAASA,KAAK,CAAE;AAE9C,aAAK,OAAO,UAAW,KAAK,UAAU,KAAK,YAAY,KAAK,KAAM;AAElE,aAAK,kBAAkB;AAAA,MAExB;AAEA,gBAAU,KAAM,KAAK,YAAY,MAAM,CAAE;AAAA,IAE1C;AAAA,EAED;AAEA,WAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAG,GAAI;AAEzC,WAAO,MAAO,CAAE;AAChB,IAAAA,QAAO,QAAQ,MAAO,KAAK,IAAK,KAAK,KAAK;AAE1C,aAAS,cAAeA,OAAM,WAAY;AAE1C,iBAAa,KAAM,KAAK,WAAY;AAEpC,QAAK,QAAS;AAEb,aAAO,kBAAkB;AAEzB,UAAK,QAAQ,iBAAkB;AAE9B,uBAAe,KAAM,OAAO,WAAY;AAAA,MAEzC,OAAO;AAEN,uBAAe,KAAM,OAAO,WAAY,EAAE,OAAO;AACjD,uBAAe,SAAU,OAAO,WAAY;AAAA,MAE7C;AAIA,MAAAD,OAAM,mBAAoB,cAAe;AACzC,qBAAe,MAAOA,OAAM,IAAK,IAAIA,OAAM,GAAG,IAAIA,OAAM,GAAG,IAAIA,OAAM,CAAE,CAAE;AAIzE,mBAAa,2BAA4B,KAAK,sBAAuB,cAAe,CAAE;AAEtF,UAAK,OAAO,YAAa;AAExB,cAAM,YAAY,MAAM,QAAS,IAAK,GACrC,cAAc,YAAY,UAAW,SAAU,IAAI,eAAe,KAAM,OAAO,SAAS,aAAc,SAAU,CAAE,EAAE,OAAO;AAE5H,qBAAa,SAAU,WAAY;AAAA,MAEpC;AAEA,mBAAa,aAAc,cAAe;AAAA,IAE3C;AAEA,QAAK,KAAK,UAAU,KAAK,OAAO,QAAS;AAExC,WAAK,OAAO,KAAM,KAAK,OAAO,WAAY,EAAE,OAAO;AACnD,WAAK,OAAO,SAAU,YAAa;AAAA,IAEpC,OAAO;AAEN,WAAK,OAAO,KAAM,YAAa;AAAA,IAEhC;AAEA,QAAK,QAAQ,uBAAuBC,UAAS,QAAQ,KAAM;AAE1D,WAAK,OAAO,YAAa,IAAI,IAAK,GAAG,KAAK,SAAS,GAAG,CAAE,CAAE;AAAA,IAE3D;AAEA,SAAK,OAAO,UAAW,KAAK,UAAU,KAAK,YAAY,KAAK,KAAM;AAElE,SAAK,kBAAkB;AAAA,EAExB;AAEA,MAAK,QAAQ,kBAAmB;AAE/B,aAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAG,GAAI;AAEzC,aAAO,MAAO,CAAE;AAChB,MAAAA,QAAO,QAAQ,MAAO,KAAK,IAAK,KAAK,KAAK;AAE1C,UAAKA,UAAS,QAAQ,KAAM;AAE3B,aAAK,SAAS,KAAM,cAAe,CAAE,CAAE;AAAA,MAExC;AAAA,IAED;AAAA,EAED;AAEA,MAAK,QAAQ,gBAAiB;AAI7B,WAAO,kBAAmB,IAAK;AAAA,EAEhC;AAED;AAEA,SAAS,aAAc,QAAQ,QAAQ,MAAM,UAAU,CAAC,GAAI;AAE3D,UAAQ,wBAAwB,QAAQ,0BAA0B,SAAY,QAAQ,wBAAwB;AAE9G,UAAQ,MAAM,QAAQ,QAAQ,SAAY,QAAQ,MAAQ,KAAK,IAAK,GAAG,KAAK,OAAO,IAAK,WAAS,MAAM,MAAM,MAAO,CAAE,IAAI,KAAK;AAC/H,UAAQ,QAAQ,QAAQ,SAAS,CAAC;AAElC,MAAK,CAAE,OAAO,YAAa;AAE1B,aAAS,sBAAuB,MAAO;AAAA,EAExC;AAEA,QAAM,YAAY,KAAK,MAAO,KAAK,YAAa,QAAQ,MAAM,OAAS,GAAK,GAC3E,QAAQ,KAAK,YAAa,YAAY,IACtC,kBAAkB,CAAC,GACnB,QAAQ,IAAI,eAAgB,MAAO,GACnC,QAAQ,SAAU,OAAO,QAAS,GAClC,YAAY,CAAC;AACd,MAAI,gBACH,MAAM,QAAQ,UACdA;AAED,QAAM,WAAY,IAAK,EAAE,KAAK;AAC9B,QAAM,OAAQ,CAAE;AAEhB,SAAO,kBAAkB;AAEzB,WAAU,IAAI,GAAG,IAAI,WAAW,EAAG,GAAI;AAEtC,UAAMC,QAAO,IAAI;AAEjB,aAAU,QAAQ,QAAQ,OAAQ;AAElC,aAAU,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAG,GAAI;AAEzC,MAAAD,QAAO,QAAQ,MAAO,MAAO,CAAE,EAAE,IAAK,KAAK,MAAO,CAAE,EAAE;AAEtD,eAAS,cAAeA,OAAM,OAAO,QAAS;AAE9C,UAAK,QAAS;AAEb,eAAO,MAAO,CAAE;AAChB,mBAAW,UAAW,CAAE,IAAI,UAAW,CAAE,KAAK,EAAE,KAAW;AAE3D,YAAK,QAAQ,QAAQA,OAAO;AAE3B,cAAK,CAAE,SAAS,KAAM;AAErB,qBAAS,MAAM;AAAA,cACd,OAAO,IAAI,aAAc,SAAU;AAAA,cACnC,QAAQ,IAAI,aAAc,YAAY,CAAE;AAAA,YACzC;AAAA,UAED;AAEA,cAAK,QAAQ,uBAAwB;AAEpC,gBAAK,MAAM,GAAI;AAEd,+BAAiB,KAAK,SAAS,MAAM;AAAA,YAEtC;AAEA,iBAAK,SAAS,IAAK,cAAe;AAAA,UAEnC;AAEA,mBAAS,IAAI,MAAO,CAAE,IAAIC;AAE1B,eAAK,SAAS,QAAS,SAAS,IAAI,QAAQ,IAAI,CAAE;AAAA,QAEnD;AAEA,YAAK,CAAE,SAAS,MAAO;AAEtB,mBAAS,OAAO;AAAA,YACf,OAAO,IAAI,aAAc,SAAU;AAAA,YACnC,QAAQ,IAAI,aAAc,YAAY,CAAE;AAAA,UACzC;AAAA,QAED;AAEA,iBAAS,KAAK,MAAO,CAAE,IAAIA;AAE3B,aAAK,WAAW,QAAS,SAAS,KAAK,QAAQ,IAAI,CAAE;AAAA,MAEtD;AAAA,IAED;AAEA,QAAK,MAAM,YAAY,GAAI;AAI1B,YAAM,OAAQ,QAAQ,IAAU;AAAA,IAEjC,OAAO;AAEN,YAAM,OAAQ,KAAM;AAAA,IAErB;AAEA,WAAO,kBAAkB;AAAA,EAE1B;AAEA,WAAU,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAG,GAAI;AAE7C,eAAW,UAAW,CAAE;AAExB,QAAK,UAAW;AAEf,UAAK,SAAS,KAAM;AAEnB,wBAAgB,KAAM,IAAI;AAAA,UACzB,YAAY,SAAS,KAAK,OAAO;AAAA,UACjC,SAAS,IAAI;AAAA,UACb,SAAS,IAAI;AAAA,QACd,CAAE;AAAA,MAEH;AAEA,sBAAgB,KAAM,IAAI;AAAA,QACzB,YAAY,SAAS,KAAK,OAAO;AAAA,QACjC,SAAS,KAAK;AAAA,QACd,SAAS,KAAK;AAAA,MACf,CAAE;AAAA,IAEH;AAAA,EAED;AAEA,QAAM,cAAe,IAAK;AAE1B,SAAO,IAAI,cAAe,KAAK,MAAM,IAAK,eAAgB;AAE3D;AAEA,SAAS,MAAO,QAAS;AAExB,QAAM,eAAe,oBAAI,IAAI;AAC7B,QAAM,cAAc,oBAAI,IAAI;AAE5B,QAAMC,SAAQ,OAAO,MAAM;AAE3B,mBAAkB,QAAQA,QAAO,SAAW,YAAY,YAAa;AAEpE,iBAAa,IAAK,YAAY,UAAW;AACzC,gBAAY,IAAK,YAAY,UAAW;AAAA,EAEzC,CAAE;AAEF,EAAAA,OAAM,SAAU,SAAW,MAAO;AAEjC,QAAK,CAAE,KAAK,cAAgB;AAE5B,UAAM,aAAa;AACnB,UAAM,aAAa,aAAa,IAAK,IAAK;AAC1C,UAAM,cAAc,WAAW,SAAS;AAExC,eAAW,WAAW,WAAW,SAAS,MAAM;AAChD,eAAW,WAAW,KAAM,WAAW,UAAW;AAElD,eAAW,SAAS,QAAQ,YAAY,IAAK,SAAW,MAAO;AAE9D,aAAO,YAAY,IAAK,IAAK;AAAA,IAE9B,CAAE;AAEF,eAAW,KAAM,WAAW,UAAU,WAAW,UAAW;AAAA,EAE7D,CAAE;AAEF,SAAOA;AAER;AAIA,SAAS,cAAeF,OAAM,UAAW;AAExC,WAAU,IAAI,GAAG,QAAQ,SAAU,QAAS,GAAG,IAAI,MAAM,QAAQ,KAAO;AAEvE,QAAKA,UAAS,MAAO,CAAE,EAAE;AAExB,aAAO,MAAO,CAAE;AAAA,EAElB;AAED;AAEA,SAAS,SAAU,UAAW;AAE7B,SAAO,MAAM,QAAS,QAAS,IAAI,WAAW,SAAS;AAExD;AAGA,SAAS,sBAAuB,UAAW;AAE1C,QAAM,SAAS,IAAI,eAAgB,SAAS,MAAO,CAAE,CAAE;AACvD,SAAO,WAAW;AAElB,SAAO;AAER;AAEA,SAAS,iBAAkBG,IAAGC,IAAG,UAAW;AAE3C,WAAUD,IAAGC,EAAE;AAEf,WAAU,IAAI,GAAG,IAAID,GAAE,SAAS,QAAQ,KAAO;AAE9C,qBAAkBA,GAAE,SAAU,CAAE,GAAGC,GAAE,SAAU,CAAE,GAAG,QAAS;AAAA,EAE9D;AAED;;;ACjaA;AAAA;AAAA;AAAA;AAMA,IAAM,QAAQ;AACd,IAAM,UAAU;AAChB,IAAM,WAAW,KAAK;AACtB,IAAM,WAAW,KAAK;AACtB,IAAM,UAAU,WAAW;AAC3B,IAAM,aAAa,UAAU;AAE7B,IAAM,OAAO,IAAI,MAAO,UAAW;AACnC,IAAM,cAAc,IAAI,aAAe,aAAa,KAAM,WAAW,CAAE;AAEvE,IAAI,IAAI;AACR,SAAU,IAAI,GAAG,IAAM,aAAa,GAAK,KAAO;AAE/C,OAAM,CAAE,IAAI,IAAI,YAAa,aAAa,GAAG,QAAS;AACtD,OAAK,WAAW;AAEjB;AAEA,IAAM,aAAa,CAAE,OAAQ;AAEtB,IAAM,YAAY,CAAE,KAAK,QAAS;AAExC,QAAM,MAAM,IAAI;AAEhB,QAAM,UAAU,OAAO,CAAC;AACxB,QAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,YAAa,GAAI;AACpD,QAAM,MAAM,QAAQ,OAAO;AAE3B,QAAMC,QAAO,CAAE,KAAK,GAAI;AAExB,MAAI,SAAS,YAAY;AAEzB,MAAK,QAAQ,UAAW;AAEvB,cAAU,CAAEC,IAAGC,OAAOD,KAAIC;AAC1B,iBAAa,CAAE,QAAS;AAEvB,eAAU,IAAI,WAAW,GAAG,KAAK,GAAG;AACnC,YAAK,CAAE,KAAK,IAAK,IAAI,CAAE;AAAA,IAEzB;AAEA,cAAU,CAAE,OAAO,OAAO,UAAW;AAEpC,UAAI,OAAO;AACX,eAAU,IAAI,SAAS,KAAK,GAAG,KAAO;AAErC,cAAM,MAAM,MAAO,CAAE,GAAG,OAAO,MAAM;AACrC,YAAK,QAAQ,GAAI;AAEhB,cAAK,OAAO;AACX,2BAAgB,QAAQ,GAAG,QAAQ,MAAM,IAAK;AAAA;AAE9C,+BAAoB,QAAQ,GAAG,QAAQ,MAAM,IAAK;AACnD,iBAAO;AAAA,QAER;AAAA,MAED;AAAA,IAED;AAAA,EAED,OAAO;AAEN,cAAU,CAAED,IAAGC,OAAOD,KAAIC;AAC1B,iBAAa,CAAE,QAAS;AAEvB,eAAU,IAAI,GAAG,IAAI,UAAU;AAC9B,YAAK,CAAE,KAAK,IAAK,IAAI,CAAE;AAAA,IAEzB;AAEA,cAAU,CAAE,OAAO,OAAO,UAAW;AAEpC,UAAI,OAAO;AACX,eAAU,IAAI,GAAG,IAAI,UAAU,KAAO;AAErC,cAAM,MAAM,MAAO,CAAE,GAAG,OAAO,MAAM;AACrC,YAAK,QAAQ,GAAI;AAEhB,cAAK,OAAO;AACX,2BAAgB,QAAQ,GAAG,QAAQ,MAAM,IAAK;AAAA;AAE9C,+BAAoB,QAAQ,GAAG,QAAQ,MAAM,IAAK;AACnD,iBAAO;AAAA,QAER;AAAA,MAED;AAAA,IAED;AAAA,EAED;AAEA,QAAM,qBAAqB,CAAE,OAAO,OAAOC,SAAS;AAEnD,UAAMF,KAAID,MAAM,QAAQ,CAAE;AAC1B,UAAME,KAAIF,MAAQ,QAAQ,IAAM,CAAE;AAElC,aAAU,IAAI,QAAQ,GAAG,IAAI,QAAQG,MAAK,KAAO;AAEhD,YAAMC,KAAIH,GAAG,CAAE,GAAGI,KAAI,IAAKD,EAAE,MAAM;AACnC,UAAI,IAAI;AACR,aAAQ,IAAI,OAAQ;AAEnB,YAAK,QAAS,IAAKH,GAAG,IAAI,CAAE,CAAE,MAAM,GAAGI,EAAE;AACxC,UAAAJ,GAAG,CAAE,IAAIA,GAAG,EAAG,CAAE;AAAA;AAEjB;AAAA,MAEF;AAEA,MAAAA,GAAG,CAAE,IAAIG;AAAA,IAEV;AAEA,SAAO,QAAQ,MAAO,GAAI;AAEzB,eAAU,IAAI,OAAO,IAAI,QAAQD,MAAK;AACrC,QAAAD,GAAG,CAAE,IAAID,GAAG,CAAE;AAAA,IAEhB;AAAA,EAED;AAEA,QAAM,iBAAiB,CAAE,OAAO,OAAOE,SAAS;AAE/C,UAAMF,KAAID,MAAM,QAAQ,CAAE;AAC1B,UAAME,KAAIF,MAAQ,QAAQ,IAAM,CAAE;AAElC,UAAM,QAAU,IAAI,SAAW;AAC/B,UAAM,MAAM,QAAQG;AAEpB,UAAM,QAAQ,KAAM,KAAM;AAC1B,UAAM,MAAM,KAAM,QAAQ,CAAE;AAE5B,QAAI,KAAM,CAAE;AAEZ,aAAU,IAAI,OAAO,IAAI,KAAK;AAC7B,UAAO,IAAKF,GAAG,CAAE,CAAE,MAAM,QAAU,OAAQ;AAE5C,eAAY,GAAI;AAEhB,UAAM,IAAK,GAAI;AAEf,aAAU,IAAI,MAAM,GAAG,KAAK,OAAO;AAClC,MAAAC,GAAG,QAAQ,EAAG,IAAO,IAAKD,GAAG,CAAE,CAAE,MAAM,QAAU,OAAQ,CAAE,IAAIA,GAAG,CAAE;AAErE,QAAK,SAAS,aAAa,EAAI;AAE/B,YAAS,OAAO,OAAO,KAAM;AAAA,EAE9B;AAEA,iBAAgB,GAAG,GAAG,GAAI;AAE3B;;;ACtJA,SAAS,SAAU,UAAUK,QAAO,MAAO;AAI1C,QAAM,MAAM;AACZ,QAAMC,KAAI,IAAI,QAAQ;AACtB,QAAMC,KAAI,IAAI,QAAQ;AAEtB,QAAM,MAAM;AAAA,IACX,IAAI,QAAQ;AAAA,IACZ,IAAI,QAAQ;AAAA,IACZ,IAAI,QAAQ;AAAA,EACb;AAEA,QAAM,OAAO,CAAC;AAEd,QAAM,SAAS,SAAS,cAAe,QAAS;AAChD,QAAMC,SAAQH;AACd,QAAMI,UAASJ;AACf,SAAO,QAAQG;AACf,SAAO,SAASC;AAEhB,QAAM,MAAM,OAAO,WAAY,IAAK;AACpC,MAAI,YAAY;AAChB,MAAI,cAAc;AAClB,MAAI,YAAY;AAIhB,MAAI,YAAY;AAChB,MAAI,SAAU,GAAG,GAAGD,QAAOC,OAAO;AAElC,QAAMC,SAAQ,SAAS;AACvB,QAAM,cAAc,SAAS,WAAW;AAExC,MAAKA,QAAQ;AAIZ,aAAU,IAAI,GAAG,KAAKA,OAAM,OAAO,IAAI,IAAI,KAAK,GAAI;AAEnD,WAAM,CAAE,IAAIA,OAAM,KAAM,CAAE;AAC1B,WAAM,CAAE,IAAIA,OAAM,KAAM,IAAI,CAAE;AAC9B,WAAM,CAAE,IAAIA,OAAM,KAAM,IAAI,CAAE;AAE9B,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AACrD,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AACrD,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AAErD,kBAAa,MAAM,KAAK,IAAI,CAAE;AAAA,IAE/B;AAAA,EAED,OAAO;AAIN,aAAU,IAAI,GAAG,KAAK,YAAY,OAAO,IAAI,IAAI,KAAK,GAAI;AAEzD,WAAM,CAAE,IAAI;AACZ,WAAM,CAAE,IAAI,IAAI;AAChB,WAAM,CAAE,IAAI,IAAI;AAEhB,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AACrD,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AACrD,UAAK,CAAE,EAAE,oBAAqB,aAAa,KAAM,CAAE,CAAE;AAErD,kBAAa,MAAM,KAAK,IAAI,CAAE;AAAA,IAE/B;AAAA,EAED;AAEA,SAAO;AAEP,WAAS,YAAaC,OAAMC,MAAKF,QAAQ;AAIxC,QAAI,UAAU;AAEd,IAAAJ,GAAE,IAAK,GAAG,CAAE;AAEZ,aAAU,IAAI,GAAG,KAAKM,KAAI,QAAQ,IAAI,IAAI,KAAO;AAEhD,YAAM,KAAKA,KAAK,CAAE;AAElB,MAAAN,GAAE,KAAK,GAAG;AACV,MAAAA,GAAE,KAAK,GAAG;AAEV,UAAK,MAAM,GAAI;AAEd,YAAI,OAAQ,GAAG,KAAME,SAAQ,KAAM,MAAO,IAAI,GAAG,MAAQC,UAAS,KAAM,GAAI;AAAA,MAE7E,OAAO;AAEN,YAAI,OAAQ,GAAG,KAAMD,SAAQ,KAAM,MAAO,IAAI,GAAG,MAAQC,UAAS,KAAM,GAAI;AAAA,MAE7E;AAAA,IAED;AAEA,QAAI,UAAU;AACd,QAAI,OAAO;AAIX,IAAAH,GAAE,aAAcM,KAAI,MAAO;AAI3B,QAAI,OAAO;AACX,QAAI,YAAY;AAChB,QAAI,SAAUF,QAAOJ,GAAE,IAAIE,SAAS,IAAIF,GAAE,KAAMG,OAAO;AAEvD,QAAKH,GAAE,IAAI,MAAO;AAIjB,UAAI,SAAUI,QAASJ,GAAE,IAAI,IAAME,SAAS,IAAIF,GAAE,KAAMG,OAAO;AAAA,IAEhE;AAIA,QAAI,OAAO;AACX,QAAI,YAAY;AAIhB,aAAU,IAAI,GAAG,KAAKG,KAAI,QAAQ,IAAI,IAAI,KAAO;AAEhD,YAAM,KAAKA,KAAK,CAAE;AAClB,MAAAL,GAAE,WAAYD,IAAG,EAAG,EAAE,aAAc,CAAE;AAEtC,YAAM,OAAOK,MAAM,CAAE;AACrB,UAAI,SAAU,IAAK,CAAE,IAAI,MAAMJ,GAAE,IAAIC,SAAS,IAAID,GAAE,KAAME,OAAO;AAEjE,UAAKF,GAAE,IAAI,MAAO;AAIjB,YAAI,SAAU,IAAK,CAAE,IAAI,MAAQA,GAAE,IAAI,IAAMC,SAAS,IAAID,GAAE,KAAME,OAAO;AAAA,MAE1E;AAAA,IAED;AAAA,EAED;AAED;;;AClKA,IAAM,WAAN,MAAe;AAAA,EAEd,OAAO,aAAcI,WAAU,cAAc,CAAC,GAAI;AAEjD,UAAM,SAAS,SAAS,cAAe,QAAS;AAEhD,aAAS,cAA0B;AAElC,UAAK,YAAY,eAAe,QAAY;AAE3C,cAAM,UAAU,SAAS,cAAe,KAAM;AAC9C,gBAAQ,MAAM,UAAU;AACxB,iBAAS,KAAK,YAAa,OAAQ;AAEnC,cAAM,MAAM,SAAS,gBAAiB,8BAA8B,KAAM;AAC1E,YAAI,aAAc,SAAS,EAAG;AAC9B,YAAI,aAAc,UAAU,EAAG;AAC/B,YAAI,MAAM,WAAW;AACrB,YAAI,MAAM,QAAQ;AAClB,YAAI,MAAM,MAAM;AAChB,YAAI,iBAAkB,SAAS,WAAY;AAE1C,yBAAe,IAAI;AAAA,QAEpB,CAAE;AACF,gBAAQ,YAAa,GAAI;AAEzB,cAAM,OAAO,SAAS,gBAAiB,8BAA8B,MAAO;AAC5E,aAAK,aAAc,KAAK,+BAAgC;AACxD,aAAK,aAAc,UAAU,MAAO;AACpC,aAAK,aAAc,gBAAgB,CAAE;AACrC,YAAI,YAAa,IAAK;AAEtB,YAAK,YAAY,qBAAqB,QAAY;AAEjD,sBAAY,mBAAmB,CAAC;AAAA,QAEjC;AAEA,oBAAY,iBAAiB,KAAM,aAAc;AACjD,oBAAY,aAAa,EAAE,MAAM,QAAQ;AAAA,MAE1C;AAIA,UAAI,iBAAiB;AAErB,qBAAe,iBAAkB,SAAU;AAE1C,gBAAQ,iBAAkB,OAAO,cAAe;AAEhD,QAAAA,UAAS,GAAG,sBAAuB,OAAQ;AAE3C,cAAMA,UAAS,GAAG,WAAY,OAAQ;AAEtC,eAAO,cAAc;AACrB,oBAAY,WAAW,KAAK,MAAM,UAAU;AAE5C,yBAAiB;AAAA,MAElB;AAEA,eAAS,iBAA4B;AAEpC,uBAAe,oBAAqB,OAAO,cAAe;AAE1D,eAAO,cAAc;AACrB,oBAAY,WAAW,KAAK,MAAM,UAAU;AAE5C,yBAAiB;AAAA,MAElB;AAIA,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,cAAc;AAErB,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,UAAU,WAAY;AAE5B,YAAK,mBAAmB,MAAO;AAE9B,oBAAU,GAAG,eAAgB,gBAAgB,WAAY,EAAE,KAAM,gBAAiB;AAAA,QAEnF,OAAO;AAEN,yBAAe,IAAI;AAEnB,cAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,sBAAU,GAAG,aAAc,gBAAgB,WAAY,EACrD,KAAM,gBAAiB,EACvB,MAAO,CAAEC,SAAS;AAElB,sBAAQ,KAAMA,IAAI;AAAA,YAEnB,CAAE;AAAA,UAEJ;AAAA,QAED;AAAA,MAED;AAEA,UAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,kBAAU,GAAG,aAAc,gBAAgB,WAAY,EACrD,KAAM,gBAAiB,EACvB,MAAO,CAAEA,SAAS;AAElB,kBAAQ,KAAMA,IAAI;AAAA,QAEnB,CAAE;AAAA,MAEJ;AAAA,IAED;AAEA,aAAS,gBAAgB;AAExB,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,eAAe;AACtB,aAAO,eAAe;AAEtB,aAAO,UAAU;AAAA,IAElB;AAEA,aAAS,qBAAqB;AAE7B,oBAAc;AAEd,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,iBAAkB,WAAY;AAEtC,oBAAc;AAEd,cAAQ,KAAM,uDAAuD,SAAU;AAE/E,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,eAAgB,SAAU;AAElC,cAAQ,MAAM,WAAW;AACzB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,eAAe;AAC7B,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,YAAY;AAC1B,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AAAA,IAExB;AAEA,QAAK,QAAQ,WAAY;AAExB,aAAO,KAAK;AACZ,aAAO,MAAM,UAAU;AAEvB,qBAAgB,MAAO;AAEvB,gBAAU,GAAG,mBAAoB,cAAe,EAAE,KAAM,SAAW,WAAY;AAE9E,oBAAY,YAAY,IAAI,mBAAmB;AAAA,MAEhD,CAAE,EAAE,MAAO,gBAAiB;AAE5B,aAAO;AAAA,IAER,OAAO;AAEN,YAAM,UAAU,SAAS,cAAe,GAAI;AAE5C,UAAK,OAAO,oBAAoB,OAAQ;AAEvC,gBAAQ,OAAO,SAAS,SAAS,KAAK,QAAS,UAAU,QAAS;AAClE,gBAAQ,YAAY;AAAA,MAErB,OAAO;AAEN,gBAAQ,OAAO;AACf,gBAAQ,YAAY;AAAA,MAErB;AAEA,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,iBAAiB;AAE/B,qBAAgB,OAAQ;AAExB,aAAO;AAAA,IAER;AAAA,EAED;AAED;;;ACnOA,IAAM,4BAA4B;AAElC,IAAM,kBAAN,MAAsB;AAAA,EAErB,YAAa,WAAW,YAAY,MAAM,YAAY,SAAS,MAAM,SAAS,MAAO;AAEpF,SAAK,aAAa;AAClB,SAAK,YAAY;AAEjB,SAAK,QAAQ,CAAC;AAEd,QAAK,WAAW,MAAO;AAEtB,eAAS,IAAI,WAAW;AACxB,aAAO,QAAS,QAAQ,yBAA0B;AAAA,IAEnD;AAEA,WAAO,KAAM,GAAG,UAAU,QAAQ,UAAQ;AAEzC,YAAM,SAAS,KAAK,MAAM,SAAU,CAAE;AACtC,WAAK,UAAU,IAAK,MAAO;AAE3B,YAAM,OAAO,OAAO,oBAAqB,QAAQ,aAAc;AAC/D,WAAK,gBAAgB;AACrB,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAErB,YAAM,SAAS;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAEA,aAAO,QAAS,eAAa;AAE5B,cAAM,OAAO,OAAO,gBAAiB,SAAU;AAE/C,YAAK,SAAS,QAAY;AAEzB,eAAK,YAAY;AAAA,QAElB,OAAO;AAEN,kBAAQ,KAAM,iBAAiB,SAAS,OAAO,UAAU,YAAa;AAAA,QAEvE;AAEA,aAAK,MAAM,KAAM,IAAK;AAAA,MAEvB,CAAE;AAEF,UAAK,OAAS,QAAQ,MAAO;AAAA,IAE9B,CAAE;AAAA,EAEH;AAAA,EAEA,aAAa;AAGZ,UAAM,WAAW,KAAK,WAAW;AAEjC,aAAU,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAO;AAE9C,YAAM,OAAO,KAAK,MAAO,CAAE;AAE3B,UAAK,MAAO;AAEX,cAAM,UAAU,SAAU,KAAK,SAAU;AAEzC,YAAK,QAAQ,SAAU;AAEtB,gBAAMC,YAAW,QAAQ;AAEzB,eAAK,SAAS,KAAMA,SAAS;AAC7B,eAAK,WAAW,KAAM,QAAQ,UAAW;AAAA,QAG1C;AAAA,MAED;AAAA,IAED;AAAA,EAED;AAED;;;AC5GA,IAAM,eAAe;AACrB,IAAM,iBAAiB;AAEvB,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAEtC,YAAa,YAAY,SAAS,MAAM,SAAS,MAAO;AAEvD,UAAM;AAEN,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,SAAS;AAEd,SAAK,OAAO;AAEZ,eAAW,iBAAkB,aAAa,CAAE,UAAW;AAEtD,YAAM,gBAAgB,MAAM;AAE5B,UAAK,cAAc,QAAQ,CAAE,KAAK,kBAAmB;AAEpD,aAAK,gBAAgB;AAErB,aAAK,mBAAmB,IAAI,gBAAiB,MAAM,YAAY,KAAK,MAAM,cAAc,YAAY,KAAK,QAAQ,KAAK,MAAO;AAAA,MAE9H;AAAA,IAED,CAAE;AAEF,eAAW,iBAAkB,gBAAgB,MAAM;AAElD,WAAK,MAAM;AACX,WAAK,mBAAmB;AAAA,IAEzB,CAAE;AAAA,EAEH;AAAA,EAEA,kBAAmB,OAAQ;AAE1B,UAAM,kBAAmB,KAAM;AAE/B,QAAK,KAAK,kBAAmB;AAE5B,WAAK,iBAAiB,WAAW;AAAA,IAElC;AAAA,EAED;AAAA,EAEA,qBAAqB;AAEpB,UAAM,iBAAiB,KAAK,WAAW,OAAQ,cAAe;AAC9D,QAAK,gBAAiB;AAErB,aAAO,eAAe;AAAA,IAEvB,OAAO;AAEN,aAAO;AAAA,IAER;AAAA,EAED;AAAA,EAEA,mBAAoB,WAAY;AAE/B,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,QAAK,iBAAkB;AAEtB,YAAM,cAAc,IAAI,OAAQ,iBAAiB,YAAa;AAC9D,YAAM,MAAM,IAAI,KAAK,EAAE,cAAe,SAAU;AAChD,aAAO,YAAY,cAAe,GAAI;AAAA,IAEvC,OAAO;AAEN,aAAO;AAAA,IAER;AAAA,EAED;AAAA,EAEA,YAAa,QAAS;AAErB,QAAK,KAAK,mBAAoB,MAAO,GAAI;AAExC,aAAO,QAAQ;AAAA,IAEhB,OAAO;AAEN,aAAO,QAAQ;AAAA,IAEhB;AAEA,QAAK,OAAO,UAAU,GAAI;AAEzB,aAAO,aAAa;AAAA,IAErB;AAAA,EAED;AAED;;;ACzGA,IAAM,YAAY;AAClB,IAAM,kBAAkB;AACxB,IAAM,YAAY;AAClB,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAChC,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AACtB,IAAM,2BAA2B;AACjC,IAAM,QAAwB,IAAU,QAAS,GAAG,GAAG,CAAE;AACzD,IAAM,QAAwB,IAAU,QAAS,GAAG,GAAG,CAAE;AAEzD,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AAE5B,IAAM,yBAAN,cAA2C,SAAS;AAAA,EAEnD,YAAa,MAAM,YAAa;AAE/B,UAAM;AAEN,SAAK,OAAO;AACZ,SAAK,aAAa;AAGlB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AACd,SAAK,OAAO;AAEZ,SAAK,kBAAkB;AACvB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAErB,SAAK,UAAU;AACf,SAAK,WAAW;AAEhB,SAAK,eAAe;AAEpB,SAAK,YAAY;AAEjB,SAAK,eAAe,KAAK,aAAa,KAAM,IAAK;AACjD,SAAK,kBAAkB,KAAK,gBAAgB,KAAM,IAAK;AACvD,SAAK,KAAK,iBAAkB,aAAa,KAAK,YAAa;AAC3D,SAAK,KAAK,iBAAkB,gBAAgB,KAAK,eAAgB;AAAA,EAElE;AAAA,EAEA,aAAc,OAAQ;AAErB,UAAM,gBAAgB,MAAM;AAC5B,QAAK,cAAc,MAAO;AAEzB,WAAK,UAAU;AACf,WAAK,gBAAgB;AAErB,WAAK,cAAc;AAAA,IAEpB;AAAA,EAED;AAAA,EAEA,kBAAkB;AAEjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AAErB,QAAK,KAAK,gBAAkB,MAAK,gBAAgB,QAAQ;AACzD,QAAK,KAAK,eAAe,KAAK,YAAY,SAAW,MAAK,YAAY,SAAS,QAAQ;AAEvF,SAAK,MAAM;AAAA,EAEZ;AAAA,EAEA,kBAAmB,UAAU,YAAY,WAAY;AAEpD,UAAM,gBAAgB,WAAW,MAAM;AACvC,aAAU,IAAI,GAAG,IAAI,kBAAkB,KAAO;AAE7C,oBAAc,eAAgB,OAAS,KAAK,KAAK,IAAM,gBAAiB;AACxE,YAAM,MAAM,YAAY,mBAAmB;AAC3C,eAAU,IAAI,GAAI,IAAI,cAAc;AACpC,eAAU,IAAI,MAAM,CAAE,IAAI,cAAc;AACxC,eAAU,IAAI,MAAM,CAAE,IAAI,cAAc;AAAA,IAEzC;AAAA,EAED;AAAA,EAEA,uBAAwB,YAAa;AAEpC,UAAM,WAAW,KAAK,gBAAgB,WAAW,SAAS;AAE1D,UAAM,gBAAgB,IAAU;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,MAAQ,iBAAiB;AAAA,IAC1B;AACA,SAAK,kBAAmB,UAAU,eAAe,CAAE;AAGnD,UAAM,WAAW,IAAU;AAAA,MAC1B,KAAK,IAAO,KAAK,KAAK,2BAA6B,GAAI,IAAI;AAAA,MAC3D,KAAK,IAAO,KAAK,KAAK,2BAA6B,GAAI,IAAI;AAAA,MAC3D;AAAA,IACD;AACA,aAAU,IAAI,GAAG,IAAI,eAAe,KAAO;AAE1C,WAAK,kBAAmB,UAAU,UAAU,IAAI,CAAE;AAClD,eAAS;AAAA,QACR;AAAA,QACE,KAAK,KAAK,2BAA6B,OAAQ,gBAAgB;AAAA,MAClE;AAAA,IAED;AAGA,UAAM,mBAAmB,oBAAqB,IAAI;AAClD,UAAM,kBAAkB,oBAAqB,IAAI,iBAAkB;AACnE,UAAM,cAAc,IAAU;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,MAAQ,iBAAiB;AAAA,IAC1B;AACA,aAAU,mBAAmB,CAAE,IAAI,YAAY;AAC/C,aAAU,mBAAmB,IAAI,CAAE,IAAI,YAAY;AACnD,aAAU,mBAAmB,IAAI,CAAE,IAAI,YAAY;AACnD,UAAM,aAAa,IAAU,QAAS,GAAG,GAAG,UAAW;AACvD,aAAU,kBAAkB,CAAE,IAAI,WAAW;AAC7C,aAAU,kBAAkB,IAAI,CAAE,IAAI,WAAW;AACjD,aAAU,kBAAkB,IAAI,CAAE,IAAI,WAAW;AAEjD,SAAK,gBAAgB;AAAA,MACpB;AAAA,MACA,IAAU,uBAAwB,UAAU,CAAE;AAAA,IAC/C;AAAA,EAGD;AAAA,EAEA,gBAAgB;AAEf,QAAI,GAAG;AACP,UAAM,WAAW,IAAI;AAAA,QAChB,gBAAgB,KAAM,mBAAmB,KAAM;AAAA,IACpD,EAAE,KAAM,CAAE;AAEV,UAAM,UAAU,CAAC;AACjB,SAAK,kBAAkB,IAAU,eAAe;AAEhD,SAAK,gBAAgB;AAAA,MACpB;AAAA,MACA,IAAU,uBAAwB,UAAU,CAAE;AAAA,IAC/C;AAEA,SAAK,uBAAwB,mBAAoB;AAGjD,SAAM,IAAI,GAAG,IAAI,eAAe,KAAO;AAEtC,WAAM,IAAI,GAAG,IAAI,mBAAmB,GAAG,KAAO;AAE7C,gBAAQ;AAAA,UACP,IAAI,mBAAmB;AAAA,UACvB,IAAI,mBAAmB,IAAI;AAAA,WACzB,IAAI,KAAM,mBAAmB;AAAA,QAChC;AACA,gBAAQ;AAAA,UACP,IAAI,mBAAmB,IAAI;AAAA,WACzB,IAAI,KAAM,mBAAmB,IAAI;AAAA,WACjC,IAAI,KAAM,mBAAmB;AAAA,QAChC;AAAA,MAED;AAEA,cAAQ;AAAA,SACL,IAAI,KAAM,mBAAmB;AAAA,QAC/B,IAAI;AAAA,SACF,IAAI,KAAM,mBAAmB;AAAA,MAChC;AACA,cAAQ;AAAA,QACP,IAAI;AAAA,SACF,IAAI,KAAM;AAAA,SACV,IAAI,KAAM,mBAAmB;AAAA,MAChC;AAAA,IAED;AAGA,UAAM,mBAAmB,oBAAqB,IAAI;AAClD,UAAM,kBAAkB,oBAAqB,IAAI,iBAAkB;AAEnE,SAAM,IAAI,GAAG,IAAI,mBAAmB,GAAG,KAAO;AAE7C,cAAQ,KAAM,kBAAkB,IAAI,GAAG,CAAE;AACzC,cAAQ;AAAA,QACP;AAAA,QACA,IAAI,mBAAmB;AAAA,QACvB,IAAI,mBAAmB,gBAAgB;AAAA,MACxC;AAAA,IAED;AAEA,YAAQ,KAAM,kBAAkB,GAAG,mBAAmB,CAAE;AACxD,YAAQ;AAAA,MACP;AAAA,MACA,oBAAqB,gBAAgB,KAAM;AAAA,MAC3C,mBAAmB;AAAA,IACpB;AAEA,UAAM,WAAW,IAAU,kBAAkB;AAC7C,aAAS,cAAc;AACvB,aAAS,UAAU;AAEnB,SAAK,gBAAgB,SAAU,OAAQ;AAEvC,SAAK,cAAc,IAAU,KAAM,KAAK,iBAAiB,QAAS;AAElE,SAAK,YAAY,SAAS,IAAK,GAAG,GAAG,KAAM,mBAAoB;AAC/D,SAAK,gBAAgB,IAAU,SAAS;AACxC,SAAK,cAAc,IAAK,KAAK,WAAY;AAEzC,SAAK,YAAY,IAAU,UAAU;AAGrC,UAAM,iBAAiB,IAAU,eAAgB,eAAe,IAAI,EAAG;AACvE,UAAM,iBAAiB,IAAU,kBAAkB;AACnD,mBAAe,cAAc;AAC7B,mBAAe,UAAU;AAEzB,SAAK,eAAe,IAAU,KAAM,gBAAgB,cAAe;AACnE,SAAK,cAAc,IAAK,KAAK,YAAa;AAE1C,SAAK,IAAK,KAAK,aAAc;AAAA,EAE9B;AAAA,EAEA,mBAAmB;AAElB,QAAK,KAAK,WAAY;AAErB,YAAM,gBAAgB,KAAK,cAAc;AACzC,YAAM,aAAa,IAAU,QAAQ;AACrC,iBAAW,SAAS,EAAE,gBAAiB,aAAc;AACrD,WAAK,UAAU,IAAI,OAAO,sBAAuB,aAAc;AAC/D,WAAK,UAAU,IAAI,UAAU,IAAK,GAAG,GAAG,EAAI,EAAE,aAAc,UAAW;AAAA,IAExE;AAAA,EAED;AAAA,EAEA,iBAAiB;AAEhB,SAAK,cAAc,UAAU,KAAK,WAAW;AAC7C,UAAM,WAAW,KAAK,KAAK,OAAQ,kBAAmB;AACtD,UAAM,WAAW,KAAK,KAAK,OAAQ,WAAY;AAC/C,UAAM,WAAW,SAAS,SAAS,WAAY,SAAS,QAAS;AACjE,UAAMC,YAAW,SAAS,SACxB,MAAM,EACN,IAAK,SAAS,QAAS,EACvB,eAAgB,GAAI;AACtB,SAAK,cAAc,SAAS,KAAMA,SAAS;AAC3C,SAAK,cAAc,WAAW,KAAM,KAAK,WAAW,UAAW;AAE/D,SAAK,UAAU,YAAY;AAE3B,UAAM,cAAe,WAAW,cAAgB,YAAY;AAC5D,UAAM,cAAe,WAAW,cAAgB,kBAAkB;AAClE,QAAK,aAAa,GAAI;AAErB,WAAK,uBAAwB,mBAAoB;AACjD,WAAK,YAAY,SAAS,IAAK,GAAG,GAAG,KAAM,mBAAoB;AAC/D,WAAK,YAAY,SAAS,UAAU;AAAA,IAErC,WAAY,aAAa,GAAI;AAE5B,YAAM,cACC,sBAAsB,2BAA4B,aACpD;AACL,WAAK,uBAAwB,UAAW;AACxC,UAAK,aAAa,GAAI;AAErB,aAAK,YAAY,SAAS;AAAA,UACzB;AAAA,UACA;AAAA,UACA,KAAM,cAAe,IAAI,cAAe;AAAA,QACzC;AACA,aAAK,YAAY,SAAS,UACpB,uBACE,IAAI,eAAiB,sBAAsB;AAAA,MAEpD,OAAO;AAEN,aAAK,YAAY,SAAS,IAAK,GAAG,GAAG,KAAM,UAAW;AACtD,aAAK,YAAY,SAAS,UAAU;AAAA,MAErC;AAAA,IAED,OAAO;AAEN,WAAK,uBAAwB,uBAAwB;AACrD,WAAK,YAAY,SAAS;AAAA,QACzB;AAAA,QACA;AAAA,QACA,KAAM,0BAA0B;AAAA,MACjC;AACA,WAAK,YAAY,SAAS,UAAU;AAAA,IAErC;AAEA,SAAK,aAAa,SAAS,UAAU,KAAK,YAAY,SAAS;AAAA,EAEhE;AAAA,EAEA,kBAAmB,OAAQ;AAE1B,UAAM,kBAAmB,KAAM;AAC/B,QAAK,KAAK,iBAAkB;AAE3B,WAAK,eAAe;AACpB,WAAK,iBAAiB;AAAA,IAEvB;AAAA,EAED;AAAA,EAEA,YAAY;AAEX,WAAO,KAAK;AAAA,EAEb;AAAA,EAEA,YAAa,UAAW;AAEvB,SAAK,WAAW;AAAA,EAEjB;AAAA,EAEA,aAAa;AAEZ,WAAO,KAAK;AAAA,EAEb;AAAA,EAEA,gBAAiB,QAAQ,YAAY,MAAO;AAE3C,QAAK,KAAK,WAAY;AAErB,aAAO,KAAK,UAAU,gBAAiB,QAAQ,SAAU;AAAA,IAE1D;AAAA,EAED;AAAA,EAEA,iBAAkB,SAAS,YAAY,MAAO;AAE7C,QAAK,KAAK,WAAY;AAErB,aAAO,KAAK,UAAU,iBAAkB,SAAS,SAAU;AAAA,IAE5D;AAAA,EAED;AAAA,EAEA,mBAAoB,SAAS,YAAY,OAAQ;AAEhD,QAAK,KAAK,aAAa,CAAE,KAAK,UAAW;AAExC,YAAM,gBAAgB,KAAK,UAAU,iBAAkB,SAAS,SAAU;AAC1E,YAAM,YAAY,IAAU,QAAS,GAAG,GAAG,EAAI;AAC/C,UAAK,cAAc,SAAS,GAAI;AAE/B,cAAM,eAAe,cAAe,CAAE;AACtC,cAAM,WAAW,aAAa;AAC9B,aAAK,aAAa,SAAS,KAAM,UAAU,eAAgB,QAAS,CAAE;AAAA,MAEvE,OAAO;AAEN,aAAK,aAAa,SAAS,KAAM,UAAU,eAAgB,mBAAoB,CAAE;AAAA,MAElF;AAAA,IAED;AAAA,EAED;AAAA,EAEA,UAAW,UAAW;AAErB,UAAM,YAAY,IAAU,QAAS,GAAG,GAAG,EAAI;AAC/C,QAAK,KAAK,aAAa,CAAE,KAAK,UAAW;AAExC,WAAK,aAAa,SAAS,KAAM,UAAU,eAAgB,QAAS,CAAE;AAAA,IAEvE;AAAA,EAED;AAAA,EAEA,UAAU;AAET,SAAK,gBAAgB;AACrB,SAAK,KAAK,oBAAqB,aAAa,KAAK,YAAa;AAC9D,SAAK,KAAK,oBAAqB,gBAAgB,KAAK,eAAgB;AAAA,EAErE;AAED;;;ACxZA,SAAS,WAAY,SAASC,SAAS;AAEtC,QAAM,SAAS,SAAS,cAAe,QAAS;AAChD,QAAM,UAAU,OAAO,WAAY,IAAK;AACxC,MAAI,UAAU;AACd,QAAM,aAAa;AACnB,UAAQ,OAAO,YAAY,aAAa;AACxC,YAAU,QAAQ,YAAa,OAAQ;AACvC,QAAM,YAAY,QAAQ;AAC1B,SAAO,QAAQ;AACf,SAAO,SAAS;AAChB,UAAQ,OAAO,YAAY,aAAa;AACxC,UAAQ,YAAY;AACpB,UAAQ,eAAe;AACvB,UAAQ,YAAY;AACpB,UAAQ,SAAU,SAAS,YAAY,GAAG,aAAa,CAAE;AAEzD,QAAM,UAAU,IAAU,QAAS,MAAO;AAC1C,UAAQ,cAAc;AAEtB,QAAM,WAAW,IAAU,kBAAmB;AAAA,IAC7C,OAAO;AAAA,IACP,MAAY;AAAA,IACZ,KAAK;AAAA,IACL,aAAa;AAAA,EACd,CAAE;AACF,QAAM,WAAW,IAAU;AAAA,IACxBA,UAAS,YAAc;AAAA,IACzBA;AAAA,EACD;AACA,QAAM,QAAQ,IAAU,KAAM,UAAU,QAAS;AACjD,SAAO;AAER;;;ACnCA,IAAM,WAAN,MAAM,UAAS;AAAA,EAEd,OAAO,aAAcC,WAAU,cAAc,CAAC,GAAI;AAEjD,UAAM,SAAS,SAAS,cAAe,QAAS;AAEhD,aAAS,cAA0B;AAElC,UAAI,iBAAiB;AAErB,qBAAe,iBAAkB,SAAU;AAE1C,gBAAQ,iBAAkB,OAAO,cAAe;AAEhD,cAAMA,UAAS,GAAG,WAAY,OAAQ;AACtC,eAAO,cAAc;AAErB,yBAAiB;AAAA,MAElB;AAEA,eAAS,iBAA4B;AAEpC,uBAAe,oBAAqB,OAAO,cAAe;AAE1D,eAAO,cAAc;AAErB,yBAAiB;AAAA,MAElB;AAIA,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,cAAc;AASrB,YAAM,iBAAiB;AAAA,QACtB,GAAG;AAAA,QACH,kBAAkB;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAK,YAAY,oBAAoB,CAAC;AAAA,QACvC;AAAA,MACD;AAEA,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,UAAU,WAAY;AAE5B,YAAK,mBAAmB,MAAO;AAE9B,oBAAU,GAAG,eAAgB,gBAAgB,cAAe,EAAE,KAAM,gBAAiB;AAAA,QAEtF,OAAO;AAEN,yBAAe,IAAI;AAEnB,cAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,sBAAU,GAAG,aAAc,gBAAgB,cAAe,EACxD,KAAM,gBAAiB,EACvB,MAAO,CAAEC,SAAS;AAElB,sBAAQ,KAAMA,IAAI;AAAA,YAEnB,CAAE;AAAA,UAEJ;AAAA,QAED;AAAA,MAED;AAEA,UAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,kBAAU,GAAG,aAAc,gBAAgB,cAAe,EACxD,KAAM,gBAAiB,EACvB,MAAO,CAAEA,SAAS;AAElB,kBAAQ,KAAMA,IAAI;AAAA,QAEnB,CAAE;AAAA,MAEJ;AAAA,IAED;AAEA,aAAS,gBAAgB;AAExB,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,eAAe;AACtB,aAAO,eAAe;AAEtB,aAAO,UAAU;AAAA,IAElB;AAEA,aAAS,oBAAoB;AAE5B,oBAAc;AAEd,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,iBAAkB,WAAY;AAEtC,oBAAc;AAEd,cAAQ,KAAM,uDAAuD,SAAU;AAE/E,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,eAAgB,SAAU;AAElC,cAAQ,MAAM,WAAW;AACzB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,eAAe;AAC7B,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,YAAY;AAC1B,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AAAA,IAExB;AAEA,QAAK,QAAQ,WAAY;AAExB,aAAO,KAAK;AACZ,aAAO,MAAM,UAAU;AAEvB,qBAAgB,MAAO;AAEvB,gBAAU,GAAG,mBAAoB,cAAe,EAAE,KAAM,SAAW,WAAY;AAE9E,oBAAY,YAAY,IAAI,kBAAkB;AAE9C,YAAK,aAAa,UAAS,oBAAqB;AAE/C,iBAAO,MAAM;AAAA,QAEd;AAAA,MAED,CAAE,EAAE,MAAO,gBAAiB;AAE5B,aAAO;AAAA,IAER,OAAO;AAEN,YAAM,UAAU,SAAS,cAAe,GAAI;AAE5C,UAAK,OAAO,oBAAoB,OAAQ;AAEvC,gBAAQ,OAAO,SAAS,SAAS,KAAK,QAAS,UAAU,QAAS;AAClE,gBAAQ,YAAY;AAAA,MAErB,OAAO;AAEN,gBAAQ,OAAO;AACf,gBAAQ,YAAY;AAAA,MAErB;AAEA,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,iBAAiB;AAE/B,qBAAgB,OAAQ;AAExB,aAAO;AAAA,IAER;AAAA,EAED;AAAA,EAEA,OAAO,iCAAiC;AAEvC,QAAK,OAAO,cAAc,eAAe,QAAQ,WAAY;AAI5D,UAAK,iBAAiB,KAAM,UAAU,SAAU,EAAI;AAEpD,gBAAU,GAAG,iBAAkB,kBAAkB,MAAM;AAEtD,kBAAS,qBAAqB;AAAA,MAE/B,CAAE;AAAA,IAEH;AAAA,EAED;AAED;AAEA,SAAS,qBAAqB;AAC9B,SAAS,+BAA+B;;;ACtOxC,IAAM,WAAN,MAAe;AAAA,EAEd,OAAO,aAAcC,WAAU,cAAc,CAAC,GAAI;AAEjD,UAAM,SAAS,SAAS,cAAe,QAAS;AAEhD,aAAS,YAAa,MAAO;AAE5B,UAAI,iBAAiB;AAErB,qBAAe,iBAAkB,SAAU;AAE1C,gBAAQ,iBAAkB,OAAO,cAAe;AAEhD,cAAMA,UAAS,GAAG,WAAY,OAAQ;AAEtC,eAAO,cAAc;AAErB,yBAAiB;AAAA,MAElB;AAEA,eAAS,iBAA4B;AAEpC,uBAAe,oBAAqB,OAAO,cAAe;AAE1D,eAAO,cAAc;AAErB,yBAAiB;AAAA,MAElB;AAIA,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,cAAc;AAErB,YAAM,iBAAiB;AAAA,QACtB,GAAG;AAAA,QACH,kBAAkB;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAK,YAAY,oBAAoB,CAAC;AAAA,QACvC;AAAA,MACD;AAEA,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,eAAe,WAAY;AAEjC,eAAO,MAAM,UAAU;AAAA,MAExB;AAEA,aAAO,UAAU,WAAY;AAE5B,YAAK,mBAAmB,MAAO;AAE9B,oBAAU,GAAG,eAAgB,MAAM,cAAe,EAChD,KAAM,gBAAiB;AAAA,QAE1B,OAAO;AAEN,yBAAe,IAAI;AAEnB,cAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,sBAAU,GAAG,aAAc,MAAM,cAAe,EAC9C,KAAM,gBAAiB,EACvB,MAAO,CAAEC,SAAS;AAElB,sBAAQ,KAAMA,IAAI;AAAA,YAEnB,CAAE;AAAA,UAEJ;AAAA,QAED;AAAA,MAED;AAEA,UAAK,UAAU,GAAG,iBAAiB,QAAY;AAE9C,kBAAU,GAAG,aAAc,MAAM,cAAe,EAC9C,KAAM,gBAAiB,EACvB,MAAO,CAAEA,SAAS;AAElB,kBAAQ,KAAMA,IAAI;AAAA,QAEnB,CAAE;AAAA,MAEJ;AAAA,IAED;AAEA,aAAS,gBAAgB;AAExB,aAAO,MAAM,UAAU;AAEvB,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,QAAQ;AAErB,aAAO,eAAe;AACtB,aAAO,eAAe;AAEtB,aAAO,UAAU;AAAA,IAElB;AAEA,aAAS,qBAAqB;AAE7B,oBAAc;AAEd,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,iBAAkB,WAAY;AAEtC,oBAAc;AAEd,cAAQ,KAAM,uDAAuD,SAAU;AAE/E,aAAO,cAAc;AAAA,IAEtB;AAEA,aAAS,eAAgB,SAAU;AAElC,cAAQ,MAAM,WAAW;AACzB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AACvB,cAAQ,MAAM,eAAe;AAC7B,cAAQ,MAAM,aAAa;AAC3B,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,YAAY;AAC1B,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,UAAU;AACxB,cAAQ,MAAM,SAAS;AAAA,IAExB;AAEA,QAAK,QAAQ,WAAY;AAExB,aAAO,KAAK;AACZ,aAAO,MAAM,UAAU;AAEvB,qBAAgB,MAAO;AAEvB,gBAAU,GAAG,mBAAoB,cAAe,EAC9C,KAAM,SAAW,WAAY;AAE7B,YAAK,WAAY;AAEhB,sBAAa,cAAe;AAAA,QAE7B,OAAO;AAEN,oBAAU,GAAG,mBAAoB,cAAe,EAC9C,KAAM,SAAWC,YAAY;AAE7B,gBAAKA,YAAY;AAEhB,0BAAa,cAAe;AAAA,YAE7B,OAAO;AAEN,iCAAmB;AAAA,YAEpB;AAAA,UAED,CAAE,EAAE,MAAO,gBAAiB;AAAA,QAE9B;AAAA,MAED,CAAE,EAAE,MAAO,gBAAiB;AAE7B,aAAO;AAAA,IAER,OAAO;AAEN,YAAM,UAAU,SAAS,cAAe,GAAI;AAE5C,UAAK,OAAO,oBAAoB,OAAQ;AAEvC,gBAAQ,OAAO,SAAS,SAAS,KAAK,QAAS,UAAU,QAAS;AAClE,gBAAQ,YAAY;AAAA,MAErB,OAAO;AAEN,gBAAQ,OAAO;AACf,gBAAQ,YAAY;AAAA,MAErB;AAEA,cAAQ,MAAM,OAAO;AACrB,cAAQ,MAAM,QAAQ;AACtB,cAAQ,MAAM,iBAAiB;AAE/B,qBAAgB,OAAQ;AAExB,aAAO;AAAA,IAER;AAAA,EAED;AAED;;;ACxNA,IAAM,YAAY;AAAA,EAChB,YAAY,OAAO,OAAO;AAAA,IACxB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT,CAAC;AAAA,EAED,gBAAgB,OAAO,OAAO;AAAA,IAC5B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC;AAAA,EAED,mBAAmB,OAAO,OAAO;AAAA,IAC/B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC;AAAA,EAED,eAAe,OAAO,OAAO;AAAA,IAC3B,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV,CAAC;AAAA,EAED,sBAAsB;AAAA,EAEtB,oBAAoB;AAAA,EAEpB,wBAAwB,OAAO,OAAO;AAAA,IACpC,WAAW;AAAA,IACX,YAAY;AAAA,EACd,CAAC;AACH;AAMA,eAAe,cAAc,MAAM;AACjC,QAAM,WAAW,MAAM,MAAM,IAAI;AACjC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,SAAS,UAAU;AAAA,EACrC,OAAO;AACL,WAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAEA,eAAe,kBAAkB,UAAU;AACzC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAEA,QAAM,sBAAsB;AAC5B,QAAM,eAAe,MAAM,cAAc,GAAG,QAAQ,IAAI,mBAAmB,EAAE;AAC7E,SAAO;AACT;AAEA,eAAe,aAAa,eAAe,UAAU,iBAAiB,MAAM,eAAe,MAAM;AAC/F,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAGA,QAAM,wBAAwB,MAAM,kBAAkB,QAAQ;AAG9D,MAAI;AACJ,gBAAc,SAAS,KAAK,CAAC,cAAc;AACzC,UAAM,mBAAmB,sBAAsB,SAAS;AACxD,QAAI,kBAAkB;AACpB,cAAQ;AAAA,QACN;AAAA,QACA,aAAa,GAAG,QAAQ,IAAI,iBAAiB,IAAI;AAAA,QACjD,YAAY,CAAC,CAAC,iBAAiB;AAAA,MACjC;AAAA,IACF;AACA,WAAO,CAAC,CAAC;AAAA,EACX,CAAC;AAED,MAAI,CAAC,OAAO;AACV,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,UAAM,mBAAmB,sBAAsB,cAAc;AAC7D,QAAI,CAAC,kBAAkB;AACrB,YAAM,IAAI,MAAM,uDAAuD,cAAc,YAAY;AAAA,IACnG;AAEA,YAAQ;AAAA,MACN,WAAW;AAAA,MACX,aAAa,GAAG,QAAQ,IAAI,iBAAiB,IAAI;AAAA,MACjD,YAAY,CAAC,CAAC,iBAAiB;AAAA,IACjC;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,cAAc,MAAM,WAAW;AAErD,MAAI;AACJ,MAAI,cAAc;AAChB,QAAI;AACJ,QAAI,cAAc,eAAe,OAAO;AACtC,eAAS,QAAQ,QAAQ,OAAO,KAAK,QAAQ,OAAO,EAAE,CAAC,CAAC;AAAA,IAC1D,OAAO;AACL,eAAS,QAAQ,QAAQ,cAAc,UAAU;AAAA,IACnD;AACA,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR,2BAA2B,cAAc,UAAU,gBAAgB,MAAM,SAAS;AAAA,MACpF;AAAA,IACF;AAEA,QAAI,OAAO,WAAW;AACpB,kBAAY,MAAM,YAAY,QAAQ,gBAAgB,OAAO,SAAS;AAAA,IACxE;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,UAAU;AAC9B;AAGA,IAAM,yBAAyB;AAAA,EAC7B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO,UAAU,eAAe;AAClC;AAUA,SAAS,cAAcC,KAAI,GAAGC,KAAI,GAAG;AACnC,MAAIC,SAAQF;AACZ,MAAIG,SAAQF;AAIZ,QAAM,aAAa,KAAK,KAAMD,KAAIA,KAAMC,KAAIA,EAAE;AAC9C,MAAI,aAAa,GAAG;AAClB,UAAM,QAAQ,KAAK,MAAMA,IAAGD,EAAC;AAC7B,IAAAE,SAAQ,KAAK,IAAI,KAAK;AACtB,IAAAC,SAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAIA,QAAM,SAAS;AAAA,IACb,iBAAkBD,SAAQ,MAAO;AAAA,IACjC,iBAAkBC,SAAQ,MAAO;AAAA,EACnC;AACA,SAAO;AACT;AAUA,IAAM,iBAAN,MAAqB;AAAA,EACnB,YAAY,2BAA2B;AACrC,SAAK,oBAAoB,0BAA0B;AACnD,SAAK,SAAS,0BAA0B;AACxC,SAAK,gBAAgB,0BAA0B;AAC/C,SAAK,oBAAoB,0BAA0B;AAEnD,QAAI,KAAK,sBAAsB,UAAU,uBAAuB,WAAW;AACzE,WAAK,cAAc,0BAA0B;AAC7C,WAAK,cAAc,0BAA0B;AAAA,IAC/C;AAGA,SAAK,QAAQ;AACb,SAAK,oBAAoB,sBAAsB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoB;AAAA,IAClB,OAAAD;AAAA,IAAO,OAAAC;AAAA,IAAO;AAAA,IAAQ;AAAA,EACxB,GAAG;AACD,UAAM,EAAE,iBAAiB,gBAAgB,IAAI,cAAcD,QAAOC,MAAK;AACvE,YAAQ,KAAK,mBAAmB;AAAA,MAC9B,KAAK,UAAU,kBAAkB;AAC/B,aAAK,QAAS,KAAK,OAAO,SAAS,KAAK,IAAK,kBAAkB;AAC/D;AAAA,MACF,KAAK,UAAU,kBAAkB;AAC/B,aAAK,QAAS,KAAK,OAAO,SAAS,KAAK,IAAK,kBAAkB;AAC/D;AAAA,MACF,KAAK,UAAU,kBAAkB;AAC/B,aAAK,QAAS,KAAK,OAAO,SAAS,KAAK,IAAK,SAAS;AACtD;AAAA,MACF,KAAK,UAAU,kBAAkB;AAC/B,YAAI,KAAK,sBAAsB,UAAU,uBAAuB,YAAY;AAC1E,eAAK,QAAS,KAAK,OAAO,SAAS,KAAK;AAAA,QAC1C,OAAO;AACL,eAAK,QAAQ,KAAK,OAAO,SAAS,KAAK,IAAI,IAAM;AAAA,QACnD;AACA;AAAA,MACF;AACE,cAAM,IAAI,MAAM,+CAA+C,KAAK,iBAAiB,EAAE;AAAA,IAC3F;AAAA,EACF;AACF;AAEA,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKd,YAAY,aAAa,sBAAsB;AAC7C,QAAI,CAAC,eACD,CAAC,wBACD,CAAC,qBAAqB,mBACtB,CAAC,qBAAqB,kBACtB,OAAO,KAAK,qBAAqB,cAAc,EAAE,WAAW,GAAG;AACjE,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAEA,SAAK,KAAK;AACV,SAAK,OAAO,qBAAqB;AACjC,SAAK,eAAe,qBAAqB;AACzC,SAAK,qBAAqB,qBAAqB;AAG/C,SAAK,kBAAkB,CAAC;AACxB,WAAO,KAAK,qBAAqB,eAAe,EAAE,QAAQ,CAAC,iBAAiB;AAC1E,YAAM,iBAAiB,IAAI,eAAe,qBAAqB,gBAAgB,YAAY,CAAC;AAC5F,WAAK,gBAAgB,YAAY,IAAI;AAAA,IACvC,CAAC;AAGD,SAAK,iBAAiB,OAAO,OAAO,CAAC,GAAG,qBAAqB,cAAc;AAE3E,SAAK,SAAS;AAAA,MACZ,OAAO,UAAU,eAAe;AAAA,MAChC,QAAS,KAAK,eAAe,WAAW,SAAa,IAAI;AAAA,MACzD,OAAQ,KAAK,eAAe,UAAU,SAAa,IAAI;AAAA,MACvD,OAAQ,KAAK,eAAe,UAAU,SAAa,IAAI;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,IAAI,OAAO;AACT,UAAMC,QAAO,EAAE,IAAI,KAAK,IAAI,GAAG,KAAK,OAAO;AAC3C,WAAOA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,SAAS;AAEzB,SAAK,OAAO,QAAQ,UAAU,eAAe;AAG7C,QAAI,KAAK,eAAe,WAAW,UAC5B,QAAQ,QAAQ,SAAS,KAAK,eAAe,QAAQ;AAC1D,YAAM,gBAAgB,QAAQ,QAAQ,KAAK,eAAe,MAAM;AAChE,WAAK,OAAO,SAAS,cAAc;AACnC,WAAK,OAAO,SAAU,KAAK,OAAO,SAAS,IAAK,IAAI,KAAK,OAAO;AAChE,WAAK,OAAO,SAAU,KAAK,OAAO,SAAS,IAAK,IAAI,KAAK,OAAO;AAGhE,UAAI,cAAc,WAAW,KAAK,OAAO,WAAW,GAAG;AACrD,aAAK,OAAO,QAAQ,UAAU,eAAe;AAAA,MAC/C,WAAW,cAAc,WAAW,KAAK,OAAO,SAAS,UAAU,sBAAsB;AACvF,aAAK,OAAO,QAAQ,UAAU,eAAe;AAAA,MAC/C;AAAA,IACF;AAGA,QAAI,KAAK,eAAe,UAAU,UAC3B,QAAQ,KAAK,SAAS,KAAK,eAAe,OAAO;AACtD,WAAK,OAAO,QAAQ,QAAQ,KAAK,KAAK,eAAe,KAAK;AAC1D,WAAK,OAAO,QAAS,KAAK,OAAO,QAAQ,KAAM,KAAK,KAAK,OAAO;AAChE,WAAK,OAAO,QAAS,KAAK,OAAO,QAAQ,IAAK,IAAI,KAAK,OAAO;AAG9D,UAAI,KAAK,OAAO,UAAU,UAAU,eAAe,WAC9C,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,UAAU,oBAAoB;AAC/D,aAAK,OAAO,QAAQ,UAAU,eAAe;AAAA,MAC/C;AAAA,IACF;AAGA,QAAI,KAAK,eAAe,UAAU,UAC3B,QAAQ,KAAK,SAAS,KAAK,eAAe,OAAO;AACtD,WAAK,OAAO,QAAQ,QAAQ,KAAK,KAAK,eAAe,KAAK;AAC1D,WAAK,OAAO,QAAS,KAAK,OAAO,QAAQ,KAAM,KAAK,KAAK,OAAO;AAChE,WAAK,OAAO,QAAS,KAAK,OAAO,QAAQ,IAAK,IAAI,KAAK,OAAO;AAG9D,UAAI,KAAK,OAAO,UAAU,UAAU,eAAe,WAC9C,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,UAAU,oBAAoB;AAC/D,aAAK,OAAO,QAAQ,UAAU,eAAe;AAAA,MAC/C;AAAA,IACF;AAGA,WAAO,OAAO,KAAK,eAAe,EAAE,QAAQ,CAAC,mBAAmB;AAC9D,qBAAe,oBAAoB,KAAK,MAAM;AAAA,IAChD,CAAC;AAAA,EACH;AACF;AAOA,IAAM,mBAAN,MAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrB,YAAY,eAAe,SAAS,UAAU;AAC5C,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAEA,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,qBAAqB;AAAA,IACvC;AAEA,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,KAAK,QAAQ;AAGlB,SAAK,oBAAoB,QAAQ,QAAQ,cAAc,UAAU;AACjE,SAAK,aAAa,CAAC;AACnB,WAAO,KAAK,KAAK,kBAAkB,UAAU,EAAE,QAAQ,CAAC,gBAAgB;AACtE,YAAM,uBAAuB,KAAK,kBAAkB,WAAW,WAAW;AAC1E,WAAK,WAAW,WAAW,IAAI,IAAI,UAAU,aAAa,oBAAoB;AAAA,IAChF,CAAC;AAGD,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,IAAI,iBAAiB;AACnB,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACT,UAAMA,QAAO,CAAC;AACd,WAAO,OAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,cAAc;AACpD,MAAAA,MAAK,KAAK,UAAU,IAAI;AAAA,IAC1B,CAAC;AACD,WAAOA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAClB,WAAO,OAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,cAAc;AACpD,gBAAU,kBAAkB,KAAK,cAAc,OAAO;AAAA,IACxD,CAAC;AAAA,EACH;AACF;;;AC3XA,IAAM,wBAAwB;AAC9B,IAAM,kBAAkB;AAExB,IAAM,oBAAN,cAAgC,SAAS;AAAA,EAExC,cAAc;AAEb,UAAM;AAEN,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,kBAAmB,QAAS;AAE3B,QAAK,KAAK,UAAU,QAAS;AAE5B,aAAO;AAAA,IAER;AAEA,SAAK,SAAS;AACd,SAAK,SAAU,CAAE,UAAW;AAE3B,UAAK,MAAM,QAAS;AAEnB,cAAM,SAAS,SAAS,KAAK;AAC7B,cAAM,SAAS,cAAc;AAAA,MAE9B;AAAA,IAED,CAAE;AAEF,WAAO;AAAA,EAER;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAmB,OAAQ;AAE1B,UAAM,kBAAmB,KAAM;AAE/B,QAAK,CAAE,KAAK,iBAAmB;AAG/B,SAAK,iBAAiB,kBAAkB;AAGxC,WAAO,OAAQ,KAAK,iBAAiB,UAAW,EAAE,QAAS,CAAE,cAAe;AAG3E,aAAO,OAAQ,UAAU,eAAgB,EAAE,QAAS,CAAE,mBAAoB;AAEzE,cAAM,EAAE,WAAW,SAAS,SAAS,OAAAC,QAAO,kBAAkB,IAAI;AAIlE,YAAK,CAAE,UAAY;AAGnB,YAAK,sBAAsB,UAA0B,uBAAuB,YAAa;AAExF,oBAAU,UAAUA;AAAA,QAErB,WAAY,sBAAsB,UAA0B,uBAAuB,WAAY;AAE9F,oBAAU,WAAW;AAAA,YACpB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACRA;AAAA,UACD;AAEA,oBAAU,SAAS;AAAA,YAClB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACRA;AAAA,UACD;AAAA,QAED;AAAA,MAED,CAAE;AAAA,IAEH,CAAE;AAAA,EAEH;AAED;AAOA,SAAS,UAAW,kBAAkB,OAAQ;AAG7C,SAAO,OAAQ,iBAAiB,UAAW,EAAE,QAAS,CAAE,cAAe;AAEtE,UAAM,EAAE,MAAM,oBAAoB,gBAAgB,IAAI;AAEtD,QAAK,SAAS,UAA0B,cAAc,UAAW;AAEhE,gBAAU,iBAAiB,MAAM,gBAAiB,kBAAmB;AACrE,UAAK,UAAU,gBAAiB;AAG/B,cAAM,iBAAiB,IAAI,eAAgB,IAAM;AACjD,cAAM,WAAW,IAAI,kBAAmB,EAAE,OAAO,IAAS,CAAE;AAC5D,cAAM,SAAS,IAAI,KAAM,gBAAgB,QAAS;AAClD,kBAAU,eAAe,IAAK,MAAO;AAAA,MAEtC,OAAO;AAEN,gBAAQ,KAAM,6BAA6B,UAAU,kBAAkB,2BAA2B,UAAU,EAAE,EAAG;AAAA,MAElH;AAAA,IAED;AAGA,WAAO,OAAQ,eAAgB,EAAE,QAAS,CAAE,mBAAoB;AAE/D,YAAM,EAAE,eAAe,aAAa,aAAa,kBAAkB,IAAI;AAGvE,UAAK,sBAAsB,UAA0B,uBAAuB,WAAY;AAEvF,uBAAe,UAAU,MAAM,gBAAiB,WAAY;AAC5D,uBAAe,UAAU,MAAM,gBAAiB,WAAY;AAG5D,YAAK,CAAE,eAAe,SAAU;AAE/B,kBAAQ,KAAM,kBAAkB,WAAW,eAAgB;AAC3D;AAAA,QAED;AAEA,YAAK,CAAE,eAAe,SAAU;AAE/B,kBAAQ,KAAM,kBAAkB,WAAW,eAAgB;AAC3D;AAAA,QAED;AAAA,MAED;AAGA,qBAAe,YAAY,MAAM,gBAAiB,aAAc;AAChE,UAAK,CAAE,eAAe,WAAY;AAEjC,gBAAQ,KAAM,kBAAkB,aAAa,eAAgB;AAAA,MAE9D;AAAA,IAED,CAAE;AAAA,EAEH,CAAE;AAEH;AAEA,SAAS,+BAAgC,iBAAiB,OAAQ;AAGjE,YAAW,gBAAgB,kBAAkB,KAAM;AAGnD,MAAK,gBAAgB,QAAS;AAE7B,UAAM,SAAU,CAAE,UAAW;AAE5B,UAAK,MAAM,QAAS;AAEnB,cAAM,SAAS,SAAS,gBAAgB;AACxC,cAAM,SAAS,cAAc;AAAA,MAE9B;AAAA,IAED,CAAE;AAAA,EAEH;AAGA,kBAAgB,IAAK,KAAM;AAE5B;AAEA,IAAM,2BAAN,MAA+B;AAAA,EAE9B,YAAa,aAAa,MAAM,SAAS,MAAO;AAE/C,SAAK,aAAa;AAClB,SAAK,OAAO;AACZ,SAAK,cAAc,CAAC;AACpB,SAAK,SAAS;AAGd,QAAK,CAAE,KAAK,YAAa;AAExB,WAAK,aAAa,IAAI,WAAW;AAAA,IAElC;AAAA,EAED;AAAA,EAEA,QAAS,MAAO;AAEf,SAAK,OAAO;AAEZ,WAAO;AAAA,EAER;AAAA,EAEA,sBAAuB,YAAa;AAEnC,UAAM,kBAAkB,IAAI,kBAAkB;AAC9C,QAAI,QAAQ;AAEZ,eAAW,iBAAkB,aAAa,CAAE,UAAW;AAEtD,YAAM,gBAAgB,MAAM;AAE5B,UAAK,cAAc,kBAAkB,qBAAqB,CAAE,cAAc,QAAU;AAEpF,mBAAc,eAAe,KAAK,MAAM,eAAgB,EAAE,KAAM,CAAE,EAAE,SAAS,UAAU,MAAO;AAE7F,wBAAgB,mBAAmB,IAAI;AAAA,UACtC;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAEA,cAAM,cAAc,KAAK,YAAa,gBAAgB,iBAAiB,QAAS;AAChF,YAAK,aAAc;AAElB,kBAAQ,YAAY,MAAM,MAAM;AAEhC,yCAAgC,iBAAiB,KAAM;AAEvD,cAAK,KAAK,OAAS,MAAK,OAAQ,KAAM;AAAA,QAEvC,OAAO;AAEN,cAAK,CAAE,KAAK,YAAa;AAExB,kBAAM,IAAI,MAAO,qBAAsB;AAAA,UAExC;AAEA,eAAK,WAAW,QAAS,EAAG;AAC5B,eAAK,WAAW;AAAA,YAAM,gBAAgB,iBAAiB;AAAA,YAAU,CAAE,UAAW;AAE7E,mBAAK,YAAa,gBAAgB,iBAAiB,QAAS,IAAI;AAEhE,sBAAQ,MAAM,MAAM,MAAM;AAE1B,6CAAgC,iBAAiB,KAAM;AAEvD,kBAAK,KAAK,OAAS,MAAK,OAAQ,KAAM;AAAA,YAEvC;AAAA,YACA;AAAA,YACA,MAAM;AAEL,oBAAM,IAAI,MAAO,SAAS,gBAAgB,iBAAiB,QAAQ,wBAAyB;AAAA,YAE7F;AAAA,UAAE;AAAA,QAEH;AAAA,MAED,CAAE,EAAE,MAAO,CAAEC,SAAS;AAErB,gBAAQ,KAAMA,IAAI;AAAA,MAEnB,CAAE;AAAA,IAEH,CAAE;AAEF,eAAW,iBAAkB,gBAAgB,MAAM;AAElD,sBAAgB,mBAAmB;AACnC,sBAAgB,OAAQ,KAAM;AAC9B,cAAQ;AAAA,IAET,CAAE;AAEF,WAAO;AAAA,EAER;AAED;;;AC9SA,IAAM,oBAAN,MAAwB;AAAA,EAEvB,YAAa,SAASC,WAAU,YAAY,uBAAuB,yBAA0B;AAE5F,SAAK,UAAU;AACf,SAAK,WAAWA;AAChB,SAAK,aAAa;AAClB,SAAK,iBAAiB;AACtB,SAAK,0BAA0B;AAC/B,SAAK,gBAAgB,KAAK,UAAU,KAAM,IAAK;AAE/C,UAAM,UAAUA,UAAS,GAAG,WAAW;AAIvC,QAAK,yBAAyB,oBAAoB,QAAS;AAG1D,YAAM,mBAAmB,IAAI,sBAAuB,EAAG;AACvD,cAAQ,cAAc,iBAAiB;AAEvC,YAAM,KAAKA,UAAS,WAAW;AAG/B,cAAS,QAAQ,2BAA4B;AAAA,QAE5C,KAAK;AACJ,aAAG,aAAc,UAAW;AAC5B;AAAA,QAED,KAAK;AACJ,aAAG,aAAc,wBAAyB;AAC1C;AAAA,MAEF;AAEA,WAAK,iBAAiB,IAAI,eAAgB,SAAS,EAAG;AAEtD,WAAK,WAAW,iBAAkB,oBAAoB,MAAM;AAE3D,aAAK,iBAAiB;AAAA,MAEvB,CAAE;AAAA,IAEH;AAIA,YAAQ,sBAAuB,KAAK,aAAc;AAAA,EAEnD;AAAA,EAEA,mBAAmB;AAElB,UAAM,oBAAoB,KAAK,SAAS,WAAW,IAAK,KAAK,QAAQ,WAAY;AAEjF,QAAK,mBAAoB;AAExB,YAAM,UAAU,KAAK,eAAe,qBAAsB,KAAK,UAAW;AAE1E,UAAK,SAAU;AAEd,0BAAkB,iBAAiB;AAEnC,aAAK,QAAQ,YAAY,mBAAmB;AAAA,MAE7C;AAAA,IAED;AAAA,EAED;AAAA,EAEA,UAAWC,OAAM,SAAU;AAI1B,QAAK,CAAE,KAAK,SAAU;AAErB;AAAA,IAED;AAEA,UAAM,UAAU,QAAQ;AACxB,YAAQ,sBAAuB,KAAK,aAAc;AAElD,UAAM,gBAAgB,QAAQ,iBAAkB,KAAK,UAAW;AAChE,QAAK,eAAgB;AAGpB,WAAK,QAAQ,WAAW,GAAG,UAAW,cAAc,8BAA+B;AACnF,WAAK,QAAQ,WAAW,YAAY;AAIpC,YAAM,kBAAkB,KAAK;AAAA,QAAK;AAAA,QACjC,KAAK;AAAA,UAAK,cAAc,sBAAsB;AAAA,UAC7C,KAAK;AAAA,YAAK,cAAc,sBAAsB;AAAA,YAC7C,cAAc,sBAAsB;AAAA,UAAE;AAAA,QAAE;AAAA,MAAE;AAE7C,WAAK,QAAQ,iBAAiB,MAAM;AAAA,QACnC,cAAc,sBAAsB,IAAI;AAAA,QACxC,cAAc,sBAAsB,IAAI;AAAA,QACxC,cAAc,sBAAsB,IAAI;AAAA,MAAgB;AACzD,WAAK,QAAQ,iBAAiB,YAAY;AAC1C,WAAK,QAAQ,iBAAiB,SAAS,KAAM,cAAc,qBAAsB;AAEjF,UAAK,KAAK,yBAA0B;AAEnC,aAAK,wBAAwB;AAC7B,aAAK,0BAA0B;AAAA,MAEhC;AAAA,IAED;AAAA,EAED;AAAA,EAEA,UAAU;AAET,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,iBAAiB;AAAA,EAEvB;AAED;AAEO,IAAM,mBAAN,cAA+B,MAAM;AAAA,EAE3C,YAAaD,WAAU,wBAAwB,MAAO;AAErD,UAAM;AAEN,SAAK,aAAa,IAAI,WAAW;AACjC,SAAK,WAAW,YAAY;AAC5B,SAAK,IAAK,KAAK,UAAW;AAE1B,SAAK,mBAAmB,IAAI,iBAAiB;AAC7C,SAAK,iBAAiB,YAAY;AAClC,SAAK,IAAK,KAAK,gBAAiB;AAIhC,SAAK,cAAc;AAEnB,QAAI,oBAAoB;AACxB,QAAI,oBAAoB;AACxB,IAAAA,UAAS,GAAG,iBAAkB,gBAAgB,MAAM;AAEnD,YAAM,UAAUA,UAAS,GAAG,WAAW;AAEvC,UAAK,uBAAuB,SAAU;AAErC,gBAAQ,kBAAmB;AAAA,UAE1B,kBAAkB,QAAQ;AAAA,QAE3B,CAAE,EAAE,KAAM,CAAE,UAAW;AAEtB,8BAAoB,IAAI,kBAAmB,MAAMA,WAAU,OAAO,uBAAuB,MAAM;AAE9F,gCAAoB;AAGpB,iBAAK,cAAe,EAAE,MAAM,kBAAkB,CAAE;AAAA,UAEjD,CAAE;AAAA,QAEH,CAAE;AAAA,MAEH;AAAA,IAED,CAAE;AAEF,IAAAA,UAAS,GAAG,iBAAkB,cAAc,MAAM;AAEjD,UAAK,mBAAoB;AAExB,0BAAkB,QAAQ;AAC1B,4BAAoB;AAAA,MAErB;AAEA,UAAK,mBAAoB;AAGxB,aAAK,cAAe,EAAE,MAAM,gBAAgB,CAAE;AAAA,MAE/C;AAAA,IAED,CAAE;AAGF,SAAK,UAAU,MAAM;AAEpB,UAAK,mBAAoB;AAExB,0BAAkB,QAAQ;AAC1B,4BAAoB;AAAA,MAErB;AAEA,WAAK,OAAQ,KAAK,UAAW;AAC7B,WAAK,aAAa;AAElB,WAAK,OAAQ,KAAK,gBAAiB;AACnC,WAAK,mBAAmB;AAExB,WAAK,cAAc;AAAA,IAEpB;AAAA,EAED;AAED;;;ACpNA,IAAME,WAAU,IAAI,QAAQ;AAC5B,IAAMC,WAAU,IAAI,QAAQ;AAE5B,IAAM,uBAAN,MAA2B;AAAA,EAE1B,YAAa,WAAW,YAAY,MAAM,YAAY,SAAU;AAE/D,SAAK,aAAa;AAClB,SAAK,YAAY;AACjB,SAAK,SAAS;AAEd,QAAI;AAEJ,QAAK,CAAE,WAAW,CAAE,QAAQ,aAAa,QAAQ,cAAc,UAAW;AAEzE,iBAAW,IAAI,eAAgB,GAAG,IAAI,EAAG;AAAA,IAE1C,WAAY,QAAQ,cAAc,OAAQ;AAEzC,iBAAW,IAAI,YAAa,GAAG,GAAG,CAAE;AAAA,IAErC;AAEA,UAAM,WAAW,IAAI,qBAAqB;AAE1C,SAAK,WAAW,IAAI,cAAe,UAAU,UAAU,EAAG;AAC1D,SAAK,SAAS,gBAAgB;AAC9B,SAAK,SAAS,eAAe,SAAU,gBAAiB;AACxD,SAAK,SAAS,aAAa;AAC3B,SAAK,SAAS,gBAAgB;AAC9B,SAAK,UAAU,IAAK,KAAK,QAAS;AAElC,SAAK,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EAED;AAAA,EAEA,aAAa;AAEZ,UAAM,gBAAgB;AACtB,UAAM,SAAS,KAAK,WAAW;AAE/B,QAAI,QAAQ;AAEZ,aAAU,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAO;AAE/C,YAAM,QAAQ,OAAQ,KAAK,OAAQ,CAAE,CAAE;AAEvC,UAAK,MAAM,SAAU;AAEpB,QAAAA,SAAQ,UAAW,MAAM,eAAe,aAAc;AACtD,QAAAD,SAAQ,QAAS,MAAM,UAAU,MAAM,YAAYC,QAAQ;AAC3D,aAAK,SAAS,YAAa,GAAGD,QAAQ;AAEtC;AAAA,MAED;AAAA,IAED;AAEA,SAAK,SAAS,QAAQ;AACtB,SAAK,SAAS,eAAe,cAAc;AAAA,EAE5C;AAED;;;ACxFA,IAAM,cAAN,cAA0B,SAAS;AAAA,EAElC,YAAa,YAAa;AAEzB,UAAM;AAEN,SAAK,aAAa;AAClB,SAAK,mBAAmB;AACxB,SAAK,SAAS;AAEd,SAAK,OAAO;AAAA,EAEb;AAAA,EAEA,kBAAmB,OAAQ;AAE1B,UAAM,kBAAmB,KAAM;AAE/B,QAAK,KAAK,kBAAmB;AAE5B,WAAK,iBAAiB,WAAW;AAAA,IAElC;AAAA,EAED;AAED;AAEA,IAAM,qBAAN,MAAyB;AAAA,EAExB,YAAa,aAAa,MAAM,SAAS,MAAO;AAE/C,SAAK,aAAa;AAClB,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAEf;AAAA,EAEA,QAAS,MAAO;AAEf,SAAK,OAAO;AAEZ,WAAO;AAAA,EAER;AAAA,EAEA,gBAAiB,YAAY,SAAU;AAEtC,UAAM,YAAY,IAAI,YAAa,UAAW;AAE9C,eAAW,iBAAkB,aAAa,CAAE,UAAW;AAEtD,YAAM,gBAAgB,MAAM;AAE5B,UAAK,cAAc,QAAQ,CAAE,UAAU,kBAAmB;AAEzD,kBAAU,gBAAgB;AAG1B,YAAK,YAAY,UAAa,YAAY,WAAY;AAErD,oBAAU,mBAAmB,IAAI,qBAAsB,WAAW,YAAY,KAAK,MAAM,cAAc,YAAY,EAAE,WAAW,SAAS,CAAE;AAAA,QAE5I,WAAY,YAAY,SAAU;AAEjC,oBAAU,mBAAmB,IAAI,qBAAsB,WAAW,YAAY,KAAK,MAAM,cAAc,YAAY,EAAE,WAAW,MAAM,CAAE;AAAA,QAEzI,WAAY,YAAY,QAAS;AAEhC,oBAAU,mBAAmB,IAAI,gBAAiB,WAAW,YAAY,KAAK,MAAM,cAAc,YAAY,KAAK,YAAY,KAAK,MAAO;AAAA,QAE5I;AAAA,MAED;AAEA,iBAAW,UAAU;AAAA,IAEtB,CAAE;AAEF,eAAW,iBAAkB,gBAAgB,MAAM;AAElD,iBAAW,UAAU;AAAA,IAKtB,CAAE;AAEF,WAAO;AAAA,EAER;AAED;;;AChGA,IAAM,WAAN,cAAuB,SAAS;AAAA,EAE/B,YAAaE,WAAW;AAEvB,UAAM;AAEN,UAAMC,UAAS,IAAI,QAAQ;AAE3B,UAAM,gBAAgB,oBAAI,IAAI;AAE9B,UAAM,KAAKD,UAAS;AAEpB,OAAG,iBAAkB,kBAAkB,WAAS;AAE/C,YAAM,QAAQ,MAAM;AACpB,YAAM,SAAS,MAAM;AAErB,YAAM,iBAAiB,GAAG,kBAAkB;AAE5C,UAAI,gBAAgB;AAEpB,iBAAY,CAAE,OAAO,IAAK,KAAK,eAAgB;AAE9C,YAAK,OAAO,IAAK,KAAM,MAAM,OAAQ;AAEpC,eAAK,SAAS,QAAQ;AACtB,eAAK,SAAS,QAAQ;AACtB,eAAK,OAAQ,IAAK;AAElB,wBAAc,OAAQ,KAAM;AAE5B,0BAAgB;AAAA,QAEjB;AAAA,MAED;AAEA,iBAAY,SAAS,QAAS;AAE7B,YAAK,cAAc,IAAK,KAAM,MAAM,OAAQ;AAE3C,gBAAM,OAAO,MAAM,QAAS,MAAM,YAAY,cAAe;AAC7D,UAAAC,QAAO,UAAW,KAAK,UAAU,MAAO;AAExC,gBAAM,UAAU,MAAM;AAEtB,cAAI,OAAO,OAAO;AAClB,cAAI,OAAO,OAAO;AAClB,cAAI,OAAO,OAAO;AAClB,cAAI,OAAO,OAAO;AAElB,qBAAY,SAAS,SAAU;AAE9B,mBAAO,KAAK,IAAK,MAAM,MAAM,CAAE;AAC/B,mBAAO,KAAK,IAAK,MAAM,MAAM,CAAE;AAC/B,mBAAO,KAAK,IAAK,MAAM,MAAM,CAAE;AAC/B,mBAAO,KAAK,IAAK,MAAM,MAAM,CAAE;AAAA,UAEhC;AAEA,gBAAMC,SAAQ,OAAO;AACrB,gBAAMC,UAAS,OAAO;AAEtB,gBAAM,WAAW,IAAI,YAAaD,QAAO,MAAMC,OAAO;AACtD,gBAAM,WAAW,IAAI,kBAAmB,EAAE,OAAO,WAAW,KAAK,OAAO,EAAE,CAAE;AAE5E,gBAAM,OAAO,IAAI,KAAM,UAAU,QAAS;AAC1C,eAAK,SAAS,sBAAuBF,OAAO;AAC5C,eAAK,WAAW,sBAAuBA,OAAO;AAC9C,eAAK,IAAK,IAAK;AAEf,wBAAc,IAAK,OAAO,IAAK;AAE/B,0BAAgB;AAAA,QAEjB;AAAA,MAED;AAEA,UAAK,eAAgB;AAEpB,aAAK,cAAe,EAAE,MAAM,gBAAgB,CAAE;AAAA,MAE/C;AAAA,IAED,CAAE;AAAA,EAEH;AAED;", + "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"] +} diff --git a/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js b/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js index 6a5587c..0446952 100644 --- a/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js +++ b/site/real_game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js @@ -1,789 +1,7 @@ import { - EventDispatcher, - MOUSE, - MathUtils, - Plane, - Quaternion, - Ray, - Spherical, - TOUCH, - Vector2, - Vector3 -} from "./chunk-IS2ZBFBB.js"; - -// node_modules/three/examples/jsm/controls/OrbitControls.js -var _changeEvent = { type: "change" }; -var _startEvent = { type: "start" }; -var _endEvent = { type: "end" }; -var _ray = new Ray(); -var _plane = 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(_changeEvent); - scope.update(); - state = STATE.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 position = scope.object.position; - offset.copy(position).sub(scope.target); - offset.applyQuaternion(quat); - spherical.setFromVector3(offset); - if (scope.autoRotate && state === STATE.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 max = scope.maxAzimuthAngle; - if (isFinite(min) && isFinite(max)) { - if (min < -Math.PI) min += twoPI; - else if (min > Math.PI) min -= twoPI; - if (max < -Math.PI) max += twoPI; - else if (max > Math.PI) max -= twoPI; - if (min <= max) { - spherical.theta = Math.max(min, Math.min(max, spherical.theta)); - } else { - spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, 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 * scale); - zoomChanged = prevRadius != spherical.radius; - } - offset.setFromSpherical(spherical); - offset.applyQuaternion(quatInverse); - position.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 * scale); - 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 / scale)); - 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 { - _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); - _ray.intersectPlane(_plane, 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 / scale)); - if (prevZoom !== scope.object.zoom) { - scope.object.updateProjectionMatrix(); - zoomChanged = true; - } - } - scale = 1; - performCursorZoom = false; - if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS || lastTargetPosition.distanceToSquared(scope.target) > EPS) { - scope.dispatchEvent(_changeEvent); - 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", onContextMenu); - scope.domElement.removeEventListener("pointerdown", onPointerDown); - scope.domElement.removeEventListener("pointercancel", onPointerUp); - scope.domElement.removeEventListener("wheel", onMouseWheel); - scope.domElement.removeEventListener("pointermove", onPointerMove); - scope.domElement.removeEventListener("pointerup", onPointerUp); - const document2 = scope.domElement.getRootNode(); - document2.removeEventListener("keydown", interceptControlDown, { capture: true }); - if (scope._domElementKeyEvents !== null) { - scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); - scope._domElementKeyEvents = null; - } - }; - const scope = this; - const STATE = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_PAN: 4, - TOUCH_DOLLY_PAN: 5, - TOUCH_DOLLY_ROTATE: 6 - }; - let state = STATE.NONE; - const EPS = 1e-6; - const spherical = new Spherical(); - const sphericalDelta = new Spherical(); - let scale = 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 position = scope.object.position; - offset.copy(position).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) { - scale /= 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) { - scale *= dollyScale; - } else { - console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); - scope.enableZoom = false; - } - } - function updateZoomParameters(x, y) { - if (!scope.zoomToCursor) { - return; - } - performCursorZoom = true; - const rect = scope.domElement.getBoundingClientRect(); - const dx = x - rect.left; - const dy = y - 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 position = getSecondPointerPosition(event); - const x = 0.5 * (event.pageX + position.x); - const y = 0.5 * (event.pageY + position.y); - rotateStart.set(x, y); - } - } - function handleTouchStartPan(event) { - if (pointers.length === 1) { - panStart.set(event.pageX, event.pageY); - } else { - const position = getSecondPointerPosition(event); - const x = 0.5 * (event.pageX + position.x); - const y = 0.5 * (event.pageY + position.y); - panStart.set(x, y); - } - } - function handleTouchStartDolly(event) { - const position = getSecondPointerPosition(event); - const dx = event.pageX - position.x; - const dy = event.pageY - position.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 position = getSecondPointerPosition(event); - const x = 0.5 * (event.pageX + position.x); - const y = 0.5 * (event.pageY + position.y); - rotateEnd.set(x, y); - } - 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 position = getSecondPointerPosition(event); - const x = 0.5 * (event.pageX + position.x); - const y = 0.5 * (event.pageY + position.y); - panEnd.set(x, y); - } - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - } - function handleTouchMoveDolly(event) { - const position = getSecondPointerPosition(event); - const dx = event.pageX - position.x; - const dy = event.pageY - position.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 + position.x) * 0.5; - const centerY = (event.pageY + position.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 onPointerDown(event) { - if (scope.enabled === false) return; - if (pointers.length === 0) { - scope.domElement.setPointerCapture(event.pointerId); - scope.domElement.addEventListener("pointermove", onPointerMove); - scope.domElement.addEventListener("pointerup", onPointerUp); - } - if (isTrackingPointer(event)) return; - addPointer(event); - if (event.pointerType === "touch") { - onTouchStart(event); - } else { - onMouseDown(event); - } - } - function onPointerMove(event) { - if (scope.enabled === false) return; - if (event.pointerType === "touch") { - onTouchMove(event); - } else { - onMouseMove(event); - } - } - function onPointerUp(event) { - removePointer(event); - switch (pointers.length) { - case 0: - scope.domElement.releasePointerCapture(event.pointerId); - scope.domElement.removeEventListener("pointermove", onPointerMove); - scope.domElement.removeEventListener("pointerup", onPointerUp); - scope.dispatchEvent(_endEvent); - state = STATE.NONE; - break; - case 1: - const pointerId = pointers[0]; - const position = pointerPositions[pointerId]; - onTouchStart({ pointerId, pageX: position.x, pageY: position.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 = STATE.DOLLY; - break; - case MOUSE.ROTATE: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enablePan === false) return; - handleMouseDownPan(event); - state = STATE.PAN; - } else { - if (scope.enableRotate === false) return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } - break; - case MOUSE.PAN: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enableRotate === false) return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } else { - if (scope.enablePan === false) return; - handleMouseDownPan(event); - state = STATE.PAN; - } - break; - default: - state = STATE.NONE; - } - if (state !== STATE.NONE) { - scope.dispatchEvent(_startEvent); - } - } - function onMouseMove(event) { - switch (state) { - case STATE.ROTATE: - if (scope.enableRotate === false) return; - handleMouseMoveRotate(event); - break; - case STATE.DOLLY: - if (scope.enableZoom === false) return; - handleMouseMoveDolly(event); - break; - case STATE.PAN: - if (scope.enablePan === false) return; - handleMouseMovePan(event); - break; - } - } - function onMouseWheel(event) { - if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE) return; - event.preventDefault(); - scope.dispatchEvent(_startEvent); - handleMouseWheel(customWheelEvent(event)); - scope.dispatchEvent(_endEvent); - } - 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 document2 = scope.domElement.getRootNode(); - document2.addEventListener("keyup", interceptControlUp, { passive: true, capture: true }); - } - } - function interceptControlUp(event) { - if (event.key === "Control") { - controlActive = false; - const document2 = scope.domElement.getRootNode(); - document2.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 = STATE.TOUCH_ROTATE; - break; - case TOUCH.PAN: - if (scope.enablePan === false) return; - handleTouchStartPan(event); - state = STATE.TOUCH_PAN; - break; - default: - state = STATE.NONE; - } - break; - case 2: - switch (scope.touches.TWO) { - case TOUCH.DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) return; - handleTouchStartDollyPan(event); - state = STATE.TOUCH_DOLLY_PAN; - break; - case TOUCH.DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) return; - handleTouchStartDollyRotate(event); - state = STATE.TOUCH_DOLLY_ROTATE; - break; - default: - state = STATE.NONE; - } - break; - default: - state = STATE.NONE; - } - if (state !== STATE.NONE) { - scope.dispatchEvent(_startEvent); - } - } - function onTouchMove(event) { - trackPointer(event); - switch (state) { - case STATE.TOUCH_ROTATE: - if (scope.enableRotate === false) return; - handleTouchMoveRotate(event); - scope.update(); - break; - case STATE.TOUCH_PAN: - if (scope.enablePan === false) return; - handleTouchMovePan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) return; - handleTouchMoveDollyPan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) return; - handleTouchMoveDollyRotate(event); - scope.update(); - break; - default: - state = STATE.NONE; - } - } - function onContextMenu(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 position = pointerPositions[event.pointerId]; - if (position === void 0) { - position = new Vector2(); - pointerPositions[event.pointerId] = position; - } - position.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", onContextMenu); - scope.domElement.addEventListener("pointerdown", onPointerDown); - scope.domElement.addEventListener("pointercancel", onPointerUp); - scope.domElement.addEventListener("wheel", onMouseWheel, { passive: false }); - const document = scope.domElement.getRootNode(); - document.addEventListener("keydown", interceptControlDown, { passive: true, capture: true }); - this.update(); - } -}; + OrbitControls +} from "./chunk-7WGWDPRB.js"; +import "./chunk-33KXLYU5.js"; export { OrbitControls }; 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 index 3c34e53..9865211 100644 --- 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 @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../three/examples/jsm/controls/OrbitControls.js"], - "sourcesContent": ["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"], - "mappings": "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", - "names": ["domElement", "document", "panLeft", "panUp", "pan"] + "sources": [], + "sourcesContent": [], + "mappings": "", + "names": [] }