@threepipe/plugins-extra-importers 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../node_modules/three/examples/jsm/loaders/TDSLoader.js","../../../node_modules/three/examples/jsm/libs/fflate.module.js","../../../node_modules/three/examples/jsm/loaders/3MFLoader.js","../../../node_modules/three/examples/jsm/loaders/TGALoader.js","../../../node_modules/three/examples/jsm/loaders/ColladaLoader.js","../../../node_modules/three/examples/jsm/loaders/AMFLoader.js","../../../node_modules/three/examples/jsm/loaders/GCodeLoader.js","../../../node_modules/three/examples/jsm/loaders/BVHLoader.js","../../../node_modules/three/examples/jsm/loaders/VOXLoader.js","../../../node_modules/three/examples/jsm/loaders/MDDLoader.js","../../../node_modules/three/examples/jsm/loaders/PCDLoader.js","../../../node_modules/three/examples/jsm/loaders/TiltLoader.js","../../../node_modules/three/examples/jsm/libs/chevrotain.module.min.js","../../../node_modules/three/examples/jsm/loaders/VRMLLoader.js","../../../node_modules/three/examples/jsm/loaders/LDrawLoader.js","../../../node_modules/three/examples/jsm/loaders/VTKLoader.js","../../../node_modules/three/examples/jsm/loaders/XYZLoader.js","../src/index.ts"],"sourcesContent":["import {\n\tAdditiveBlending,\n\tBufferGeometry,\n\tColor,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tLoaderUtils,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tTextureLoader\n} from 'three';\n\n/**\n * Autodesk 3DS three.js file loader, based on lib3ds.\n *\n * Loads geometry with uv and materials basic properties with texture support.\n *\n * @class TDSLoader\n * @constructor\n */\n\nclass TDSLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.debug = false;\n\n\t\tthis.group = null;\n\n\t\tthis.materials = [];\n\t\tthis.meshes = [];\n\n\t}\n\n\t/**\n\t * Load 3ds file from url.\n\t *\n\t * @method load\n\t * @param {[type]} url URL for the file.\n\t * @param {Function} onLoad onLoad callback, receives group Object3D as argument.\n\t * @param {Function} onProgress onProgress callback.\n\t * @param {Function} onError onError callback.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data, 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\t/**\n\t * Parse arraybuffer data and load 3ds file.\n\t *\n\t * @method parse\n\t * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n\t * @param {String} path Path for external resources.\n\t * @return {Group} Group loaded from 3ds file.\n\t */\n\tparse( arraybuffer, path ) {\n\n\t\tthis.group = new Group();\n\t\tthis.materials = [];\n\t\tthis.meshes = [];\n\n\t\tthis.readFile( arraybuffer, path );\n\n\t\tfor ( let i = 0; i < this.meshes.length; i ++ ) {\n\n\t\t\tthis.group.add( this.meshes[ i ] );\n\n\t\t}\n\n\t\treturn this.group;\n\n\t}\n\n\t/**\n\t * Decode file content to read 3ds data.\n\t *\n\t * @method readFile\n\t * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n\t * @param {String} path Path for external resources.\n\t */\n\treadFile( arraybuffer, path ) {\n\n\t\tconst data = new DataView( arraybuffer );\n\t\tconst chunk = new Chunk( data, 0, this.debugMessage );\n\n\t\tif ( chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC ) {\n\n\t\t\tlet next = chunk.readChunk();\n\n\t\t\twhile ( next ) {\n\n\t\t\t\tif ( next.id === M3D_VERSION ) {\n\n\t\t\t\t\tconst version = next.readDWord();\n\t\t\t\t\tthis.debugMessage( '3DS file version: ' + version );\n\n\t\t\t\t} else if ( next.id === MDATA ) {\n\n\t\t\t\t\tthis.readMeshData( next, path );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.debugMessage( 'Unknown main chunk: ' + next.hexId );\n\n\t\t\t\t}\n\n\t\t\t\tnext = chunk.readChunk();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.debugMessage( 'Parsed ' + this.meshes.length + ' meshes' );\n\n\t}\n\n\t/**\n\t * Read mesh data chunk.\n\t *\n\t * @method readMeshData\n\t * @param {Chunk} chunk to read mesh from\n\t * @param {String} path Path for external resources.\n\t */\n\treadMeshData( chunk, path ) {\n\n\t\tlet next = chunk.readChunk();\n\n\t\twhile ( next ) {\n\n\t\t\tif ( next.id === MESH_VERSION ) {\n\n\t\t\t\tconst version = + next.readDWord();\n\t\t\t\tthis.debugMessage( 'Mesh Version: ' + version );\n\n\t\t\t} else if ( next.id === MASTER_SCALE ) {\n\n\t\t\t\tconst scale = next.readFloat();\n\t\t\t\tthis.debugMessage( 'Master scale: ' + scale );\n\t\t\t\tthis.group.scale.set( scale, scale, scale );\n\n\t\t\t} else if ( next.id === NAMED_OBJECT ) {\n\n\t\t\t\tthis.debugMessage( 'Named Object' );\n\t\t\t\tthis.readNamedObject( next );\n\n\t\t\t} else if ( next.id === MAT_ENTRY ) {\n\n\t\t\t\tthis.debugMessage( 'Material' );\n\t\t\t\tthis.readMaterialEntry( next, path );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( 'Unknown MDATA chunk: ' + next.hexId );\n\n\t\t\t}\n\n\t\t\tnext = chunk.readChunk();\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Read named object chunk.\n\t *\n\t * @method readNamedObject\n\t * @param {Chunk} chunk Chunk in use.\n\t */\n\treadNamedObject( chunk ) {\n\n\t\tconst name = chunk.readString();\n\n\t\tlet next = chunk.readChunk();\n\t\twhile ( next ) {\n\n\t\t\tif ( next.id === N_TRI_OBJECT ) {\n\n\t\t\t\tconst mesh = this.readMesh( next );\n\t\t\t\tmesh.name = name;\n\t\t\t\tthis.meshes.push( mesh );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( 'Unknown named object chunk: ' + next.hexId );\n\n\t\t\t}\n\n\t\t\tnext = chunk.readChunk( );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Read material data chunk and add it to the material list.\n\t *\n\t * @method readMaterialEntry\n\t * @param {Chunk} chunk Chunk in use.\n\t * @param {String} path Path for external resources.\n\t */\n\treadMaterialEntry( chunk, path ) {\n\n\t\tlet next = chunk.readChunk();\n\t\tconst material = new MeshPhongMaterial();\n\n\t\twhile ( next ) {\n\n\t\t\tif ( next.id === MAT_NAME ) {\n\n\t\t\t\tmaterial.name = next.readString();\n\t\t\t\tthis.debugMessage( ' Name: ' + material.name );\n\n\t\t\t} else if ( next.id === MAT_WIRE ) {\n\n\t\t\t\tthis.debugMessage( ' Wireframe' );\n\t\t\t\tmaterial.wireframe = true;\n\n\t\t\t} else if ( next.id === MAT_WIRE_SIZE ) {\n\n\t\t\t\tconst value = next.readByte();\n\t\t\t\tmaterial.wireframeLinewidth = value;\n\t\t\t\tthis.debugMessage( ' Wireframe Thickness: ' + value );\n\n\t\t\t} else if ( next.id === MAT_TWO_SIDE ) {\n\n\t\t\t\tmaterial.side = DoubleSide;\n\t\t\t\tthis.debugMessage( ' DoubleSided' );\n\n\t\t\t} else if ( next.id === MAT_ADDITIVE ) {\n\n\t\t\t\tthis.debugMessage( ' Additive Blending' );\n\t\t\t\tmaterial.blending = AdditiveBlending;\n\n\t\t\t} else if ( next.id === MAT_DIFFUSE ) {\n\n\t\t\t\tthis.debugMessage( ' Diffuse Color' );\n\t\t\t\tmaterial.color = this.readColor( next );\n\n\t\t\t} else if ( next.id === MAT_SPECULAR ) {\n\n\t\t\t\tthis.debugMessage( ' Specular Color' );\n\t\t\t\tmaterial.specular = this.readColor( next );\n\n\t\t\t} else if ( next.id === MAT_AMBIENT ) {\n\n\t\t\t\tthis.debugMessage( ' Ambient color' );\n\t\t\t\tmaterial.color = this.readColor( next );\n\n\t\t\t} else if ( next.id === MAT_SHININESS ) {\n\n\t\t\t\tconst shininess = this.readPercentage( next );\n\t\t\t\tmaterial.shininess = shininess * 100;\n\t\t\t\tthis.debugMessage( ' Shininess : ' + shininess );\n\n\t\t\t} else if ( next.id === MAT_TRANSPARENCY ) {\n\n\t\t\t\tconst transparency = this.readPercentage( next );\n\t\t\t\tmaterial.opacity = 1 - transparency;\n\t\t\t\tthis.debugMessage( ' Transparency : ' + transparency );\n\t\t\t\tmaterial.transparent = material.opacity < 1 ? true : false;\n\n\t\t\t} else if ( next.id === MAT_TEXMAP ) {\n\n\t\t\t\tthis.debugMessage( ' ColorMap' );\n\t\t\t\tmaterial.map = this.readMap( next, path );\n\n\t\t\t} else if ( next.id === MAT_BUMPMAP ) {\n\n\t\t\t\tthis.debugMessage( ' BumpMap' );\n\t\t\t\tmaterial.bumpMap = this.readMap( next, path );\n\n\t\t\t} else if ( next.id === MAT_OPACMAP ) {\n\n\t\t\t\tthis.debugMessage( ' OpacityMap' );\n\t\t\t\tmaterial.alphaMap = this.readMap( next, path );\n\n\t\t\t} else if ( next.id === MAT_SPECMAP ) {\n\n\t\t\t\tthis.debugMessage( ' SpecularMap' );\n\t\t\t\tmaterial.specularMap = this.readMap( next, path );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( ' Unknown material chunk: ' + next.hexId );\n\n\t\t\t}\n\n\t\t\tnext = chunk.readChunk();\n\n\t\t}\n\n\t\tthis.materials[ material.name ] = material;\n\n\t}\n\n\t/**\n\t * Read mesh data chunk.\n\t *\n\t * @method readMesh\n\t * @param {Chunk} chunk Chunk in use.\n\t * @return {Mesh} The parsed mesh.\n\t */\n\treadMesh( chunk ) {\n\n\t\tlet next = chunk.readChunk( );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst material = new MeshPhongMaterial();\n\t\tconst mesh = new Mesh( geometry, material );\n\t\tmesh.name = 'mesh';\n\n\t\twhile ( next ) {\n\n\t\t\tif ( next.id === POINT_ARRAY ) {\n\n\t\t\t\tconst points = next.readWord( );\n\n\t\t\t\tthis.debugMessage( ' Vertex: ' + points );\n\n\t\t\t\t//BufferGeometry\n\n\t\t\t\tconst vertices = [];\n\n\t\t\t\tfor ( let i = 0; i < points; i ++ )\t\t{\n\n\t\t\t\t\tvertices.push( next.readFloat( ) );\n\t\t\t\t\tvertices.push( next.readFloat( ) );\n\t\t\t\t\tvertices.push( next.readFloat( ) );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t\t} else if ( next.id === FACE_ARRAY ) {\n\n\t\t\t\tthis.readFaceArray( next, mesh );\n\n\t\t\t} else if ( next.id === TEX_VERTS ) {\n\n\t\t\t\tconst texels = next.readWord( );\n\n\t\t\t\tthis.debugMessage( ' UV: ' + texels );\n\n\t\t\t\t//BufferGeometry\n\n\t\t\t\tconst uvs = [];\n\n\t\t\t\tfor ( let i = 0; i < texels; i ++ ) {\n\n\t\t\t\t\tuvs.push( next.readFloat( ) );\n\t\t\t\t\tuvs.push( next.readFloat( ) );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t\t} else if ( next.id === MESH_MATRIX ) {\n\n\t\t\t\tthis.debugMessage( ' Tranformation Matrix (TODO)' );\n\n\t\t\t\tconst values = [];\n\t\t\t\tfor ( let i = 0; i < 12; i ++ ) {\n\n\t\t\t\t\tvalues[ i ] = next.readFloat( );\n\n\t\t\t\t}\n\n\t\t\t\tconst matrix = new Matrix4();\n\n\t\t\t\t//X Line\n\t\t\t\tmatrix.elements[ 0 ] = values[ 0 ];\n\t\t\t\tmatrix.elements[ 1 ] = values[ 6 ];\n\t\t\t\tmatrix.elements[ 2 ] = values[ 3 ];\n\t\t\t\tmatrix.elements[ 3 ] = values[ 9 ];\n\n\t\t\t\t//Y Line\n\t\t\t\tmatrix.elements[ 4 ] = values[ 2 ];\n\t\t\t\tmatrix.elements[ 5 ] = values[ 8 ];\n\t\t\t\tmatrix.elements[ 6 ] = values[ 5 ];\n\t\t\t\tmatrix.elements[ 7 ] = values[ 11 ];\n\n\t\t\t\t//Z Line\n\t\t\t\tmatrix.elements[ 8 ] = values[ 1 ];\n\t\t\t\tmatrix.elements[ 9 ] = values[ 7 ];\n\t\t\t\tmatrix.elements[ 10 ] = values[ 4 ];\n\t\t\t\tmatrix.elements[ 11 ] = values[ 10 ];\n\n\t\t\t\t//W Line\n\t\t\t\tmatrix.elements[ 12 ] = 0;\n\t\t\t\tmatrix.elements[ 13 ] = 0;\n\t\t\t\tmatrix.elements[ 14 ] = 0;\n\t\t\t\tmatrix.elements[ 15 ] = 1;\n\n\t\t\t\tmatrix.transpose();\n\n\t\t\t\tconst inverse = new Matrix4();\n\t\t\t\tinverse.copy( matrix ).invert();\n\t\t\t\tgeometry.applyMatrix4( inverse );\n\n\t\t\t\tmatrix.decompose( mesh.position, mesh.quaternion, mesh.scale );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( ' Unknown mesh chunk: ' + next.hexId );\n\n\t\t\t}\n\n\t\t\tnext = chunk.readChunk( );\n\n\t\t}\n\n\t\tgeometry.computeVertexNormals();\n\n\t\treturn mesh;\n\n\t}\n\n\t/**\n\t * Read face array data chunk.\n\t *\n\t * @method readFaceArray\n\t * @param {Chunk} chunk Chunk in use.\n\t * @param {Mesh} mesh Mesh to be filled with the data read.\n\t */\n\treadFaceArray( chunk, mesh ) {\n\n\t\tconst faces = chunk.readWord( );\n\n\t\tthis.debugMessage( ' Faces: ' + faces );\n\n\t\tconst index = [];\n\n\t\tfor ( let i = 0; i < faces; ++ i ) {\n\n\t\t\tindex.push( chunk.readWord( ), chunk.readWord( ), chunk.readWord( ) );\n\n\t\t\tchunk.readWord( ); // visibility\n\n\t\t}\n\n\t\tmesh.geometry.setIndex( index );\n\n\t\t//The rest of the FACE_ARRAY chunk is subchunks\n\n\t\tlet materialIndex = 0;\n\t\tlet start = 0;\n\n\t\twhile ( ! chunk.endOfChunk ) {\n\n\t\t\tconst subchunk = chunk.readChunk( );\n\n\t\t\tif ( subchunk.id === MSH_MAT_GROUP ) {\n\n\t\t\t\tthis.debugMessage( ' Material Group' );\n\n\t\t\t\tconst group = this.readMaterialGroup( subchunk );\n\t\t\t\tconst count = group.index.length * 3; // assuming successive indices\n\n\t\t\t\tmesh.geometry.addGroup( start, count, materialIndex );\n\n\t\t\t\tstart += count;\n\t\t\t\tmaterialIndex ++;\n\n\t\t\t\tconst material = this.materials[ group.name ];\n\n\t\t\t\tif ( Array.isArray( mesh.material ) === false ) mesh.material = [];\n\n\t\t\t\tif ( material !== undefined )\t{\n\n\t\t\t\t\tmesh.material.push( material );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( ' Unknown face array chunk: ' + subchunk.hexId );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( mesh.material.length === 1 ) mesh.material = mesh.material[ 0 ]; // for backwards compatibility\n\n\t}\n\n\t/**\n\t * Read texture map data chunk.\n\t *\n\t * @method readMap\n\t * @param {Chunk} chunk Chunk in use.\n\t * @param {String} path Path for external resources.\n\t * @return {Texture} Texture read from this data chunk.\n\t */\n\treadMap( chunk, path ) {\n\n\t\tlet next = chunk.readChunk( );\n\t\tlet texture = {};\n\n\t\tconst loader = new TextureLoader( this.manager );\n\t\tloader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\twhile ( next ) {\n\n\t\t\tif ( next.id === MAT_MAPNAME ) {\n\n\t\t\t\tconst name = next.readString();\n\t\t\t\ttexture = loader.load( name );\n\n\t\t\t\tthis.debugMessage( ' File: ' + path + name );\n\n\t\t\t} else if ( next.id === MAT_MAP_UOFFSET ) {\n\n\t\t\t\ttexture.offset.x = next.readFloat( );\n\t\t\t\tthis.debugMessage( ' OffsetX: ' + texture.offset.x );\n\n\t\t\t} else if ( next.id === MAT_MAP_VOFFSET ) {\n\n\t\t\t\ttexture.offset.y = next.readFloat( );\n\t\t\t\tthis.debugMessage( ' OffsetY: ' + texture.offset.y );\n\n\t\t\t} else if ( next.id === MAT_MAP_USCALE ) {\n\n\t\t\t\ttexture.repeat.x = next.readFloat( );\n\t\t\t\tthis.debugMessage( ' RepeatX: ' + texture.repeat.x );\n\n\t\t\t} else if ( next.id === MAT_MAP_VSCALE ) {\n\n\t\t\t\ttexture.repeat.y = next.readFloat( );\n\t\t\t\tthis.debugMessage( ' RepeatY: ' + texture.repeat.y );\n\n\t\t\t} else {\n\n\t\t\t\tthis.debugMessage( ' Unknown map chunk: ' + next.hexId );\n\n\t\t\t}\n\n\t\t\tnext = chunk.readChunk( );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Read material group data chunk.\n\t *\n\t * @method readMaterialGroup\n\t * @param {Chunk} chunk Chunk in use.\n\t * @return {Object} Object with name and index of the object.\n\t */\n\treadMaterialGroup( chunk ) {\n\n\t\tconst name = chunk.readString();\n\t\tconst numFaces = chunk.readWord();\n\n\t\tthis.debugMessage( ' Name: ' + name );\n\t\tthis.debugMessage( ' Faces: ' + numFaces );\n\n\t\tconst index = [];\n\t\tfor ( let i = 0; i < numFaces; ++ i ) {\n\n\t\t\tindex.push( chunk.readWord( ) );\n\n\t\t}\n\n\t\treturn { name: name, index: index };\n\n\t}\n\n\t/**\n\t * Read a color value.\n\t *\n\t * @method readColor\n\t * @param {Chunk} chunk Chunk.\n\t * @return {Color} Color value read..\n\t */\n\treadColor( chunk ) {\n\n\t\tconst subChunk = chunk.readChunk( );\n\t\tconst color = new Color();\n\n\t\tif ( subChunk.id === COLOR_24 || subChunk.id === LIN_COLOR_24 ) {\n\n\t\t\tconst r = subChunk.readByte( );\n\t\t\tconst g = subChunk.readByte( );\n\t\t\tconst b = subChunk.readByte( );\n\n\t\t\tcolor.setRGB( r / 255, g / 255, b / 255 );\n\n\t\t\tthis.debugMessage( ' Color: ' + color.r + ', ' + color.g + ', ' + color.b );\n\n\t\t}\telse if ( subChunk.id === COLOR_F || subChunk.id === LIN_COLOR_F ) {\n\n\t\t\tconst r = subChunk.readFloat( );\n\t\t\tconst g = subChunk.readFloat( );\n\t\t\tconst b = subChunk.readFloat( );\n\n\t\t\tcolor.setRGB( r, g, b );\n\n\t\t\tthis.debugMessage( ' Color: ' + color.r + ', ' + color.g + ', ' + color.b );\n\n\t\t}\telse {\n\n\t\t\tthis.debugMessage( ' Unknown color chunk: ' + subChunk.hexId );\n\n\t\t}\n\n\t\treturn color;\n\n\t}\n\n\t/**\n\t * Read percentage value.\n\t *\n\t * @method readPercentage\n\t * @param {Chunk} chunk Chunk to read data from.\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadPercentage( chunk ) {\n\n\t\tconst subChunk = chunk.readChunk( );\n\n\t\tswitch ( subChunk.id ) {\n\n\t\t\tcase INT_PERCENTAGE:\n\t\t\t\treturn ( subChunk.readShort( ) / 100 );\n\t\t\t\tbreak;\n\n\t\t\tcase FLOAT_PERCENTAGE:\n\t\t\t\treturn subChunk.readFloat( );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.debugMessage( ' Unknown percentage chunk: ' + subChunk.hexId );\n\t\t\t\treturn 0;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Print debug message to the console.\n\t *\n\t * Is controlled by a flag to show or hide debug messages.\n\t *\n\t * @method debugMessage\n\t * @param {Object} message Debug message to print to the console.\n\t */\n\tdebugMessage( message ) {\n\n\t\tif ( this.debug ) {\n\n\t\t\tconsole.log( message );\n\n\t\t}\n\n\t}\n\n}\n\n\n/** Read data/sub-chunks from chunk */\nclass Chunk {\n\n\t/**\n\t * Create a new chunk\n\t *\n\t * @class Chunk\n\t * @param {DataView} data DataView to read from.\n\t * @param {Number} position in data.\n\t * @param {Function} debugMessage logging callback.\n\t */\n\tconstructor( data, position, debugMessage ) {\n\n\t\tthis.data = data;\n\t\t// the offset to the begin of this chunk\n\t\tthis.offset = position;\n\t\t// the current reading position\n\t\tthis.position = position;\n\t\tthis.debugMessage = debugMessage;\n\n\t\tif ( this.debugMessage instanceof Function ) {\n\n\t\t\tthis.debugMessage = function () {};\n\n\t\t}\n\n\t\tthis.id = this.readWord();\n\t\tthis.size = this.readDWord();\n\t\tthis.end = this.offset + this.size;\n\n\t\tif ( this.end > data.byteLength ) {\n\n\t\t\tthis.debugMessage( 'Bad chunk size for chunk at ' + position );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * read a sub cchunk.\n\t *\n\t * @method readChunk\n\t * @return {Chunk | null} next sub chunk\n\t */\n\treadChunk() {\n\n\t\tif ( this.endOfChunk ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst next = new Chunk( this.data, this.position, this.debugMessage );\n\t\t\tthis.position += next.size;\n\t\t\treturn next;\n\n\t\t}\tcatch ( e ) {\n\n\t\t\tthis.debugMessage( 'Unable to read chunk at ' + this.position );\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * return the ID of this chunk as Hex\n\t *\n\t * @method idToString\n\t * @return {String} hex-string of id\n\t */\n\tget hexId() {\n\n\t\treturn this.id.toString( 16 );\n\n\t}\n\n\tget endOfChunk() {\n\n\t\treturn this.position >= this.end;\n\n\t}\n\n\t/**\n\t * Read byte value.\n\t *\n\t * @method readByte\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadByte() {\n\n\t\tconst v = this.data.getUint8( this.position, true );\n\t\tthis.position += 1;\n\t\treturn v;\n\n\t}\n\n\t/**\n\t * Read 32 bit float value.\n\t *\n\t * @method readFloat\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadFloat() {\n\n\t\ttry {\n\n\t\t\tconst v = this.data.getFloat32( this.position, true );\n\t\t\tthis.position += 4;\n\t\t\treturn v;\n\n\t\t}\tcatch ( e ) {\n\n\t\t\tthis.debugMessage( e + ' ' + this.position + ' ' + this.data.byteLength );\n\t\t\treturn 0;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Read 32 bit signed integer value.\n\t *\n\t * @method readInt\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadInt() {\n\n\t\tconst v = this.data.getInt32( this.position, true );\n\t\tthis.position += 4;\n\t\treturn v;\n\n\t}\n\n\t/**\n\t * Read 16 bit signed integer value.\n\t *\n\t * @method readShort\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadShort() {\n\n\t\tconst v = this.data.getInt16( this.position, true );\n\t\tthis.position += 2;\n\t\treturn v;\n\n\t}\n\n\t/**\n\t * Read 64 bit unsigned integer value.\n\t *\n\t * @method readDWord\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadDWord() {\n\n\t\tconst v = this.data.getUint32( this.position, true );\n\t\tthis.position += 4;\n\t\treturn v;\n\n\t}\n\n\t/**\n\t * Read 32 bit unsigned integer value.\n\t *\n\t * @method readWord\n\t * @return {Number} Data read from the dataview.\n\t */\n\treadWord() {\n\n\t\tconst v = this.data.getUint16( this.position, true );\n\t\tthis.position += 2;\n\t\treturn v;\n\n\t}\n\n\t/**\n\t * Read NULL terminated ASCII string value from chunk-pos.\n\t *\n\t * @method readString\n\t * @return {String} Data read from the dataview.\n\t */\n\treadString() {\n\n\t\tlet s = '';\n\t\tlet c = this.readByte();\n\t\twhile ( c ) {\n\n\t\t\ts += String.fromCharCode( c );\n\t\t\tc = this.readByte();\n\n\t\t}\n\n\t\treturn s;\n\n\t}\n\n}\n\n// const NULL_CHUNK = 0x0000;\nconst M3DMAGIC = 0x4D4D;\n// const SMAGIC = 0x2D2D;\n// const LMAGIC = 0x2D3D;\nconst MLIBMAGIC = 0x3DAA;\n// const MATMAGIC = 0x3DFF;\nconst CMAGIC = 0xC23D;\nconst M3D_VERSION = 0x0002;\n// const M3D_KFVERSION = 0x0005;\nconst COLOR_F = 0x0010;\nconst COLOR_24 = 0x0011;\nconst LIN_COLOR_24 = 0x0012;\nconst LIN_COLOR_F = 0x0013;\nconst INT_PERCENTAGE = 0x0030;\nconst FLOAT_PERCENTAGE = 0x0031;\nconst MDATA = 0x3D3D;\nconst MESH_VERSION = 0x3D3E;\nconst MASTER_SCALE = 0x0100;\n// const LO_SHADOW_BIAS = 0x1400;\n// const HI_SHADOW_BIAS = 0x1410;\n// const SHADOW_MAP_SIZE = 0x1420;\n// const SHADOW_SAMPLES = 0x1430;\n// const SHADOW_RANGE = 0x1440;\n// const SHADOW_FILTER = 0x1450;\n// const RAY_BIAS = 0x1460;\n// const O_CONSTS = 0x1500;\n// const AMBIENT_LIGHT = 0x2100;\n// const BIT_MAP = 0x1100;\n// const SOLID_BGND = 0x1200;\n// const V_GRADIENT = 0x1300;\n// const USE_BIT_MAP = 0x1101;\n// const USE_SOLID_BGND = 0x1201;\n// const USE_V_GRADIENT = 0x1301;\n// const FOG = 0x2200;\n// const FOG_BGND = 0x2210;\n// const LAYER_FOG = 0x2302;\n// const DISTANCE_CUE = 0x2300;\n// const DCUE_BGND = 0x2310;\n// const USE_FOG = 0x2201;\n// const USE_LAYER_FOG = 0x2303;\n// const USE_DISTANCE_CUE = 0x2301;\nconst MAT_ENTRY = 0xAFFF;\nconst MAT_NAME = 0xA000;\nconst MAT_AMBIENT = 0xA010;\nconst MAT_DIFFUSE = 0xA020;\nconst MAT_SPECULAR = 0xA030;\nconst MAT_SHININESS = 0xA040;\n// const MAT_SHIN2PCT = 0xA041;\nconst MAT_TRANSPARENCY = 0xA050;\n// const MAT_XPFALL = 0xA052;\n// const MAT_USE_XPFALL = 0xA240;\n// const MAT_REFBLUR = 0xA053;\n// const MAT_SHADING = 0xA100;\n// const MAT_USE_REFBLUR = 0xA250;\n// const MAT_SELF_ILLUM = 0xA084;\nconst MAT_TWO_SIDE = 0xA081;\n// const MAT_DECAL = 0xA082;\nconst MAT_ADDITIVE = 0xA083;\nconst MAT_WIRE = 0xA085;\n// const MAT_FACEMAP = 0xA088;\n// const MAT_TRANSFALLOFF_IN = 0xA08A;\n// const MAT_PHONGSOFT = 0xA08C;\n// const MAT_WIREABS = 0xA08E;\nconst MAT_WIRE_SIZE = 0xA087;\nconst MAT_TEXMAP = 0xA200;\n// const MAT_SXP_TEXT_DATA = 0xA320;\n// const MAT_TEXMASK = 0xA33E;\n// const MAT_SXP_TEXTMASK_DATA = 0xA32A;\n// const MAT_TEX2MAP = 0xA33A;\n// const MAT_SXP_TEXT2_DATA = 0xA321;\n// const MAT_TEX2MASK = 0xA340;\n// const MAT_SXP_TEXT2MASK_DATA = 0xA32C;\nconst MAT_OPACMAP = 0xA210;\n// const MAT_SXP_OPAC_DATA = 0xA322;\n// const MAT_OPACMASK = 0xA342;\n// const MAT_SXP_OPACMASK_DATA = 0xA32E;\nconst MAT_BUMPMAP = 0xA230;\n// const MAT_SXP_BUMP_DATA = 0xA324;\n// const MAT_BUMPMASK = 0xA344;\n// const MAT_SXP_BUMPMASK_DATA = 0xA330;\nconst MAT_SPECMAP = 0xA204;\n// const MAT_SXP_SPEC_DATA = 0xA325;\n// const MAT_SPECMASK = 0xA348;\n// const MAT_SXP_SPECMASK_DATA = 0xA332;\n// const MAT_SHINMAP = 0xA33C;\n// const MAT_SXP_SHIN_DATA = 0xA326;\n// const MAT_SHINMASK = 0xA346;\n// const MAT_SXP_SHINMASK_DATA = 0xA334;\n// const MAT_SELFIMAP = 0xA33D;\n// const MAT_SXP_SELFI_DATA = 0xA328;\n// const MAT_SELFIMASK = 0xA34A;\n// const MAT_SXP_SELFIMASK_DATA = 0xA336;\n// const MAT_REFLMAP = 0xA220;\n// const MAT_REFLMASK = 0xA34C;\n// const MAT_SXP_REFLMASK_DATA = 0xA338;\n// const MAT_ACUBIC = 0xA310;\nconst MAT_MAPNAME = 0xA300;\n// const MAT_MAP_TILING = 0xA351;\n// const MAT_MAP_TEXBLUR = 0xA353;\nconst MAT_MAP_USCALE = 0xA354;\nconst MAT_MAP_VSCALE = 0xA356;\nconst MAT_MAP_UOFFSET = 0xA358;\nconst MAT_MAP_VOFFSET = 0xA35A;\n// const MAT_MAP_ANG = 0xA35C;\n// const MAT_MAP_COL1 = 0xA360;\n// const MAT_MAP_COL2 = 0xA362;\n// const MAT_MAP_RCOL = 0xA364;\n// const MAT_MAP_GCOL = 0xA366;\n// const MAT_MAP_BCOL = 0xA368;\nconst NAMED_OBJECT = 0x4000;\n// const N_DIRECT_LIGHT = 0x4600;\n// const DL_OFF = 0x4620;\n// const DL_OUTER_RANGE = 0x465A;\n// const DL_INNER_RANGE = 0x4659;\n// const DL_MULTIPLIER = 0x465B;\n// const DL_EXCLUDE = 0x4654;\n// const DL_ATTENUATE = 0x4625;\n// const DL_SPOTLIGHT = 0x4610;\n// const DL_SPOT_ROLL = 0x4656;\n// const DL_SHADOWED = 0x4630;\n// const DL_LOCAL_SHADOW2 = 0x4641;\n// const DL_SEE_CONE = 0x4650;\n// const DL_SPOT_RECTANGULAR = 0x4651;\n// const DL_SPOT_ASPECT = 0x4657;\n// const DL_SPOT_PROJECTOR = 0x4653;\n// const DL_SPOT_OVERSHOOT = 0x4652;\n// const DL_RAY_BIAS = 0x4658;\n// const DL_RAYSHAD = 0x4627;\n// const N_CAMERA = 0x4700;\n// const CAM_SEE_CONE = 0x4710;\n// const CAM_RANGES = 0x4720;\n// const OBJ_HIDDEN = 0x4010;\n// const OBJ_VIS_LOFTER = 0x4011;\n// const OBJ_DOESNT_CAST = 0x4012;\n// const OBJ_DONT_RECVSHADOW = 0x4017;\n// const OBJ_MATTE = 0x4013;\n// const OBJ_FAST = 0x4014;\n// const OBJ_PROCEDURAL = 0x4015;\n// const OBJ_FROZEN = 0x4016;\nconst N_TRI_OBJECT = 0x4100;\nconst POINT_ARRAY = 0x4110;\n// const POINT_FLAG_ARRAY = 0x4111;\nconst FACE_ARRAY = 0x4120;\nconst MSH_MAT_GROUP = 0x4130;\n// const SMOOTH_GROUP = 0x4150;\n// const MSH_BOXMAP = 0x4190;\nconst TEX_VERTS = 0x4140;\nconst MESH_MATRIX = 0x4160;\n// const MESH_COLOR = 0x4165;\n// const MESH_TEXTURE_INFO = 0x4170;\n// const KFDATA = 0xB000;\n// const KFHDR = 0xB00A;\n// const KFSEG = 0xB008;\n// const KFCURTIME = 0xB009;\n// const AMBIENT_NODE_TAG = 0xB001;\n// const OBJECT_NODE_TAG = 0xB002;\n// const CAMERA_NODE_TAG = 0xB003;\n// const TARGET_NODE_TAG = 0xB004;\n// const LIGHT_NODE_TAG = 0xB005;\n// const L_TARGET_NODE_TAG = 0xB006;\n// const SPOTLIGHT_NODE_TAG = 0xB007;\n// const NODE_ID = 0xB030;\n// const NODE_HDR = 0xB010;\n// const PIVOT = 0xB013;\n// const INSTANCE_NAME = 0xB011;\n// const MORPH_SMOOTH = 0xB015;\n// const BOUNDBOX = 0xB014;\n// const POS_TRACK_TAG = 0xB020;\n// const COL_TRACK_TAG = 0xB025;\n// const ROT_TRACK_TAG = 0xB021;\n// const SCL_TRACK_TAG = 0xB022;\n// const MORPH_TRACK_TAG = 0xB026;\n// const FOV_TRACK_TAG = 0xB023;\n// const ROLL_TRACK_TAG = 0xB024;\n// const HOT_TRACK_TAG = 0xB027;\n// const FALL_TRACK_TAG = 0xB028;\n// const HIDE_TRACK_TAG = 0xB029;\n// const POLY_2D = 0x5000;\n// const SHAPE_OK = 0x5010;\n// const SHAPE_NOT_OK = 0x5011;\n// const SHAPE_HOOK = 0x5020;\n// const PATH_3D = 0x6000;\n// const PATH_MATRIX = 0x6005;\n// const SHAPE_2D = 0x6010;\n// const M_SCALE = 0x6020;\n// const M_TWIST = 0x6030;\n// const M_TEETER = 0x6040;\n// const M_FIT = 0x6050;\n// const M_BEVEL = 0x6060;\n// const XZ_CURVE = 0x6070;\n// const YZ_CURVE = 0x6080;\n// const INTERPCT = 0x6090;\n// const DEFORM_LIMIT = 0x60A0;\n// const USE_CONTOUR = 0x6100;\n// const USE_TWEEN = 0x6110;\n// const USE_SCALE = 0x6120;\n// const USE_TWIST = 0x6130;\n// const USE_TEETER = 0x6140;\n// const USE_FIT = 0x6150;\n// const USE_BEVEL = 0x6160;\n// const DEFAULT_VIEW = 0x3000;\n// const VIEW_TOP = 0x3010;\n// const VIEW_BOTTOM = 0x3020;\n// const VIEW_LEFT = 0x3030;\n// const VIEW_RIGHT = 0x3040;\n// const VIEW_FRONT = 0x3050;\n// const VIEW_BACK = 0x3060;\n// const VIEW_USER = 0x3070;\n// const VIEW_CAMERA = 0x3080;\n// const VIEW_WINDOW = 0x3090;\n// const VIEWPORT_LAYOUT_OLD = 0x7000;\n// const VIEWPORT_DATA_OLD = 0x7010;\n// const VIEWPORT_LAYOUT = 0x7001;\n// const VIEWPORT_DATA = 0x7011;\n// const VIEWPORT_DATA_3 = 0x7012;\n// const VIEWPORT_SIZE = 0x7020;\n// const NETWORK_VIEW = 0x7030;\n\nexport { TDSLoader };\n","/*!\nfflate - fast JavaScript compression/decompression\n<https://101arrowz.github.io/fflate>\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.6.9\n*/\n\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar durl = function (c) { return URL.createObjectURL(new Blob([c], { type: 'text/javascript' })); };\nvar cwk = function (u) { return new Worker(u); };\ntry {\n URL.revokeObjectURL(durl(''));\n}\ncatch (e) {\n // We're in Deno or a very old browser\n durl = function (c) { return 'data:application/javascript;charset=UTF-8,' + encodeURI(c); };\n // If Deno, this is necessary; if not, this changes nothing\n cwk = function (u) { return new Worker(u, { type: 'module' }); };\n}\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = cwk(ch2[id] || (ch2[id] = durl(c)));\n w.onerror = function (e) { return cb(e.error, null); };\n w.onmessage = function (e) { return cb(null, e.data); };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) | 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n if (!sl || (st && !st.l && sl < 5))\n return buf || new u8(0);\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n // deopt when i > s - 3 - at end, deopt acceptable\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new u32(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && 0xEDB88320) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = this.p.length > 3 ? gzs(this.p) : 4;\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return [r, slc(d, i - 1)];\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n throw 'invalid utf-8 data';\n this.t = null;\n }\n return;\n }\n if (!this.p)\n throw 'stream finished';\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), ch = _a[0], np = _a[1];\n if (final) {\n if (np.length)\n throw 'invalid utf-8 data';\n this.p = null;\n }\n else\n this.p = np;\n this.ondata(ch, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n if (this.d)\n throw 'stream finished';\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td)\n return td.decode(dat);\n else {\n var _a = dutf8(dat), out = _a[0], ext = _a[1];\n if (ext.length)\n throw 'invalid utf-8 data';\n return out;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n throw 'extra field too long';\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c == null && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n if (c != null) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback - add to ZIP archive before pushing';\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (this.d & 2)\n throw 'stream finished';\n var f = strToU8(file.filename), fl = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl != file.filename.length || (o && (com.length != o.length));\n var hl = fl + exfl(file.extra) + 30;\n if (fl > 65535)\n throw 'filename too long';\n var header = new u8(hl);\n wzh(header, 0, file, f, u);\n var chks = [header];\n var pAll = function () {\n for (var _i = 0, chks_1 = chks; _i < chks_1.length; _i++) {\n var chk = chks_1[_i];\n _this_1.ondata(null, chk, false);\n }\n chks = [];\n };\n var tr = this.d;\n this.d = 0;\n var ind = this.u.length;\n var uf = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll();\n if (tr) {\n var nxt = _this_1.u[ind + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr = 1;\n }\n });\n var cl = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl += dat.length;\n chks.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl);\n wbytes(dd, 12, file.size);\n chks.push(dd);\n uf.c = cl, uf.b = hl + cl + 16, uf.crc = file.crc, uf.size = file.size;\n if (tr)\n uf.r();\n tr = 1;\n }\n else if (tr)\n pAll();\n }\n };\n this.u.push(uf);\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n if (this.d & 1)\n throw 'stream finishing';\n throw 'stream finished';\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, f.c, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl('filename too long', null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n throw 'filename too long';\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, data, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n throw 'no callback';\n if (!this.p)\n throw 'stream finished';\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_2 = [];\n this_1.k.unshift(chks_2);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n throw 'no callback';\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n throw 'unknown compression type ' + cmp_1;\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_3 = chks_2; _i < chks_3.length; _i++) {\n var dat = chks_3[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_2 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n throw 'invalid zip file';\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50) {\n cb('invalid zip file', null);\n return;\n }\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshPhongMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tRepeatWrapping,\n\tTextureLoader,\n\tSRGBColorSpace\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nconst COLOR_SPACE_3MF = SRGBColorSpace;\n\n/**\n *\n * 3D Manufacturing Format (3MF) specification: https://3mf.io/specification/\n *\n * The following features from the core specification are supported:\n *\n * - 3D Models\n * - Object Resources (Meshes and Components)\n * - Material Resources (Base Materials)\n *\n * 3MF Materials and Properties Extension are only partially supported.\n *\n * - Texture 2D\n * - Texture 2D Groups\n * - Color Groups (Vertex Colors)\n * - Metallic Display Properties (PBR)\n */\n\nclass ThreeMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.availableExtensions = [];\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst scope = this;\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet zip = null;\n\t\t\tlet file = null;\n\n\t\t\tlet relsName;\n\t\t\tlet modelRelsName;\n\t\t\tconst modelPartNames = [];\n\t\t\tconst texturesPartNames = [];\n\n\t\t\tlet modelRels;\n\t\t\tconst modelParts = {};\n\t\t\tconst printTicketParts = {};\n\t\t\tconst texturesParts = {};\n\n\t\t\tconst textDecoder = new TextDecoder();\n\n\t\t\ttry {\n\n\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( file in zip ) {\n\n\t\t\t\tif ( file.match( /\\_rels\\/.rels$/ ) ) {\n\n\t\t\t\t\trelsName = file;\n\n\t\t\t\t} else if ( file.match( /3D\\/_rels\\/.*\\.model\\.rels$/ ) ) {\n\n\t\t\t\t\tmodelRelsName = file;\n\n\t\t\t\t} else if ( file.match( /^3D\\/.*\\.model$/ ) ) {\n\n\t\t\t\t\tmodelPartNames.push( file );\n\n\t\t\t\t} else if ( file.match( /^3D\\/Textures?\\/.*/ ) ) {\n\n\t\t\t\t\ttexturesPartNames.push( file );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst relsView = zip[ relsName ];\n\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\tconst rels = parseRelsXml( relsFileText );\n\n\t\t\t//\n\n\t\t\tif ( modelRelsName ) {\n\n\t\t\t\tconst relsView = zip[ modelRelsName ];\n\t\t\t\tconst relsFileText = textDecoder.decode( relsView );\n\t\t\t\tmodelRels = parseRelsXml( relsFileText );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < modelPartNames.length; i ++ ) {\n\n\t\t\t\tconst modelPart = modelPartNames[ i ];\n\t\t\t\tconst view = zip[ modelPart ];\n\n\t\t\t\tconst fileText = textDecoder.decode( view );\n\t\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'model' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Error loading 3MF - no 3MF document found: ', modelPart );\n\n\t\t\t\t}\n\n\t\t\t\tconst modelNode = xmlData.querySelector( 'model' );\n\t\t\t\tconst extensions = {};\n\n\t\t\t\tfor ( let i = 0; i < modelNode.attributes.length; i ++ ) {\n\n\t\t\t\t\tconst attr = modelNode.attributes[ i ];\n\t\t\t\t\tif ( attr.name.match( /^xmlns:(.+)$/ ) ) {\n\n\t\t\t\t\t\textensions[ attr.value ] = RegExp.$1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst modelData = parseModelNode( modelNode );\n\t\t\t\tmodelData[ 'xml' ] = modelNode;\n\n\t\t\t\tif ( 0 < Object.keys( extensions ).length ) {\n\n\t\t\t\t\tmodelData[ 'extensions' ] = extensions;\n\n\t\t\t\t}\n\n\t\t\t\tmodelParts[ modelPart ] = modelData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < texturesPartNames.length; i ++ ) {\n\n\t\t\t\tconst texturesPartName = texturesPartNames[ i ];\n\t\t\t\ttexturesParts[ texturesPartName ] = zip[ texturesPartName ].buffer;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\trels: rels,\n\t\t\t\tmodelRels: modelRels,\n\t\t\t\tmodel: modelParts,\n\t\t\t\tprintTicket: printTicketParts,\n\t\t\t\ttexture: texturesParts\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseRelsXml( relsFileText ) {\n\n\t\t\tconst relationships = [];\n\n\t\t\tconst relsXmlData = new DOMParser().parseFromString( relsFileText, 'application/xml' );\n\n\t\t\tconst relsNodes = relsXmlData.querySelectorAll( 'Relationship' );\n\n\t\t\tfor ( let i = 0; i < relsNodes.length; i ++ ) {\n\n\t\t\t\tconst relsNode = relsNodes[ i ];\n\n\t\t\t\tconst relationship = {\n\t\t\t\t\ttarget: relsNode.getAttribute( 'Target' ), //required\n\t\t\t\t\tid: relsNode.getAttribute( 'Id' ), //required\n\t\t\t\t\ttype: relsNode.getAttribute( 'Type' ) //required\n\t\t\t\t};\n\n\t\t\t\trelationships.push( relationship );\n\n\t\t\t}\n\n\t\t\treturn relationships;\n\n\t\t}\n\n\t\tfunction parseMetadataNodes( metadataNodes ) {\n\n\t\t\tconst metadataData = {};\n\n\t\t\tfor ( let i = 0; i < metadataNodes.length; i ++ ) {\n\n\t\t\t\tconst metadataNode = metadataNodes[ i ];\n\t\t\t\tconst name = metadataNode.getAttribute( 'name' );\n\t\t\t\tconst validNames = [\n\t\t\t\t\t'Title',\n\t\t\t\t\t'Designer',\n\t\t\t\t\t'Description',\n\t\t\t\t\t'Copyright',\n\t\t\t\t\t'LicenseTerms',\n\t\t\t\t\t'Rating',\n\t\t\t\t\t'CreationDate',\n\t\t\t\t\t'ModificationDate'\n\t\t\t\t];\n\n\t\t\t\tif ( 0 <= validNames.indexOf( name ) ) {\n\n\t\t\t\t\tmetadataData[ name ] = metadataNode.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn metadataData;\n\n\t\t}\n\n\t\tfunction parseBasematerialsNode( basematerialsNode ) {\n\n\t\t\tconst basematerialsData = {\n\t\t\t\tid: basematerialsNode.getAttribute( 'id' ), // required\n\t\t\t\tbasematerials: []\n\t\t\t};\n\n\t\t\tconst basematerialNodes = basematerialsNode.querySelectorAll( 'base' );\n\n\t\t\tfor ( let i = 0; i < basematerialNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialNode = basematerialNodes[ i ];\n\t\t\t\tconst basematerialData = parseBasematerialNode( basematerialNode );\n\t\t\t\tbasematerialData.index = i; // the order and count of the material nodes form an implicit 0-based index\n\t\t\t\tbasematerialsData.basematerials.push( basematerialData );\n\n\t\t\t}\n\n\t\t\treturn basematerialsData;\n\n\t\t}\n\n\t\tfunction parseTexture2DNode( texture2DNode ) {\n\n\t\t\tconst texture2dData = {\n\t\t\t\tid: texture2DNode.getAttribute( 'id' ), // required\n\t\t\t\tpath: texture2DNode.getAttribute( 'path' ), // required\n\t\t\t\tcontenttype: texture2DNode.getAttribute( 'contenttype' ), // required\n\t\t\t\ttilestyleu: texture2DNode.getAttribute( 'tilestyleu' ),\n\t\t\t\ttilestylev: texture2DNode.getAttribute( 'tilestylev' ),\n\t\t\t\tfilter: texture2DNode.getAttribute( 'filter' ),\n\t\t\t};\n\n\t\t\treturn texture2dData;\n\n\t\t}\n\n\t\tfunction parseTextures2DGroupNode( texture2DGroupNode ) {\n\n\t\t\tconst texture2DGroupData = {\n\t\t\t\tid: texture2DGroupNode.getAttribute( 'id' ), // required\n\t\t\t\ttexid: texture2DGroupNode.getAttribute( 'texid' ), // required\n\t\t\t\tdisplaypropertiesid: texture2DGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst tex2coordNodes = texture2DGroupNode.querySelectorAll( 'tex2coord' );\n\n\t\t\tconst uvs = [];\n\n\t\t\tfor ( let i = 0; i < tex2coordNodes.length; i ++ ) {\n\n\t\t\t\tconst tex2coordNode = tex2coordNodes[ i ];\n\t\t\t\tconst u = tex2coordNode.getAttribute( 'u' );\n\t\t\t\tconst v = tex2coordNode.getAttribute( 'v' );\n\n\t\t\t\tuvs.push( parseFloat( u ), parseFloat( v ) );\n\n\t\t\t}\n\n\t\t\ttexture2DGroupData[ 'uvs' ] = new Float32Array( uvs );\n\n\t\t\treturn texture2DGroupData;\n\n\t\t}\n\n\t\tfunction parseColorGroupNode( colorGroupNode ) {\n\n\t\t\tconst colorGroupData = {\n\t\t\t\tid: colorGroupNode.getAttribute( 'id' ), // required\n\t\t\t\tdisplaypropertiesid: colorGroupNode.getAttribute( 'displaypropertiesid' )\n\t\t\t};\n\n\t\t\tconst colorNodes = colorGroupNode.querySelectorAll( 'color' );\n\n\t\t\tconst colors = [];\n\t\t\tconst colorObject = new Color();\n\n\t\t\tfor ( let i = 0; i < colorNodes.length; i ++ ) {\n\n\t\t\t\tconst colorNode = colorNodes[ i ];\n\t\t\t\tconst color = colorNode.getAttribute( 'color' );\n\n\t\t\t\tcolorObject.setStyle( color.substring( 0, 7 ), COLOR_SPACE_3MF );\n\n\t\t\t\tcolors.push( colorObject.r, colorObject.g, colorObject.b );\n\n\t\t\t}\n\n\t\t\tcolorGroupData[ 'colors' ] = new Float32Array( colors );\n\n\t\t\treturn colorGroupData;\n\n\t\t}\n\n\t\tfunction parseMetallicDisplaypropertiesNode( metallicDisplaypropetiesNode ) {\n\n\t\t\tconst metallicDisplaypropertiesData = {\n\t\t\t\tid: metallicDisplaypropetiesNode.getAttribute( 'id' ) // required\n\t\t\t};\n\n\t\t\tconst metallicNodes = metallicDisplaypropetiesNode.querySelectorAll( 'pbmetallic' );\n\n\t\t\tconst metallicData = [];\n\n\t\t\tfor ( let i = 0; i < metallicNodes.length; i ++ ) {\n\n\t\t\t\tconst metallicNode = metallicNodes[ i ];\n\n\t\t\t\tmetallicData.push( {\n\t\t\t\t\tname: metallicNode.getAttribute( 'name' ), // required\n\t\t\t\t\tmetallicness: parseFloat( metallicNode.getAttribute( 'metallicness' ) ), // required\n\t\t\t\t\troughness: parseFloat( metallicNode.getAttribute( 'roughness' ) ) // required\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tmetallicDisplaypropertiesData.data = metallicData;\n\n\t\t\treturn metallicDisplaypropertiesData;\n\n\t\t}\n\n\t\tfunction parseBasematerialNode( basematerialNode ) {\n\n\t\t\tconst basematerialData = {};\n\n\t\t\tbasematerialData[ 'name' ] = basematerialNode.getAttribute( 'name' ); // required\n\t\t\tbasematerialData[ 'displaycolor' ] = basematerialNode.getAttribute( 'displaycolor' ); // required\n\t\t\tbasematerialData[ 'displaypropertiesid' ] = basematerialNode.getAttribute( 'displaypropertiesid' );\n\n\t\t\treturn basematerialData;\n\n\t\t}\n\n\t\tfunction parseMeshNode( meshNode ) {\n\n\t\t\tconst meshData = {};\n\n\t\t\tconst vertices = [];\n\t\t\tconst vertexNodes = meshNode.querySelectorAll( 'vertices vertex' );\n\n\t\t\tfor ( let i = 0; i < vertexNodes.length; i ++ ) {\n\n\t\t\t\tconst vertexNode = vertexNodes[ i ];\n\t\t\t\tconst x = vertexNode.getAttribute( 'x' );\n\t\t\t\tconst y = vertexNode.getAttribute( 'y' );\n\t\t\t\tconst z = vertexNode.getAttribute( 'z' );\n\n\t\t\t\tvertices.push( parseFloat( x ), parseFloat( y ), parseFloat( z ) );\n\n\t\t\t}\n\n\t\t\tmeshData[ 'vertices' ] = new Float32Array( vertices );\n\n\t\t\tconst triangleProperties = [];\n\t\t\tconst triangles = [];\n\t\t\tconst triangleNodes = meshNode.querySelectorAll( 'triangles triangle' );\n\n\t\t\tfor ( let i = 0; i < triangleNodes.length; i ++ ) {\n\n\t\t\t\tconst triangleNode = triangleNodes[ i ];\n\t\t\t\tconst v1 = triangleNode.getAttribute( 'v1' );\n\t\t\t\tconst v2 = triangleNode.getAttribute( 'v2' );\n\t\t\t\tconst v3 = triangleNode.getAttribute( 'v3' );\n\t\t\t\tconst p1 = triangleNode.getAttribute( 'p1' );\n\t\t\t\tconst p2 = triangleNode.getAttribute( 'p2' );\n\t\t\t\tconst p3 = triangleNode.getAttribute( 'p3' );\n\t\t\t\tconst pid = triangleNode.getAttribute( 'pid' );\n\n\t\t\t\tconst triangleProperty = {};\n\n\t\t\t\ttriangleProperty[ 'v1' ] = parseInt( v1, 10 );\n\t\t\t\ttriangleProperty[ 'v2' ] = parseInt( v2, 10 );\n\t\t\t\ttriangleProperty[ 'v3' ] = parseInt( v3, 10 );\n\n\t\t\t\ttriangles.push( triangleProperty[ 'v1' ], triangleProperty[ 'v2' ], triangleProperty[ 'v3' ] );\n\n\t\t\t\t// optional\n\n\t\t\t\tif ( p1 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p1' ] = parseInt( p1, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p2 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p2' ] = parseInt( p2, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( p3 ) {\n\n\t\t\t\t\ttriangleProperty[ 'p3' ] = parseInt( p3, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( pid ) {\n\n\t\t\t\t\ttriangleProperty[ 'pid' ] = pid;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 0 < Object.keys( triangleProperty ).length ) {\n\n\t\t\t\t\ttriangleProperties.push( triangleProperty );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmeshData[ 'triangleProperties' ] = triangleProperties;\n\t\t\tmeshData[ 'triangles' ] = new Uint32Array( triangles );\n\n\t\t\treturn meshData;\n\n\t\t}\n\n\t\tfunction parseComponentsNode( componentsNode ) {\n\n\t\t\tconst components = [];\n\n\t\t\tconst componentNodes = componentsNode.querySelectorAll( 'component' );\n\n\t\t\tfor ( let i = 0; i < componentNodes.length; i ++ ) {\n\n\t\t\t\tconst componentNode = componentNodes[ i ];\n\t\t\t\tconst componentData = parseComponentNode( componentNode );\n\t\t\t\tcomponents.push( componentData );\n\n\t\t\t}\n\n\t\t\treturn components;\n\n\t\t}\n\n\t\tfunction parseComponentNode( componentNode ) {\n\n\t\t\tconst componentData = {};\n\n\t\t\tcomponentData[ 'objectId' ] = componentNode.getAttribute( 'objectid' ); // required\n\n\t\t\tconst transform = componentNode.getAttribute( 'transform' );\n\n\t\t\tif ( transform ) {\n\n\t\t\t\tcomponentData[ 'transform' ] = parseTransform( transform );\n\n\t\t\t}\n\n\t\t\treturn componentData;\n\n\t\t}\n\n\t\tfunction parseTransform( transform ) {\n\n\t\t\tconst t = [];\n\t\t\ttransform.split( ' ' ).forEach( function ( s ) {\n\n\t\t\t\tt.push( parseFloat( s ) );\n\n\t\t\t} );\n\n\t\t\tconst matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\tt[ 0 ], t[ 3 ], t[ 6 ], t[ 9 ],\n\t\t\t\tt[ 1 ], t[ 4 ], t[ 7 ], t[ 10 ],\n\t\t\t\tt[ 2 ], t[ 5 ], t[ 8 ], t[ 11 ],\n\t\t\t\t 0.0, 0.0, 0.0, 1.0\n\t\t\t);\n\n\t\t\treturn matrix;\n\n\t\t}\n\n\t\tfunction parseObjectNode( objectNode ) {\n\n\t\t\tconst objectData = {\n\t\t\t\ttype: objectNode.getAttribute( 'type' )\n\t\t\t};\n\n\t\t\tconst id = objectNode.getAttribute( 'id' );\n\n\t\t\tif ( id ) {\n\n\t\t\t\tobjectData[ 'id' ] = id;\n\n\t\t\t}\n\n\t\t\tconst pid = objectNode.getAttribute( 'pid' );\n\n\t\t\tif ( pid ) {\n\n\t\t\t\tobjectData[ 'pid' ] = pid;\n\n\t\t\t}\n\n\t\t\tconst pindex = objectNode.getAttribute( 'pindex' );\n\n\t\t\tif ( pindex ) {\n\n\t\t\t\tobjectData[ 'pindex' ] = pindex;\n\n\t\t\t}\n\n\t\t\tconst thumbnail = objectNode.getAttribute( 'thumbnail' );\n\n\t\t\tif ( thumbnail ) {\n\n\t\t\t\tobjectData[ 'thumbnail' ] = thumbnail;\n\n\t\t\t}\n\n\t\t\tconst partnumber = objectNode.getAttribute( 'partnumber' );\n\n\t\t\tif ( partnumber ) {\n\n\t\t\t\tobjectData[ 'partnumber' ] = partnumber;\n\n\t\t\t}\n\n\t\t\tconst name = objectNode.getAttribute( 'name' );\n\n\t\t\tif ( name ) {\n\n\t\t\t\tobjectData[ 'name' ] = name;\n\n\t\t\t}\n\n\t\t\tconst meshNode = objectNode.querySelector( 'mesh' );\n\n\t\t\tif ( meshNode ) {\n\n\t\t\t\tobjectData[ 'mesh' ] = parseMeshNode( meshNode );\n\n\t\t\t}\n\n\t\t\tconst componentsNode = objectNode.querySelector( 'components' );\n\n\t\t\tif ( componentsNode ) {\n\n\t\t\t\tobjectData[ 'components' ] = parseComponentsNode( componentsNode );\n\n\t\t\t}\n\n\t\t\treturn objectData;\n\n\t\t}\n\n\t\tfunction parseResourcesNode( resourcesNode ) {\n\n\t\t\tconst resourcesData = {};\n\n\t\t\tresourcesData[ 'basematerials' ] = {};\n\t\t\tconst basematerialsNodes = resourcesNode.querySelectorAll( 'basematerials' );\n\n\t\t\tfor ( let i = 0; i < basematerialsNodes.length; i ++ ) {\n\n\t\t\t\tconst basematerialsNode = basematerialsNodes[ i ];\n\t\t\t\tconst basematerialsData = parseBasematerialsNode( basematerialsNode );\n\t\t\t\tresourcesData[ 'basematerials' ][ basematerialsData[ 'id' ] ] = basematerialsData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2d' ] = {};\n\t\t\tconst textures2DNodes = resourcesNode.querySelectorAll( 'texture2d' );\n\n\t\t\tfor ( let i = 0; i < textures2DNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DNode = textures2DNodes[ i ];\n\t\t\t\tconst texture2DData = parseTexture2DNode( textures2DNode );\n\t\t\t\tresourcesData[ 'texture2d' ][ texture2DData[ 'id' ] ] = texture2DData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'colorgroup' ] = {};\n\t\t\tconst colorGroupNodes = resourcesNode.querySelectorAll( 'colorgroup' );\n\n\t\t\tfor ( let i = 0; i < colorGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst colorGroupNode = colorGroupNodes[ i ];\n\t\t\t\tconst colorGroupData = parseColorGroupNode( colorGroupNode );\n\t\t\t\tresourcesData[ 'colorgroup' ][ colorGroupData[ 'id' ] ] = colorGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ] = {};\n\t\t\tconst pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll( 'pbmetallicdisplayproperties' );\n\n\t\t\tfor ( let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i ++ ) {\n\n\t\t\t\tconst pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[ i ];\n\t\t\t\tconst pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode( pbmetallicdisplaypropertiesNode );\n\t\t\t\tresourcesData[ 'pbmetallicdisplayproperties' ][ pbmetallicdisplaypropertiesData[ 'id' ] ] = pbmetallicdisplaypropertiesData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'texture2dgroup' ] = {};\n\t\t\tconst textures2DGroupNodes = resourcesNode.querySelectorAll( 'texture2dgroup' );\n\n\t\t\tfor ( let i = 0; i < textures2DGroupNodes.length; i ++ ) {\n\n\t\t\t\tconst textures2DGroupNode = textures2DGroupNodes[ i ];\n\t\t\t\tconst textures2DGroupData = parseTextures2DGroupNode( textures2DGroupNode );\n\t\t\t\tresourcesData[ 'texture2dgroup' ][ textures2DGroupData[ 'id' ] ] = textures2DGroupData;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tresourcesData[ 'object' ] = {};\n\t\t\tconst objectNodes = resourcesNode.querySelectorAll( 'object' );\n\n\t\t\tfor ( let i = 0; i < objectNodes.length; i ++ ) {\n\n\t\t\t\tconst objectNode = objectNodes[ i ];\n\t\t\t\tconst objectData = parseObjectNode( objectNode );\n\t\t\t\tresourcesData[ 'object' ][ objectData[ 'id' ] ] = objectData;\n\n\t\t\t}\n\n\t\t\treturn resourcesData;\n\n\t\t}\n\n\t\tfunction parseBuildNode( buildNode ) {\n\n\t\t\tconst buildData = [];\n\t\t\tconst itemNodes = buildNode.querySelectorAll( 'item' );\n\n\t\t\tfor ( let i = 0; i < itemNodes.length; i ++ ) {\n\n\t\t\t\tconst itemNode = itemNodes[ i ];\n\t\t\t\tconst buildItem = {\n\t\t\t\t\tobjectId: itemNode.getAttribute( 'objectid' )\n\t\t\t\t};\n\t\t\t\tconst transform = itemNode.getAttribute( 'transform' );\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tbuildItem[ 'transform' ] = parseTransform( transform );\n\n\t\t\t\t}\n\n\t\t\t\tbuildData.push( buildItem );\n\n\t\t\t}\n\n\t\t\treturn buildData;\n\n\t\t}\n\n\t\tfunction parseModelNode( modelNode ) {\n\n\t\t\tconst modelData = { unit: modelNode.getAttribute( 'unit' ) || 'millimeter' };\n\t\t\tconst metadataNodes = modelNode.querySelectorAll( 'metadata' );\n\n\t\t\tif ( metadataNodes ) {\n\n\t\t\t\tmodelData[ 'metadata' ] = parseMetadataNodes( metadataNodes );\n\n\t\t\t}\n\n\t\t\tconst resourcesNode = modelNode.querySelector( 'resources' );\n\n\t\t\tif ( resourcesNode ) {\n\n\t\t\t\tmodelData[ 'resources' ] = parseResourcesNode( resourcesNode );\n\n\t\t\t}\n\n\t\t\tconst buildNode = modelNode.querySelector( 'build' );\n\n\t\t\tif ( buildNode ) {\n\n\t\t\t\tmodelData[ 'build' ] = parseBuildNode( buildNode );\n\n\t\t\t}\n\n\t\t\treturn modelData;\n\n\t\t}\n\n\t\tfunction buildTexture( texture2dgroup, objects, modelData, textureData ) {\n\n\t\t\tconst texid = texture2dgroup.texid;\n\t\t\tconst texture2ds = modelData.resources.texture2d;\n\t\t\tconst texture2d = texture2ds[ texid ];\n\n\t\t\tif ( texture2d ) {\n\n\t\t\t\tconst data = textureData[ texture2d.path ];\n\t\t\t\tconst type = texture2d.contenttype;\n\n\t\t\t\tconst blob = new Blob( [ data ], { type: type } );\n\t\t\t\tconst sourceURI = URL.createObjectURL( blob );\n\n\t\t\t\tconst texture = textureLoader.load( sourceURI, function () {\n\n\t\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t\t} );\n\n\t\t\t\ttexture.colorSpace = COLOR_SPACE_3MF;\n\n\t\t\t\t// texture parameters\n\n\t\t\t\tswitch ( texture2d.tilestyleu ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapS = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapS = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.tilestylev ) {\n\n\t\t\t\t\tcase 'wrap':\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mirror':\n\t\t\t\t\t\ttexture.wrapT = MirroredRepeatWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'none':\n\t\t\t\t\tcase 'clamp':\n\t\t\t\t\t\ttexture.wrapT = ClampToEdgeWrapping;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t}\n\n\t\t\t\tswitch ( texture2d.filter ) {\n\n\t\t\t\t\tcase 'auto':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linear':\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'nearest':\n\t\t\t\t\t\ttexture.magFilter = NearestFilter;\n\t\t\t\t\t\ttexture.minFilter = NearestFilter;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\treturn texture;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst objectPindex = objectData.pindex;\n\n\t\t\tconst materialMap = {};\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tconst pindex = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectPindex;\n\n\t\t\t\tif ( materialMap[ pindex ] === undefined ) materialMap[ pindex ] = [];\n\n\t\t\t\tmaterialMap[ pindex ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst keys = Object.keys( materialMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst materialIndex = keys[ i ];\n\t\t\t\tconst trianglePropertiesProps = materialMap[ materialIndex ];\n\t\t\t\tconst basematerialData = basematerials.basematerials[ materialIndex ];\n\t\t\t\tconst material = getBuild( basematerialData, objects, modelData, textureData, objectData, buildBasematerial );\n\n\t\t\t\t//\n\n\t\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\t\tconst positionData = [];\n\n\t\t\t\tconst vertices = meshData.vertices;\n\n\t\t\t\tfor ( let j = 0, jl = trianglePropertiesProps.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst triangleProperty = trianglePropertiesProps[ j ];\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\n\t\t\t\t//\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst uvData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst uvs = texture2dgroup.uvs;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( triangleProperty.v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p1 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p2 * 2 ) + 1 ] );\n\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 0 ] );\n\t\t\t\tuvData.push( uvs[ ( triangleProperty.p3 * 2 ) + 1 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'uv', new Float32BufferAttribute( uvData, 2 ) );\n\n\t\t\t// material\n\n\t\t\tconst texture = getBuild( texture2dgroup, objects, modelData, textureData, objectData, buildTexture );\n\n\t\t\tconst material = new MeshPhongMaterial( { map: texture, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) {\n\n\t\t\t// geometry\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst positionData = [];\n\t\t\tconst colorData = [];\n\n\t\t\tconst vertices = meshData.vertices;\n\t\t\tconst colors = colorgroup.colors;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\n\t\t\t\tconst v1 = triangleProperty.v1;\n\t\t\t\tconst v2 = triangleProperty.v2;\n\t\t\t\tconst v3 = triangleProperty.v3;\n\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v1 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v2 * 3 ) + 2 ] );\n\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 0 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 1 ] );\n\t\t\t\tpositionData.push( vertices[ ( v3 * 3 ) + 2 ] );\n\n\t\t\t\t//\n\n\t\t\t\tconst p1 = ( triangleProperty.p1 !== undefined ) ? triangleProperty.p1 : objectData.pindex;\n\t\t\t\tconst p2 = ( triangleProperty.p2 !== undefined ) ? triangleProperty.p2 : p1;\n\t\t\t\tconst p3 = ( triangleProperty.p3 !== undefined ) ? triangleProperty.p3 : p1;\n\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p1 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p2 * 3 ) + 2 ] );\n\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 0 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 1 ] );\n\t\t\t\tcolorData.push( colors[ ( p3 * 3 ) + 2 ] );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positionData, 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colorData, 3 ) );\n\n\t\t\t// material\n\n\t\t\tconst material = new MeshPhongMaterial( { vertexColors: true, flatShading: true } );\n\n\t\t\t// mesh\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildDefaultMesh( meshData ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setIndex( new BufferAttribute( meshData[ 'triangles' ], 1 ) );\n\t\t\tgeometry.setAttribute( 'position', new BufferAttribute( meshData[ 'vertices' ], 3 ) );\n\n\t\t\tconst material = new MeshPhongMaterial( { color: 0xffffff, flatShading: true } );\n\n\t\t\tconst mesh = new Mesh( geometry, material );\n\n\t\t\treturn mesh;\n\n\t\t}\n\n\t\tfunction buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst keys = Object.keys( resourceMap );\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\t\t\tconst resourceId = keys[ i ];\n\t\t\t\tconst triangleProperties = resourceMap[ resourceId ];\n\t\t\t\tconst resourceType = getResourceType( resourceId, modelData );\n\n\t\t\t\tswitch ( resourceType ) {\n\n\t\t\t\t\tcase 'material':\n\t\t\t\t\t\tconst basematerials = modelData.resources.basematerials[ resourceId ];\n\t\t\t\t\t\tconst newMeshes = buildBasematerialsMeshes( basematerials, triangleProperties, meshData, objects, modelData, textureData, objectData );\n\n\t\t\t\t\t\tfor ( let j = 0, jl = newMeshes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tmeshes.push( newMeshes[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tconst texture2dgroup = modelData.resources.texture2dgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildTexturedMesh( texture2dgroup, triangleProperties, meshData, objects, modelData, textureData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\tconst colorgroup = modelData.resources.colorgroup[ resourceId ];\n\t\t\t\t\t\tmeshes.push( buildVertexColorMesh( colorgroup, triangleProperties, meshData, objectData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'default':\n\t\t\t\t\t\tmeshes.push( buildDefaultMesh( meshData ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.3MFLoader: Unsupported resource type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tfor ( let i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\t\tmeshes[ i ].name = objectData.name;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn meshes;\n\n\t\t}\n\n\t\tfunction getResourceType( pid, modelData ) {\n\n\t\t\tif ( modelData.resources.texture2dgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'texture';\n\n\t\t\t} else if ( modelData.resources.basematerials[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'material';\n\n\t\t\t} else if ( modelData.resources.colorgroup[ pid ] !== undefined ) {\n\n\t\t\t\treturn 'vertexColors';\n\n\t\t\t} else if ( pid === 'default' ) {\n\n\t\t\t\treturn 'default';\n\n\t\t\t} else {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction analyzeObject( meshData, objectData ) {\n\n\t\t\tconst resourceMap = {};\n\n\t\t\tconst triangleProperties = meshData[ 'triangleProperties' ];\n\n\t\t\tconst objectPid = objectData.pid;\n\n\t\t\tfor ( let i = 0, l = triangleProperties.length; i < l; i ++ ) {\n\n\t\t\t\tconst triangleProperty = triangleProperties[ i ];\n\t\t\t\tlet pid = ( triangleProperty.pid !== undefined ) ? triangleProperty.pid : objectPid;\n\n\t\t\t\tif ( pid === undefined ) pid = 'default';\n\n\t\t\t\tif ( resourceMap[ pid ] === undefined ) resourceMap[ pid ] = [];\n\n\t\t\t\tresourceMap[ pid ].push( triangleProperty );\n\n\t\t\t}\n\n\t\t\treturn resourceMap;\n\n\t\t}\n\n\t\tfunction buildGroup( meshData, objects, modelData, textureData, objectData ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst resourceMap = analyzeObject( meshData, objectData );\n\t\t\tconst meshes = buildMeshes( resourceMap, meshData, objects, modelData, textureData, objectData );\n\n\t\t\tfor ( let i = 0, l = meshes.length; i < l; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction applyExtensions( extensions, meshData, modelXml ) {\n\n\t\t\tif ( ! extensions ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst availableExtensions = [];\n\t\t\tconst keys = Object.keys( extensions );\n\n\t\t\tfor ( let i = 0; i < keys.length; i ++ ) {\n\n\t\t\t\tconst ns = keys[ i ];\n\n\t\t\t\tfor ( let j = 0; j < scope.availableExtensions.length; j ++ ) {\n\n\t\t\t\t\tconst extension = scope.availableExtensions[ j ];\n\n\t\t\t\t\tif ( extension.ns === ns ) {\n\n\t\t\t\t\t\tavailableExtensions.push( extension );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < availableExtensions.length; i ++ ) {\n\n\t\t\t\tconst extension = availableExtensions[ i ];\n\t\t\t\textension.apply( modelXml, extensions[ extension[ 'ns' ] ], meshData );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getBuild( data, objects, modelData, textureData, objectData, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data, objects, modelData, textureData, objectData );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\tfunction buildBasematerial( materialData, objects, modelData ) {\n\n\t\t\tlet material;\n\n\t\t\tconst displaypropertiesid = materialData.displaypropertiesid;\n\t\t\tconst pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;\n\n\t\t\tif ( displaypropertiesid !== null && pbmetallicdisplayproperties[ displaypropertiesid ] !== undefined ) {\n\n\t\t\t\t// metallic display property, use StandardMaterial\n\n\t\t\t\tconst pbmetallicdisplayproperty = pbmetallicdisplayproperties[ displaypropertiesid ];\n\t\t\t\tconst metallicData = pbmetallicdisplayproperty.data[ materialData.index ];\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { flatShading: true, roughness: metallicData.roughness, metalness: metallicData.metallicness } );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use PhongMaterial\n\n\t\t\t\tmaterial = new MeshPhongMaterial( { flatShading: true } );\n\n\t\t\t}\n\n\t\t\tmaterial.name = materialData.name;\n\n\t\t\t// displaycolor MUST be specified with a value of a 6 or 8 digit hexadecimal number, e.g. \"#RRGGBB\" or \"#RRGGBBAA\"\n\n\t\t\tconst displaycolor = materialData.displaycolor;\n\n\t\t\tconst color = displaycolor.substring( 0, 7 );\n\t\t\tmaterial.color.setStyle( color, COLOR_SPACE_3MF );\n\n\t\t\t// process alpha if set\n\n\t\t\tif ( displaycolor.length === 9 ) {\n\n\t\t\t\tmaterial.opacity = parseInt( displaycolor.charAt( 7 ) + displaycolor.charAt( 8 ), 16 ) / 255;\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction buildComposite( compositeData, objects, modelData, textureData ) {\n\n\t\t\tconst composite = new Group();\n\n\t\t\tfor ( let j = 0; j < compositeData.length; j ++ ) {\n\n\t\t\t\tconst component = compositeData[ j ];\n\t\t\t\tlet build = objects[ component.objectId ];\n\n\t\t\t\tif ( build === undefined ) {\n\n\t\t\t\t\tbuildObject( component.objectId, objects, modelData, textureData );\n\t\t\t\t\tbuild = objects[ component.objectId ];\n\n\t\t\t\t}\n\n\t\t\t\tconst object3D = build.clone();\n\n\t\t\t\t// apply component transform\n\n\t\t\t\tconst transform = component.transform;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tcomposite.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn composite;\n\n\t\t}\n\n\t\tfunction buildObject( objectId, objects, modelData, textureData ) {\n\n\t\t\tconst objectData = modelData[ 'resources' ][ 'object' ][ objectId ];\n\n\t\t\tif ( objectData[ 'mesh' ] ) {\n\n\t\t\t\tconst meshData = objectData[ 'mesh' ];\n\n\t\t\t\tconst extensions = modelData[ 'extensions' ];\n\t\t\t\tconst modelXml = modelData[ 'xml' ];\n\n\t\t\t\tapplyExtensions( extensions, meshData, modelXml );\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( meshData, objects, modelData, textureData, objectData, buildGroup );\n\n\t\t\t} else {\n\n\t\t\t\tconst compositeData = objectData[ 'components' ];\n\n\t\t\t\tobjects[ objectData.id ] = getBuild( compositeData, objects, modelData, textureData, objectData, buildComposite );\n\n\t\t\t}\n\n\t\t\tif ( objectData.name ) {\n\n\t\t\t\tobjects[ objectData.id ].name = objectData.name;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildObjects( data3mf ) {\n\n\t\t\tconst modelsData = data3mf.model;\n\t\t\tconst modelRels = data3mf.modelRels;\n\t\t\tconst objects = {};\n\t\t\tconst modelsKeys = Object.keys( modelsData );\n\t\t\tconst textureData = {};\n\n\t\t\t// evaluate model relationships to textures\n\n\t\t\tif ( modelRels ) {\n\n\t\t\t\tfor ( let i = 0, l = modelRels.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst modelRel = modelRels[ i ];\n\t\t\t\t\tconst textureKey = modelRel.target.substring( 1 );\n\n\t\t\t\t\tif ( data3mf.texture[ textureKey ] ) {\n\n\t\t\t\t\t\ttextureData[ modelRel.target ] = data3mf.texture[ textureKey ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// start build\n\n\t\t\tfor ( let i = 0; i < modelsKeys.length; i ++ ) {\n\n\t\t\t\tconst modelsKey = modelsKeys[ i ];\n\t\t\t\tconst modelData = modelsData[ modelsKey ];\n\n\t\t\t\tconst objectIds = Object.keys( modelData[ 'resources' ][ 'object' ] );\n\n\t\t\t\tfor ( let j = 0; j < objectIds.length; j ++ ) {\n\n\t\t\t\t\tconst objectId = objectIds[ j ];\n\n\t\t\t\t\tbuildObject( objectId, objects, modelData, textureData );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction fetch3DModelPart( rels ) {\n\n\t\t\tfor ( let i = 0; i < rels.length; i ++ ) {\n\n\t\t\t\tconst rel = rels[ i ];\n\t\t\t\tconst extension = rel.target.split( '.' ).pop();\n\n\t\t\t\tif ( extension.toLowerCase() === 'model' ) return rel;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction build( objects, data3mf ) {\n\n\t\t\tconst group = new Group();\n\n\t\t\tconst relationship = fetch3DModelPart( data3mf[ 'rels' ] );\n\t\t\tconst buildData = data3mf.model[ relationship[ 'target' ].substring( 1 ) ][ 'build' ];\n\n\t\t\tfor ( let i = 0; i < buildData.length; i ++ ) {\n\n\t\t\t\tconst buildItem = buildData[ i ];\n\t\t\t\tconst object3D = objects[ buildItem[ 'objectId' ] ].clone();\n\n\t\t\t\t// apply transform\n\n\t\t\t\tconst transform = buildItem[ 'transform' ];\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tobject3D.applyMatrix4( transform );\n\n\t\t\t\t}\n\n\t\t\t\tgroup.add( object3D );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tconst data3mf = loadDocument( data );\n\t\tconst objects = buildObjects( data3mf );\n\n\t\treturn build( objects, data3mf );\n\n\t}\n\n\taddExtension( extension ) {\n\n\t\tthis.availableExtensions.push( extension );\n\n\t}\n\n}\n\nexport { ThreeMFLoader };\n","import {\n\tDataTextureLoader,\n\tLinearMipmapLinearFilter\n} from 'three';\n\nclass TGALoader extends DataTextureLoader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\t// reference from vthibault, https://github.com/vthibault/roBrowser/blob/master/src/Loaders/Targa.js\n\n\t\tfunction tgaCheckHeader( header ) {\n\n\t\t\tswitch ( header.image_type ) {\n\n\t\t\t\t// check indexed type\n\n\t\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\t\tif ( header.colormap_length > 256 || header.colormap_size !== 24 || header.colormap_type !== 1 ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type colormap data for indexed type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// check colormap type\n\n\t\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\t\tif ( header.colormap_type ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type colormap data for colormap type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// What the need of a file without data ?\n\n\t\t\t\tcase TGA_TYPE_NO_DATA:\n\t\t\t\t\tconsole.error( 'THREE.TGALoader: No data.' );\n\n\t\t\t\t\t// Invalid type ?\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid type \"%s\".', header.image_type );\n\n\t\t\t}\n\n\t\t\t// check image width and height\n\n\t\t\tif ( header.width <= 0 || header.height <= 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid image size.' );\n\n\t\t\t}\n\n\t\t\t// check image pixel size\n\n\t\t\tif ( header.pixel_size !== 8 && header.pixel_size !== 16 &&\n\t\t\t\theader.pixel_size !== 24 && header.pixel_size !== 32 ) {\n\n\t\t\t\tconsole.error( 'THREE.TGALoader: Invalid pixel size \"%s\".', header.pixel_size );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// parse tga image buffer\n\n\t\tfunction tgaParse( use_rle, use_pal, header, offset, data ) {\n\n\t\t\tlet pixel_data,\n\t\t\t\tpalettes;\n\n\t\t\tconst pixel_size = header.pixel_size >> 3;\n\t\t\tconst pixel_total = header.width * header.height * pixel_size;\n\n\t\t\t // read palettes\n\n\t\t\t if ( use_pal ) {\n\n\t\t\t\t palettes = data.subarray( offset, offset += header.colormap_length * ( header.colormap_size >> 3 ) );\n\n\t\t\t }\n\n\t\t\t // read RLE\n\n\t\t\t if ( use_rle ) {\n\n\t\t\t\t pixel_data = new Uint8Array( pixel_total );\n\n\t\t\t\tlet c, count, i;\n\t\t\t\tlet shift = 0;\n\t\t\t\tconst pixels = new Uint8Array( pixel_size );\n\n\t\t\t\twhile ( shift < pixel_total ) {\n\n\t\t\t\t\tc = data[ offset ++ ];\n\t\t\t\t\tcount = ( c & 0x7f ) + 1;\n\n\t\t\t\t\t// RLE pixels\n\n\t\t\t\t\tif ( c & 0x80 ) {\n\n\t\t\t\t\t\t// bind pixel tmp array\n\n\t\t\t\t\t\tfor ( i = 0; i < pixel_size; ++ i ) {\n\n\t\t\t\t\t\t\tpixels[ i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// copy pixel array\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data.set( pixels, shift + i * pixel_size );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += pixel_size * count;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// raw pixels\n\n\t\t\t\t\t\tcount *= pixel_size;\n\n\t\t\t\t\t\tfor ( i = 0; i < count; ++ i ) {\n\n\t\t\t\t\t\t\tpixel_data[ shift + i ] = data[ offset ++ ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshift += count;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t } else {\n\n\t\t\t\t// raw pixels\n\n\t\t\t\tpixel_data = data.subarray(\n\t\t\t\t\t offset, offset += ( use_pal ? header.width * header.height : pixel_total )\n\t\t\t\t);\n\n\t\t\t }\n\n\t\t\t return {\n\t\t\t\tpixel_data: pixel_data,\n\t\t\t\tpalettes: palettes\n\t\t\t };\n\n\t\t}\n\n\t\tfunction tgaGetImageData8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes ) {\n\n\t\t\tconst colormap = palettes;\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = colormap[ ( color * 3 ) + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = colormap[ ( color * 3 ) + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = colormap[ ( color * 3 ) + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\tcolor = image[ i + 0 ] + ( image[ i + 1 ] << 8 );\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = ( color & 0x7C00 ) >> 7;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = ( color & 0x03E0 ) >> 2;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = ( color & 0x001F ) << 3;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = ( color & 0x8000 ) ? 0 : 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData24bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 3 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageData32bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 4 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 1 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 2 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey8bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet color, i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i ++ ) {\n\n\t\t\t\t\tcolor = image[ i ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = color;\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = 255;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction tgaGetImageDataGrey16bits( imageData, y_start, y_step, y_end, x_start, x_step, x_end, image ) {\n\n\t\t\tlet i = 0, x, y;\n\t\t\tconst width = header.width;\n\n\t\t\tfor ( y = y_start; y !== y_end; y += y_step ) {\n\n\t\t\t\tfor ( x = x_start; x !== x_end; x += x_step, i += 2 ) {\n\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 0 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 1 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 2 ] = image[ i + 0 ];\n\t\t\t\t\timageData[ ( x + width * y ) * 4 + 3 ] = image[ i + 1 ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn imageData;\n\n\t\t}\n\n\t\tfunction getTgaRGBA( data, width, height, image, palette ) {\n\n\t\t\tlet x_start,\n\t\t\t\ty_start,\n\t\t\t\tx_step,\n\t\t\t\ty_step,\n\t\t\t\tx_end,\n\t\t\t\ty_end;\n\n\t\t\tswitch ( ( header.flags & TGA_ORIGIN_MASK ) >> TGA_ORIGIN_SHIFT ) {\n\n\t\t\t\tdefault:\n\t\t\t\tcase TGA_ORIGIN_UL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BL:\n\t\t\t\t\tx_start = 0;\n\t\t\t\t\tx_step = 1;\n\t\t\t\t\tx_end = width;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_UR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = 0;\n\t\t\t\t\ty_step = 1;\n\t\t\t\t\ty_end = height;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TGA_ORIGIN_BR:\n\t\t\t\t\tx_start = width - 1;\n\t\t\t\t\tx_step = - 1;\n\t\t\t\t\tx_end = - 1;\n\t\t\t\t\ty_start = height - 1;\n\t\t\t\t\ty_step = - 1;\n\t\t\t\t\ty_end = - 1;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( use_grey ) {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageDataGrey8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageDataGrey16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tswitch ( header.pixel_size ) {\n\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\ttgaGetImageData8bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\ttgaGetImageData16bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 24:\n\t\t\t\t\t\ttgaGetImageData24bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 32:\n\t\t\t\t\t\ttgaGetImageData32bits( data, y_start, y_step, y_end, x_start, x_step, x_end, image );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.error( 'THREE.TGALoader: Format not supported.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Load image data according to specific method\n\t\t\t// let func = 'tgaGetImageData' + (use_grey ? 'Grey' : '') + (header.pixel_size) + 'bits';\n\t\t\t// func(data, y_start, y_step, y_end, x_start, x_step, x_end, width, image, palette );\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// TGA constants\n\n\t\tconst TGA_TYPE_NO_DATA = 0,\n\t\t\tTGA_TYPE_INDEXED = 1,\n\t\t\tTGA_TYPE_RGB = 2,\n\t\t\tTGA_TYPE_GREY = 3,\n\t\t\tTGA_TYPE_RLE_INDEXED = 9,\n\t\t\tTGA_TYPE_RLE_RGB = 10,\n\t\t\tTGA_TYPE_RLE_GREY = 11,\n\n\t\t\tTGA_ORIGIN_MASK = 0x30,\n\t\t\tTGA_ORIGIN_SHIFT = 0x04,\n\t\t\tTGA_ORIGIN_BL = 0x00,\n\t\t\tTGA_ORIGIN_BR = 0x01,\n\t\t\tTGA_ORIGIN_UL = 0x02,\n\t\t\tTGA_ORIGIN_UR = 0x03;\n\n\t\tif ( buffer.length < 19 ) console.error( 'THREE.TGALoader: Not enough data to contain header.' );\n\n\t\tlet offset = 0;\n\n\t\tconst content = new Uint8Array( buffer ),\n\t\t\theader = {\n\t\t\t\tid_length: content[ offset ++ ],\n\t\t\t\tcolormap_type: content[ offset ++ ],\n\t\t\t\timage_type: content[ offset ++ ],\n\t\t\t\tcolormap_index: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_length: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tcolormap_size: content[ offset ++ ],\n\t\t\t\torigin: [\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\t\tcontent[ offset ++ ] | content[ offset ++ ] << 8\n\t\t\t\t],\n\t\t\t\twidth: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\theight: content[ offset ++ ] | content[ offset ++ ] << 8,\n\t\t\t\tpixel_size: content[ offset ++ ],\n\t\t\t\tflags: content[ offset ++ ]\n\t\t\t};\n\n\t\t// check tga if it is valid format\n\n\t\ttgaCheckHeader( header );\n\n\t\tif ( header.id_length + offset > buffer.length ) {\n\n\t\t\tconsole.error( 'THREE.TGALoader: No data.' );\n\n\t\t}\n\n\t\t// skip the needn't data\n\n\t\toffset += header.id_length;\n\n\t\t// get targa information about RLE compression and palette\n\n\t\tlet use_rle = false,\n\t\t\tuse_pal = false,\n\t\t\tuse_grey = false;\n\n\t\tswitch ( header.image_type ) {\n\n\t\t\tcase TGA_TYPE_RLE_INDEXED:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_INDEXED:\n\t\t\t\tuse_pal = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_RGB:\n\t\t\t\tuse_rle = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RGB:\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_RLE_GREY:\n\t\t\t\tuse_rle = true;\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t\tcase TGA_TYPE_GREY:\n\t\t\t\tuse_grey = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t//\n\n\t\tconst imageData = new Uint8Array( header.width * header.height * 4 );\n\t\tconst result = tgaParse( use_rle, use_pal, header, offset, content );\n\t\tgetTgaRGBA( imageData, header.width, header.height, result.pixel_data, result.palettes );\n\n\t\treturn {\n\n\t\t\tdata: imageData,\n\t\t\twidth: header.width,\n\t\t\theight: header.height,\n\t\t\tflipY: true,\n\t\t\tgenerateMipmaps: true,\n\t\t\tminFilter: LinearMipmapLinearFilter,\n\n\t\t};\n\n\t}\n\n}\n\nexport { TGALoader };\n","import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tFrontSide,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tScene,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTextureLoader,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace\n} from 'three';\nimport { TGALoader } from '../loaders/TGALoader.js';\n\nclass ColladaLoader extends Loader {\n\n\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( text, path ) {\n\n\t\tfunction getElementsByTagName( xml, name ) {\n\n\t\t\t// Non recursive xml.getElementsByTagName() ...\n\n\t\t\tconst array = [];\n\t\t\tconst childNodes = xml.childNodes;\n\n\t\t\tfor ( let i = 0, l = childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = childNodes[ i ];\n\n\t\t\t\tif ( child.nodeName === name ) {\n\n\t\t\t\t\tarray.push( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseStrings( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parts[ i ];\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseFloats( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseFloat( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseInts( text ) {\n\n\t\t\tif ( text.length === 0 ) return [];\n\n\t\t\tconst parts = text.trim().split( /\\s+/ );\n\t\t\tconst array = new Array( parts.length );\n\n\t\t\tfor ( let i = 0, l = parts.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ] = parseInt( parts[ i ] );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tfunction parseId( text ) {\n\n\t\t\treturn text.substring( 1 );\n\n\t\t}\n\n\t\tfunction generateId() {\n\n\t\t\treturn 'three_default_' + ( count ++ );\n\n\t\t}\n\n\t\tfunction isEmpty( object ) {\n\n\t\t\treturn Object.keys( object ).length === 0;\n\n\t\t}\n\n\t\t// asset\n\n\t\tfunction parseAsset( xml ) {\n\n\t\t\treturn {\n\t\t\t\tunit: parseAssetUnit( getElementsByTagName( xml, 'unit' )[ 0 ] ),\n\t\t\t\tupAxis: parseAssetUpAxis( getElementsByTagName( xml, 'up_axis' )[ 0 ] )\n\t\t\t};\n\n\t\t}\n\n\t\tfunction parseAssetUnit( xml ) {\n\n\t\t\tif ( ( xml !== undefined ) && ( xml.hasAttribute( 'meter' ) === true ) ) {\n\n\t\t\t\treturn parseFloat( xml.getAttribute( 'meter' ) );\n\n\t\t\t} else {\n\n\t\t\t\treturn 1; // default 1 meter\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAssetUpAxis( xml ) {\n\n\t\t\treturn xml !== undefined ? xml.textContent : 'Y_UP';\n\n\t\t}\n\n\t\t// library\n\n\t\tfunction parseLibrary( xml, libraryName, nodeName, parser ) {\n\n\t\t\tconst library = getElementsByTagName( xml, libraryName )[ 0 ];\n\n\t\t\tif ( library !== undefined ) {\n\n\t\t\t\tconst elements = getElementsByTagName( library, nodeName );\n\n\t\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\t\tparser( elements[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildLibrary( data, builder ) {\n\n\t\t\tfor ( const name in data ) {\n\n\t\t\t\tconst object = data[ name ];\n\t\t\t\tobject.build = builder( data[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get\n\n\t\tfunction getBuild( data, builder ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\tdata.build = builder( data );\n\n\t\t\treturn data.build;\n\n\t\t}\n\n\t\t// animation\n\n\t\tfunction parseAnimation( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {},\n\t\t\t\tsamplers: {},\n\t\t\t\tchannels: {}\n\t\t\t};\n\n\t\t\tlet hasChildren = false;\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet id;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler':\n\t\t\t\t\t\tid = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.samplers[ id ] = parseAnimationSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'channel':\n\t\t\t\t\t\tid = child.getAttribute( 'target' );\n\t\t\t\t\t\tdata.channels[ id ] = parseAnimationChannel( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'animation':\n\t\t\t\t\t\t// hierarchy of related animations\n\t\t\t\t\t\tparseAnimation( child );\n\t\t\t\t\t\thasChildren = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasChildren === false ) {\n\n\t\t\t\t// since 'id' attributes can be optional, it's necessary to generate a UUID for unqiue assignment\n\n\t\t\t\tlibrary.animations[ xml.getAttribute( 'id' ) || MathUtils.generateUUID() ] = data;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseAnimationSampler( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {},\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseAnimationChannel( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tconst target = xml.getAttribute( 'target' );\n\n\t\t\t// parsing SID Addressing Syntax\n\n\t\t\tlet parts = target.split( '/' );\n\n\t\t\tconst id = parts.shift();\n\t\t\tlet sid = parts.shift();\n\n\t\t\t// check selection syntax\n\n\t\t\tconst arraySyntax = ( sid.indexOf( '(' ) !== - 1 );\n\t\t\tconst memberSyntax = ( sid.indexOf( '.' ) !== - 1 );\n\n\t\t\tif ( memberSyntax ) {\n\n\t\t\t\t// member selection access\n\n\t\t\t\tparts = sid.split( '.' );\n\t\t\t\tsid = parts.shift();\n\t\t\t\tdata.member = parts.shift();\n\n\t\t\t} else if ( arraySyntax ) {\n\n\t\t\t\t// array-access syntax. can be used to express fields in one-dimensional vectors or two-dimensional matrices.\n\n\t\t\t\tconst indices = sid.split( '(' );\n\t\t\t\tsid = indices.shift();\n\n\t\t\t\tfor ( let i = 0; i < indices.length; i ++ ) {\n\n\t\t\t\t\tindices[ i ] = parseInt( indices[ i ].replace( /\\)/, '' ) );\n\n\t\t\t\t}\n\n\t\t\t\tdata.indices = indices;\n\n\t\t\t}\n\n\t\t\tdata.id = id;\n\t\t\tdata.sid = sid;\n\n\t\t\tdata.arraySyntax = arraySyntax;\n\t\t\tdata.memberSyntax = memberSyntax;\n\n\t\t\tdata.sampler = parseId( xml.getAttribute( 'source' ) );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildAnimation( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst channels = data.channels;\n\t\t\tconst samplers = data.samplers;\n\t\t\tconst sources = data.sources;\n\n\t\t\tfor ( const target in channels ) {\n\n\t\t\t\tif ( channels.hasOwnProperty( target ) ) {\n\n\t\t\t\t\tconst channel = channels[ target ];\n\t\t\t\t\tconst sampler = samplers[ channel.sampler ];\n\n\t\t\t\t\tconst inputId = sampler.inputs.INPUT;\n\t\t\t\t\tconst outputId = sampler.inputs.OUTPUT;\n\n\t\t\t\t\tconst inputSource = sources[ inputId ];\n\t\t\t\t\tconst outputSource = sources[ outputId ];\n\n\t\t\t\t\tconst animation = buildAnimationChannel( channel, inputSource, outputSource );\n\n\t\t\t\t\tcreateKeyframeTracks( animation, tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction getAnimation( id ) {\n\n\t\t\treturn getBuild( library.animations[ id ], buildAnimation );\n\n\t\t}\n\n\t\tfunction buildAnimationChannel( channel, inputSource, outputSource ) {\n\n\t\t\tconst node = library.nodes[ channel.id ];\n\t\t\tconst object3D = getNode( node.id );\n\n\t\t\tconst transform = node.transforms[ channel.sid ];\n\t\t\tconst defaultMatrix = node.matrix.clone().transpose();\n\n\t\t\tlet time, stride;\n\t\t\tlet i, il, j, jl;\n\n\t\t\tconst data = {};\n\n\t\t\t// the collada spec allows the animation of data in various ways.\n\t\t\t// depending on the transform type (matrix, translate, rotate, scale), we execute different logic\n\n\t\t\tswitch ( transform ) {\n\n\t\t\t\tcase 'matrix':\n\n\t\t\t\t\tfor ( i = 0, il = inputSource.array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\ttime = inputSource.array[ i ];\n\t\t\t\t\t\tstride = i * outputSource.stride;\n\n\t\t\t\t\t\tif ( data[ time ] === undefined ) data[ time ] = {};\n\n\t\t\t\t\t\tif ( channel.arraySyntax === true ) {\n\n\t\t\t\t\t\t\tconst value = outputSource.array[ stride ];\n\t\t\t\t\t\t\tconst index = channel.indices[ 0 ] + 4 * channel.indices[ 1 ];\n\n\t\t\t\t\t\t\tdata[ time ][ index ] = value;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( j = 0, jl = outputSource.stride; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tdata[ time ][ j ] = outputSource.array[ stride + j ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'scale':\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst keyframes = prepareAnimationData( data, defaultMatrix );\n\n\t\t\tconst animation = {\n\t\t\t\tname: object3D.uuid,\n\t\t\t\tkeyframes: keyframes\n\t\t\t};\n\n\t\t\treturn animation;\n\n\t\t}\n\n\t\tfunction prepareAnimationData( data, defaultMatrix ) {\n\n\t\t\tconst keyframes = [];\n\n\t\t\t// transfer data into a sortable array\n\n\t\t\tfor ( const time in data ) {\n\n\t\t\t\tkeyframes.push( { time: parseFloat( time ), value: data[ time ] } );\n\n\t\t\t}\n\n\t\t\t// ensure keyframes are sorted by time\n\n\t\t\tkeyframes.sort( ascending );\n\n\t\t\t// now we clean up all animation data, so we can use them for keyframe tracks\n\n\t\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\t\ttransformAnimationData( keyframes, i, defaultMatrix.elements[ i ] );\n\n\t\t\t}\n\n\t\t\treturn keyframes;\n\n\t\t\t// array sort function\n\n\t\t\tfunction ascending( a, b ) {\n\n\t\t\t\treturn a.time - b.time;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst position = new Vector3();\n\t\tconst scale = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\n\t\tfunction createKeyframeTracks( animation, tracks ) {\n\n\t\t\tconst keyframes = animation.keyframes;\n\t\t\tconst name = animation.name;\n\n\t\t\tconst times = [];\n\t\t\tconst positionData = [];\n\t\t\tconst quaternionData = [];\n\t\t\tconst scaleData = [];\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tconst time = keyframe.time;\n\t\t\t\tconst value = keyframe.value;\n\n\t\t\t\tmatrix.fromArray( value ).transpose();\n\t\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\t\ttimes.push( time );\n\t\t\t\tpositionData.push( position.x, position.y, position.z );\n\t\t\t\tquaternionData.push( quaternion.x, quaternion.y, quaternion.z, quaternion.w );\n\t\t\t\tscaleData.push( scale.x, scale.y, scale.z );\n\n\t\t\t}\n\n\t\t\tif ( positionData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.position', times, positionData ) );\n\t\t\tif ( quaternionData.length > 0 ) tracks.push( new QuaternionKeyframeTrack( name + '.quaternion', times, quaternionData ) );\n\t\t\tif ( scaleData.length > 0 ) tracks.push( new VectorKeyframeTrack( name + '.scale', times, scaleData ) );\n\n\t\t\treturn tracks;\n\n\t\t}\n\n\t\tfunction transformAnimationData( keyframes, property, defaultValue ) {\n\n\t\t\tlet keyframe;\n\n\t\t\tlet empty = true;\n\t\t\tlet i, l;\n\n\t\t\t// check, if values of a property are missing in our keyframes\n\n\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === undefined ) {\n\n\t\t\t\t\tkeyframe.value[ property ] = null; // mark as missing\n\n\t\t\t\t} else {\n\n\t\t\t\t\tempty = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( empty === true ) {\n\n\t\t\t\t// no values at all, so we set a default value\n\n\t\t\t\tfor ( i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\t\tkeyframe = keyframes[ i ];\n\n\t\t\t\t\tkeyframe.value[ property ] = defaultValue;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// filling gaps\n\n\t\t\t\tcreateMissingKeyframes( keyframes, property );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction createMissingKeyframes( keyframes, property ) {\n\n\t\t\tlet prev, next;\n\n\t\t\tfor ( let i = 0, l = keyframes.length; i < l; i ++ ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] === null ) {\n\n\t\t\t\t\tprev = getPrev( keyframes, i, property );\n\t\t\t\t\tnext = getNext( keyframes, i, property );\n\n\t\t\t\t\tif ( prev === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = next.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( next === null ) {\n\n\t\t\t\t\t\tkeyframe.value[ property ] = prev.value[ property ];\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinterpolate( keyframe, prev, next, property );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getPrev( keyframes, i, property ) {\n\n\t\t\twhile ( i >= 0 ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti --;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction getNext( keyframes, i, property ) {\n\n\t\t\twhile ( i < keyframes.length ) {\n\n\t\t\t\tconst keyframe = keyframes[ i ];\n\n\t\t\t\tif ( keyframe.value[ property ] !== null ) return keyframe;\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfunction interpolate( key, prev, next, property ) {\n\n\t\t\tif ( ( next.time - prev.time ) === 0 ) {\n\n\t\t\t\tkey.value[ property ] = prev.value[ property ];\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tkey.value[ property ] = ( ( key.time - prev.time ) * ( next.value[ property ] - prev.value[ property ] ) / ( next.time - prev.time ) ) + prev.value[ property ];\n\n\t\t}\n\n\t\t// animation clips\n\n\t\tfunction parseAnimationClip( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'id' ) || 'default',\n\t\t\t\tstart: parseFloat( xml.getAttribute( 'start' ) || 0 ),\n\t\t\t\tend: parseFloat( xml.getAttribute( 'end' ) || 0 ),\n\t\t\t\tanimations: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_animation':\n\t\t\t\t\t\tdata.animations.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.clips[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildAnimationClip( data ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\tconst name = data.name;\n\t\t\tconst duration = ( data.end - data.start ) || - 1;\n\t\t\tconst animations = data.animations;\n\n\t\t\tfor ( let i = 0, il = animations.length; i < il; i ++ ) {\n\n\t\t\t\tconst animationTracks = getAnimation( animations[ i ] );\n\n\t\t\t\tfor ( let j = 0, jl = animationTracks.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttracks.push( animationTracks[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, duration, tracks );\n\n\t\t}\n\n\t\tfunction getAnimationClip( id ) {\n\n\t\t\treturn getBuild( library.clips[ id ], buildAnimationClip );\n\n\t\t}\n\n\t\t// controller\n\n\t\tfunction parseController( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'skin':\n\t\t\t\t\t\t// there is exactly one skin per controller\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.skin = parseSkin( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'morph':\n\t\t\t\t\t\tdata.id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Morph target animation not supported yet.' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.controllers[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSkin( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsources: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_shape_matrix':\n\t\t\t\t\t\tdata.bindShapeMatrix = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tconst id = child.getAttribute( 'id' );\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'joints':\n\t\t\t\t\t\tdata.joints = parseJoints( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertex_weights':\n\t\t\t\t\t\tdata.vertexWeights = parseVertexWeights( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseJoints( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = id;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseVertexWeights( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinputs: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tdata.inputs[ semantic ] = { id: id, offset: offset };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tdata.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tdata.v = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildController( data ) {\n\n\t\t\tconst build = {\n\t\t\t\tid: data.id\n\t\t\t};\n\n\t\t\tconst geometry = library.geometries[ build.id ];\n\n\t\t\tif ( data.skin !== undefined ) {\n\n\t\t\t\tbuild.skin = buildSkin( data.skin );\n\n\t\t\t\t// we enhance the 'sources' property of the corresponding geometry with our skin data\n\n\t\t\t\tgeometry.sources.skinIndices = build.skin.indices;\n\t\t\t\tgeometry.sources.skinWeights = build.skin.weights;\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildSkin( data ) {\n\n\t\t\tconst BONE_LIMIT = 4;\n\n\t\t\tconst build = {\n\t\t\t\tjoints: [], // this must be an array to preserve the joint order\n\t\t\t\tindices: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t},\n\t\t\t\tweights: {\n\t\t\t\t\tarray: [],\n\t\t\t\t\tstride: BONE_LIMIT\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertexWeights = data.vertexWeights;\n\n\t\t\tconst vcount = vertexWeights.vcount;\n\t\t\tconst v = vertexWeights.v;\n\t\t\tconst jointOffset = vertexWeights.inputs.JOINT.offset;\n\t\t\tconst weightOffset = vertexWeights.inputs.WEIGHT.offset;\n\n\t\t\tconst jointSource = data.sources[ data.joints.inputs.JOINT ];\n\t\t\tconst inverseSource = data.sources[ data.joints.inputs.INV_BIND_MATRIX ];\n\n\t\t\tconst weights = sources[ vertexWeights.inputs.WEIGHT.id ].array;\n\t\t\tlet stride = 0;\n\n\t\t\tlet i, j, l;\n\n\t\t\t// process skin data for each vertex\n\n\t\t\tfor ( i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\tconst jointCount = vcount[ i ]; // this is the amount of joints that affect a single vertex\n\t\t\t\tconst vertexSkinData = [];\n\n\t\t\t\tfor ( j = 0; j < jointCount; j ++ ) {\n\n\t\t\t\t\tconst skinIndex = v[ stride + jointOffset ];\n\t\t\t\t\tconst weightId = v[ stride + weightOffset ];\n\t\t\t\t\tconst skinWeight = weights[ weightId ];\n\n\t\t\t\t\tvertexSkinData.push( { index: skinIndex, weight: skinWeight } );\n\n\t\t\t\t\tstride += 2;\n\n\t\t\t\t}\n\n\t\t\t\t// we sort the joints in descending order based on the weights.\n\t\t\t\t// this ensures, we only procced the most important joints of the vertex\n\n\t\t\t\tvertexSkinData.sort( descending );\n\n\t\t\t\t// now we provide for each vertex a set of four index and weight values.\n\t\t\t\t// the order of the skin data matches the order of vertices\n\n\t\t\t\tfor ( j = 0; j < BONE_LIMIT; j ++ ) {\n\n\t\t\t\t\tconst d = vertexSkinData[ j ];\n\n\t\t\t\t\tif ( d !== undefined ) {\n\n\t\t\t\t\t\tbuild.indices.array.push( d.index );\n\t\t\t\t\t\tbuild.weights.array.push( d.weight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbuild.indices.array.push( 0 );\n\t\t\t\t\t\tbuild.weights.array.push( 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup bind matrix\n\n\t\t\tif ( data.bindShapeMatrix ) {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().fromArray( data.bindShapeMatrix ).transpose();\n\n\t\t\t} else {\n\n\t\t\t\tbuild.bindMatrix = new Matrix4().identity();\n\n\t\t\t}\n\n\t\t\t// process bones and inverse bind matrix data\n\n\t\t\tfor ( i = 0, l = jointSource.array.length; i < l; i ++ ) {\n\n\t\t\t\tconst name = jointSource.array[ i ];\n\t\t\t\tconst boneInverse = new Matrix4().fromArray( inverseSource.array, i * inverseSource.stride ).transpose();\n\n\t\t\t\tbuild.joints.push( { name: name, boneInverse: boneInverse } );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t\t// array sort function\n\n\t\t\tfunction descending( a, b ) {\n\n\t\t\t\treturn b.weight - a.weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getController( id ) {\n\n\t\t\treturn getBuild( library.controllers[ id ], buildController );\n\n\t\t}\n\n\t\t// image\n\n\t\tfunction parseImage( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tinit_from: getElementsByTagName( xml, 'init_from' )[ 0 ].textContent\n\t\t\t};\n\n\t\t\tlibrary.images[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildImage( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data.init_from;\n\n\t\t}\n\n\t\tfunction getImage( id ) {\n\n\t\t\tconst data = library.images[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildImage );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find image with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// effect\n\n\t\tfunction parseEffect( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'profile_COMMON':\n\t\t\t\t\t\tdata.profile = parseEffectProfileCOMMON( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.effects[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseEffectProfileCOMMON( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsurfaces: {},\n\t\t\t\tsamplers: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'newparam':\n\t\t\t\t\t\tparseEffectNewparam( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectNewparam( xml, data ) {\n\n\t\t\tconst sid = xml.getAttribute( 'sid' );\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'surface':\n\t\t\t\t\t\tdata.surfaces[ sid ] = parseEffectSurface( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'sampler2D':\n\t\t\t\t\t\tdata.samplers[ sid ] = parseEffectSampler( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectSurface( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'init_from':\n\t\t\t\t\t\tdata.init_from = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectSampler( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.source = child.textContent;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'constant':\n\t\t\t\t\tcase 'lambert':\n\t\t\t\t\tcase 'blinn':\n\t\t\t\t\tcase 'phong':\n\t\t\t\t\t\tdata.type = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseEffectParameters( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tdata.extra = parseEffectExtra( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectParameter( child );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tdata[ child.nodeName ] = {\n\t\t\t\t\t\t\topaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',\n\t\t\t\t\t\t\tdata: parseEffectParameter( child )\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameter( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'float':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTexture( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttechnique: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tparseEffectParameterTextureExtra( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtra( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tparseEffectParameterTextureExtraTechnique( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectParameterTextureExtraTechnique( xml, data ) {\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'repeatU':\n\t\t\t\t\tcase 'repeatV':\n\t\t\t\t\tcase 'offsetU':\n\t\t\t\t\tcase 'offsetV':\n\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'wrapU':\n\t\t\t\t\tcase 'wrapV':\n\n\t\t\t\t\t\t// some files have values for wrapU/wrapV which become NaN via parseInt\n\n\t\t\t\t\t\tif ( child.textContent.toUpperCase() === 'TRUE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 1;\n\n\t\t\t\t\t\t} else if ( child.textContent.toUpperCase() === 'FALSE' ) {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tdata.technique[ child.nodeName ] = parseInt( child.textContent );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseEffectExtra( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique':\n\t\t\t\t\t\tdata.technique = parseEffectExtraTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseInt( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseEffectExtraTechniqueBump( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseEffectExtraTechniqueBump( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'texture':\n\t\t\t\t\t\tdata[ child.nodeName ] = { id: child.getAttribute( 'texture' ), texcoord: child.getAttribute( 'texcoord' ), extra: parseEffectParameterTexture( child ) };\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildEffect( data ) {\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getEffect( id ) {\n\n\t\t\treturn getBuild( library.effects[ id ], buildEffect );\n\n\t\t}\n\n\t\t// material\n\n\t\tfunction parseMaterial( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'instance_effect':\n\t\t\t\t\t\tdata.url = parseId( child.getAttribute( 'url' ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.materials[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction getTextureLoader( image ) {\n\n\t\t\tlet loader;\n\n\t\t\tlet extension = image.slice( ( image.lastIndexOf( '.' ) - 1 >>> 0 ) + 2 ); // http://www.jstips.co/en/javascript/get-file-extension/\n\t\t\textension = extension.toLowerCase();\n\n\t\t\tswitch ( extension ) {\n\n\t\t\t\tcase 'tga':\n\t\t\t\t\tloader = tgaLoader;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tloader = textureLoader;\n\n\t\t\t}\n\n\t\t\treturn loader;\n\n\t\t}\n\n\t\tfunction buildMaterial( data ) {\n\n\t\t\tconst effect = getEffect( data.url );\n\t\t\tconst technique = effect.profile.technique;\n\n\t\t\tlet material;\n\n\t\t\tswitch ( technique.type ) {\n\n\t\t\t\tcase 'phong':\n\t\t\t\tcase 'blinn':\n\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'lambert':\n\t\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmaterial = new MeshBasicMaterial();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tmaterial.name = data.name || '';\n\n\t\t\tfunction getTexture( textureObject, colorSpace = null ) {\n\n\t\t\t\tconst sampler = effect.profile.samplers[ textureObject.id ];\n\t\t\t\tlet image = null;\n\n\t\t\t\t// get image\n\n\t\t\t\tif ( sampler !== undefined ) {\n\n\t\t\t\t\tconst surface = effect.profile.surfaces[ sampler.source ];\n\t\t\t\t\timage = getImage( surface.init_from );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).' );\n\t\t\t\t\timage = getImage( textureObject.id );\n\n\t\t\t\t}\n\n\t\t\t\t// create texture if image is avaiable\n\n\t\t\t\tif ( image !== null ) {\n\n\t\t\t\t\tconst loader = getTextureLoader( image );\n\n\t\t\t\t\tif ( loader !== undefined ) {\n\n\t\t\t\t\t\tconst texture = loader.load( image );\n\n\t\t\t\t\t\tconst extra = textureObject.extra;\n\n\t\t\t\t\t\tif ( extra !== undefined && extra.technique !== undefined && isEmpty( extra.technique ) === false ) {\n\n\t\t\t\t\t\t\tconst technique = extra.technique;\n\n\t\t\t\t\t\t\ttexture.wrapS = technique.wrapU ? RepeatWrapping : ClampToEdgeWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = technique.wrapV ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\t\t\t\t\t\ttexture.offset.set( technique.offsetU || 0, technique.offsetV || 0 );\n\t\t\t\t\t\t\ttexture.repeat.set( technique.repeatU || 1, technique.repeatV || 1 );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttexture.wrapS = RepeatWrapping;\n\t\t\t\t\t\t\ttexture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( colorSpace !== null ) {\n\n\t\t\t\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Loader for texture %s not found.', image );\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t create texture with ID:', textureObject.id );\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst parameters = technique.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tconst parameter = parameters[ key ];\n\n\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\tcase 'diffuse':\n\t\t\t\t\t\tif ( parameter.color ) material.color.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.map = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'specular':\n\t\t\t\t\t\tif ( parameter.color && material.specular ) material.specular.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.specularMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\tif ( parameter.texture ) material.normalMap = getTexture( parameter.texture );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'ambient':\n\t\t\t\t\t\tif ( parameter.texture ) material.lightMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'shininess':\n\t\t\t\t\t\tif ( parameter.float && material.shininess ) material.shininess = parameter.float;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'emission':\n\t\t\t\t\t\tif ( parameter.color && material.emissive ) material.emissive.fromArray( parameter.color );\n\t\t\t\t\t\tif ( parameter.texture ) material.emissiveMap = getTexture( parameter.texture, SRGBColorSpace );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tmaterial.color.convertSRGBToLinear();\n\t\t\tif ( material.specular ) material.specular.convertSRGBToLinear();\n\t\t\tif ( material.emissive ) material.emissive.convertSRGBToLinear();\n\n\t\t\t//\n\n\t\t\tlet transparent = parameters[ 'transparent' ];\n\t\t\tlet transparency = parameters[ 'transparency' ];\n\n\t\t\t// <transparency> does not exist but <transparent>\n\n\t\t\tif ( transparency === undefined && transparent ) {\n\n\t\t\t\ttransparency = {\n\t\t\t\t\tfloat: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// <transparent> does not exist but <transparency>\n\n\t\t\tif ( transparent === undefined && transparency ) {\n\n\t\t\t\ttransparent = {\n\t\t\t\t\topaque: 'A_ONE',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tcolor: [ 1, 1, 1, 1 ]\n\t\t\t\t\t} };\n\n\t\t\t}\n\n\t\t\tif ( transparent && transparency ) {\n\n\t\t\t\t// handle case if a texture exists but no color\n\n\t\t\t\tif ( transparent.data.texture ) {\n\n\t\t\t\t\t// we do not set an alpha map (see #13792)\n\n\t\t\t\t\tmaterial.transparent = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst color = transparent.data.color;\n\n\t\t\t\t\tswitch ( transparent.opaque ) {\n\n\t\t\t\t\t\tcase 'A_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 3 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 0 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'A_ZERO':\n\t\t\t\t\t\t\tmaterial.opacity = 1 - ( color[ 3 ] * transparency.float );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'RGB_ONE':\n\t\t\t\t\t\t\tmaterial.opacity = color[ 0 ] * transparency.float;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.', transparent.opaque );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material.opacity < 1 ) material.transparent = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\n\t\t\tif ( technique.extra !== undefined && technique.extra.technique !== undefined ) {\n\n\t\t\t\tconst techniques = technique.extra.technique;\n\n\t\t\t\tfor ( const k in techniques ) {\n\n\t\t\t\t\tconst v = techniques[ k ];\n\n\t\t\t\t\tswitch ( k ) {\n\n\t\t\t\t\t\tcase 'double_sided':\n\t\t\t\t\t\t\tmaterial.side = ( v === 1 ? DoubleSide : FrontSide );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'bump':\n\t\t\t\t\t\t\tmaterial.normalMap = getTexture( v.texture );\n\t\t\t\t\t\t\tmaterial.normalScale = new Vector2( 1, 1 );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t\tfunction getMaterial( id ) {\n\n\t\t\treturn getBuild( library.materials[ id ], buildMaterial );\n\n\t\t}\n\n\t\t// camera\n\n\t\tfunction parseCamera( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' )\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'optics':\n\t\t\t\t\t\tdata.optics = parseCameraOptics( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.cameras[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseCameraOptics( xml ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\treturn parseCameraTechnique( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {};\n\n\t\t}\n\n\t\tfunction parseCameraTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'perspective':\n\t\t\t\t\tcase 'orthographic':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseCameraParameters( child );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseCameraParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'xfov':\n\t\t\t\t\tcase 'yfov':\n\t\t\t\t\tcase 'xmag':\n\t\t\t\t\tcase 'ymag':\n\t\t\t\t\tcase 'znear':\n\t\t\t\t\tcase 'zfar':\n\t\t\t\t\tcase 'aspect_ratio':\n\t\t\t\t\t\tdata[ child.nodeName ] = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildCamera( data ) {\n\n\t\t\tlet camera;\n\n\t\t\tswitch ( data.optics.technique ) {\n\n\t\t\t\tcase 'perspective':\n\t\t\t\t\tcamera = new PerspectiveCamera(\n\t\t\t\t\t\tdata.optics.parameters.yfov,\n\t\t\t\t\t\tdata.optics.parameters.aspect_ratio,\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'orthographic':\n\t\t\t\t\tlet ymag = data.optics.parameters.ymag;\n\t\t\t\t\tlet xmag = data.optics.parameters.xmag;\n\t\t\t\t\tconst aspectRatio = data.optics.parameters.aspect_ratio;\n\n\t\t\t\t\txmag = ( xmag === undefined ) ? ( ymag * aspectRatio ) : xmag;\n\t\t\t\t\tymag = ( ymag === undefined ) ? ( xmag / aspectRatio ) : ymag;\n\n\t\t\t\t\txmag *= 0.5;\n\t\t\t\t\tymag *= 0.5;\n\n\t\t\t\t\tcamera = new OrthographicCamera(\n\t\t\t\t\t\t- xmag, xmag, ymag, - ymag, // left, right, top, bottom\n\t\t\t\t\t\tdata.optics.parameters.znear,\n\t\t\t\t\t\tdata.optics.parameters.zfar\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tcamera.name = data.name || '';\n\n\t\t\treturn camera;\n\n\t\t}\n\n\t\tfunction getCamera( id ) {\n\n\t\t\tconst data = library.cameras[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildCamera );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find camera with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// light\n\n\t\tfunction parseLight( xml ) {\n\n\t\t\tlet data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tdata = parseLightTechnique( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.lights[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseLightTechnique( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'directional':\n\t\t\t\t\tcase 'point':\n\t\t\t\t\tcase 'spot':\n\t\t\t\t\tcase 'ambient':\n\n\t\t\t\t\t\tdata.technique = child.nodeName;\n\t\t\t\t\t\tdata.parameters = parseLightParameters( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseLightParameters( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'color':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.color = new Color().fromArray( array ).convertSRGBToLinear();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'falloff_angle':\n\t\t\t\t\t\tdata.falloffAngle = parseFloat( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'quadratic_attenuation':\n\t\t\t\t\t\tconst f = parseFloat( child.textContent );\n\t\t\t\t\t\tdata.distance = f ? Math.sqrt( 1 / f ) : 0;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildLight( data ) {\n\n\t\t\tlet light;\n\n\t\t\tswitch ( data.technique ) {\n\n\t\t\t\tcase 'directional':\n\t\t\t\t\tlight = new DirectionalLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'point':\n\t\t\t\t\tlight = new PointLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'spot':\n\t\t\t\t\tlight = new SpotLight();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ambient':\n\t\t\t\t\tlight = new AmbientLight();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( data.parameters.color ) light.color.copy( data.parameters.color );\n\t\t\tif ( data.parameters.distance ) light.distance = data.parameters.distance;\n\n\t\t\treturn light;\n\n\t\t}\n\n\t\tfunction getLight( id ) {\n\n\t\t\tconst data = library.lights[ id ];\n\n\t\t\tif ( data !== undefined ) {\n\n\t\t\t\treturn getBuild( data, buildLight );\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: Couldn\\'t find light with ID:', id );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// geometry\n\n\t\tfunction parseGeometry( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tsources: {},\n\t\t\t\tvertices: {},\n\t\t\t\tprimitives: []\n\t\t\t};\n\n\t\t\tconst mesh = getElementsByTagName( xml, 'mesh' )[ 0 ];\n\n\t\t\t// the following tags inside geometry are not supported yet (see https://github.com/mrdoob/three.js/pull/12606): convex_mesh, spline, brep\n\t\t\tif ( mesh === undefined ) return;\n\n\t\t\tfor ( let i = 0; i < mesh.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = mesh.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tconst id = child.getAttribute( 'id' );\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'source':\n\t\t\t\t\t\tdata.sources[ id ] = parseSource( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vertices':\n\t\t\t\t\t\t// data.sources[ id ] = data.sources[ parseId( getElementsByTagName( child, 'input' )[ 0 ].getAttribute( 'source' ) ) ];\n\t\t\t\t\t\tdata.vertices = parseGeometryVertices( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polygons':\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unsupported primitive type: ', child.nodeName );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tdata.primitives.push( parseGeometryPrimitive( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.geometries[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parseSource( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tarray: [],\n\t\t\t\tstride: 3\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'float_array':\n\t\t\t\t\t\tdata.array = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Name_array':\n\t\t\t\t\t\tdata.array = parseStrings( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tconst accessor = getElementsByTagName( child, 'accessor' )[ 0 ];\n\n\t\t\t\t\t\tif ( accessor !== undefined ) {\n\n\t\t\t\t\t\t\tdata.stride = parseInt( accessor.getAttribute( 'stride' ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryVertices( xml ) {\n\n\t\t\tconst data = {};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tdata[ child.getAttribute( 'semantic' ) ] = parseId( child.getAttribute( 'source' ) );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseGeometryPrimitive( xml ) {\n\n\t\t\tconst primitive = {\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tmaterial: xml.getAttribute( 'material' ),\n\t\t\t\tcount: parseInt( xml.getAttribute( 'count' ) ),\n\t\t\t\tinputs: {},\n\t\t\t\tstride: 0,\n\t\t\t\thasUV: false\n\t\t\t};\n\n\t\t\tfor ( let i = 0, l = xml.childNodes.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'input':\n\t\t\t\t\t\tconst id = parseId( child.getAttribute( 'source' ) );\n\t\t\t\t\t\tconst semantic = child.getAttribute( 'semantic' );\n\t\t\t\t\t\tconst offset = parseInt( child.getAttribute( 'offset' ) );\n\t\t\t\t\t\tconst set = parseInt( child.getAttribute( 'set' ) );\n\t\t\t\t\t\tconst inputname = ( set > 0 ? semantic + set : semantic );\n\t\t\t\t\t\tprimitive.inputs[ inputname ] = { id: id, offset: offset };\n\t\t\t\t\t\tprimitive.stride = Math.max( primitive.stride, offset + 1 );\n\t\t\t\t\t\tif ( semantic === 'TEXCOORD' ) primitive.hasUV = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'vcount':\n\t\t\t\t\t\tprimitive.vcount = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'p':\n\t\t\t\t\t\tprimitive.p = parseInts( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn primitive;\n\n\t\t}\n\n\t\tfunction groupPrimitives( primitives ) {\n\n\t\t\tconst build = {};\n\n\t\t\tfor ( let i = 0; i < primitives.length; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( build[ primitive.type ] === undefined ) build[ primitive.type ] = [];\n\n\t\t\t\tbuild[ primitive.type ].push( primitive );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction checkUVCoordinates( primitives ) {\n\n\t\t\tlet count = 0;\n\n\t\t\tfor ( let i = 0, l = primitives.length; i < l; i ++ ) {\n\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\tif ( primitive.hasUV === true ) {\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( count > 0 && count < primitives.length ) {\n\n\t\t\t\tprimitives.uvsNeedsFix = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction buildGeometry( data ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst sources = data.sources;\n\t\t\tconst vertices = data.vertices;\n\t\t\tconst primitives = data.primitives;\n\n\t\t\tif ( primitives.length === 0 ) return {};\n\n\t\t\t// our goal is to create one buffer geometry for a single type of primitives\n\t\t\t// first, we group all primitives by their type\n\n\t\t\tconst groupedPrimitives = groupPrimitives( primitives );\n\n\t\t\tfor ( const type in groupedPrimitives ) {\n\n\t\t\t\tconst primitiveType = groupedPrimitives[ type ];\n\n\t\t\t\t// second, ensure consistent uv coordinates for each type of primitives (polylist,triangles or lines)\n\n\t\t\t\tcheckUVCoordinates( primitiveType );\n\n\t\t\t\t// third, create a buffer geometry for each type of primitives\n\n\t\t\t\tbuild[ type ] = buildGeometryType( primitiveType, sources, vertices );\n\n\t\t\t}\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryType( primitives, sources, vertices ) {\n\n\t\t\tconst build = {};\n\n\t\t\tconst position = { array: [], stride: 0 };\n\t\t\tconst normal = { array: [], stride: 0 };\n\t\t\tconst uv = { array: [], stride: 0 };\n\t\t\tconst uv1 = { array: [], stride: 0 };\n\t\t\tconst color = { array: [], stride: 0 };\n\n\t\t\tconst skinIndex = { array: [], stride: 4 };\n\t\t\tconst skinWeight = { array: [], stride: 4 };\n\n\t\t\tconst geometry = new BufferGeometry();\n\n\t\t\tconst materialKeys = [];\n\n\t\t\tlet start = 0;\n\n\t\t\tfor ( let p = 0; p < primitives.length; p ++ ) {\n\n\t\t\t\tconst primitive = primitives[ p ];\n\t\t\t\tconst inputs = primitive.inputs;\n\n\t\t\t\t// groups\n\n\t\t\t\tlet count = 0;\n\n\t\t\t\tswitch ( primitive.type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tcount = primitive.count * 2;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\t\tcount = primitive.count * 3;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'polylist':\n\n\t\t\t\t\t\tfor ( let g = 0; g < primitive.count; g ++ ) {\n\n\t\t\t\t\t\t\tconst vc = primitive.vcount[ g ];\n\n\t\t\t\t\t\t\tswitch ( vc ) {\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\tcount += 3; // single triangle\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\tcount += 6; // quad, subdivided into two triangles\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tcount += ( vc - 2 ) * 3; // polylist with more than four vertices\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.addGroup( start, count, p );\n\t\t\t\tstart += count;\n\n\t\t\t\t// material\n\n\t\t\t\tif ( primitive.material ) {\n\n\t\t\t\t\tmaterialKeys.push( primitive.material );\n\n\t\t\t\t}\n\n\t\t\t\t// geometry data\n\n\t\t\t\tfor ( const name in inputs ) {\n\n\t\t\t\t\tconst input = inputs[ name ];\n\n\t\t\t\t\tswitch ( name )\t{\n\n\t\t\t\t\t\tcase 'VERTEX':\n\t\t\t\t\t\t\tfor ( const key in vertices ) {\n\n\t\t\t\t\t\t\t\tconst id = vertices[ key ];\n\n\t\t\t\t\t\t\t\tswitch ( key ) {\n\n\t\t\t\t\t\t\t\t\tcase 'POSITION':\n\t\t\t\t\t\t\t\t\t\tconst prevLength = position.array.length;\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, position.array );\n\t\t\t\t\t\t\t\t\t\tposition.stride = sources[ id ].stride;\n\n\t\t\t\t\t\t\t\t\t\tif ( sources.skinWeights && sources.skinIndices ) {\n\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinIndices, input.offset, skinIndex.array );\n\t\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources.skinWeights, input.offset, skinWeight.array );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// see #3803\n\n\t\t\t\t\t\t\t\t\t\tif ( primitive.hasUV === false && primitives.uvsNeedsFix === true ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst count = ( position.array.length - prevLength ) / position.stride;\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// fill missing uv coordinates\n\n\t\t\t\t\t\t\t\t\t\t\t\tuv.array.push( 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, normal.array );\n\t\t\t\t\t\t\t\t\t\tnormal.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, color.array );\n\t\t\t\t\t\t\t\t\t\tcolor.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ id ], input.offset, uv1.array );\n\t\t\t\t\t\t\t\t\t\tuv.stride = sources[ id ].stride;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'NORMAL':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, normal.array );\n\t\t\t\t\t\t\tnormal.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'COLOR':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, color.array, true );\n\t\t\t\t\t\t\tcolor.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv.array );\n\t\t\t\t\t\t\tuv.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TEXCOORD1':\n\t\t\t\t\t\t\tbuildGeometryData( primitive, sources[ input.id ], input.offset, uv1.array );\n\t\t\t\t\t\t\tuv1.stride = sources[ input.id ].stride;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tif ( position.array.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position.array, position.stride ) );\n\t\t\tif ( normal.array.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal.array, normal.stride ) );\n\t\t\tif ( color.array.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color.array, color.stride ) );\n\t\t\tif ( uv.array.length > 0 ) geometry.setAttribute( 'uv', new Float32BufferAttribute( uv.array, uv.stride ) );\n\t\t\tif ( uv1.array.length > 0 ) geometry.setAttribute( 'uv1', new Float32BufferAttribute( uv1.array, uv1.stride ) );\n\n\t\t\tif ( skinIndex.array.length > 0 ) geometry.setAttribute( 'skinIndex', new Float32BufferAttribute( skinIndex.array, skinIndex.stride ) );\n\t\t\tif ( skinWeight.array.length > 0 ) geometry.setAttribute( 'skinWeight', new Float32BufferAttribute( skinWeight.array, skinWeight.stride ) );\n\n\t\t\tbuild.data = geometry;\n\t\t\tbuild.type = primitives[ 0 ].type;\n\t\t\tbuild.materialKeys = materialKeys;\n\n\t\t\treturn build;\n\n\t\t}\n\n\t\tfunction buildGeometryData( primitive, source, offset, array, isColor = false ) {\n\n\t\t\tconst indices = primitive.p;\n\t\t\tconst stride = primitive.stride;\n\t\t\tconst vcount = primitive.vcount;\n\n\t\t\tfunction pushVector( i ) {\n\n\t\t\t\tlet index = indices[ i + offset ] * sourceStride;\n\t\t\t\tconst length = index + sourceStride;\n\n\t\t\t\tfor ( ; index < length; index ++ ) {\n\n\t\t\t\t\tarray.push( sourceArray[ index ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( isColor ) {\n\n\t\t\t\t\t// convert the vertex colors from srgb to linear if present\n\t\t\t\t\tconst startIndex = array.length - sourceStride - 1;\n\t\t\t\t\ttempColor.setRGB(\n\t\t\t\t\t\tarray[ startIndex + 0 ],\n\t\t\t\t\t\tarray[ startIndex + 1 ],\n\t\t\t\t\t\tarray[ startIndex + 2 ]\n\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\tarray[ startIndex + 0 ] = tempColor.r;\n\t\t\t\t\tarray[ startIndex + 1 ] = tempColor.g;\n\t\t\t\t\tarray[ startIndex + 2 ] = tempColor.b;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst sourceArray = source.array;\n\t\t\tconst sourceStride = source.stride;\n\n\t\t\tif ( primitive.vcount !== undefined ) {\n\n\t\t\t\tlet index = 0;\n\n\t\t\t\tfor ( let i = 0, l = vcount.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst count = vcount[ i ];\n\n\t\t\t\t\tif ( count === 4 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\t\t\t\t\t\tconst d = index + stride * 3;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( d );\n\t\t\t\t\t\tpushVector( b ); pushVector( c ); pushVector( d );\n\n\t\t\t\t\t} else if ( count === 3 ) {\n\n\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\tconst b = index + stride * 1;\n\t\t\t\t\t\tconst c = index + stride * 2;\n\n\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t} else if ( count > 4 ) {\n\n\t\t\t\t\t\tfor ( let k = 1, kl = ( count - 2 ); k <= kl; k ++ ) {\n\n\t\t\t\t\t\t\tconst a = index + stride * 0;\n\t\t\t\t\t\t\tconst b = index + stride * k;\n\t\t\t\t\t\t\tconst c = index + stride * ( k + 1 );\n\n\t\t\t\t\t\t\tpushVector( a ); pushVector( b ); pushVector( c );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tindex += stride * count;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = indices.length; i < l; i += stride ) {\n\n\t\t\t\t\tpushVector( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getGeometry( id ) {\n\n\t\t\treturn getBuild( library.geometries[ id ], buildGeometry );\n\n\t\t}\n\n\t\t// kinematics\n\n\t\tfunction parseKinematicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tjoints: {},\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparseKinematicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildKinematicsModel( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsModel( id ) {\n\n\t\t\treturn getBuild( library.kinematicsModels[ id ], buildKinematicsModel );\n\n\t\t}\n\n\t\tfunction parseKinematicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'joint':\n\t\t\t\t\t\tdata.joints[ child.getAttribute( 'sid' ) ] = parseKinematicsJoint( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parseKinematicsJoint( xml ) {\n\n\t\t\tlet data;\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\tdata = parseKinematicsJointParameter( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsJointParameter( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\taxis: new Vector3(),\n\t\t\t\tlimits: {\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 0\n\t\t\t\t},\n\t\t\t\ttype: xml.nodeName,\n\t\t\t\tstatic: false,\n\t\t\t\tzeroPosition: 0,\n\t\t\t\tmiddlePosition: 0\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst array = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.axis.fromArray( array );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'limits':\n\t\t\t\t\t\tconst max = child.getElementsByTagName( 'max' )[ 0 ];\n\t\t\t\t\t\tconst min = child.getElementsByTagName( 'min' )[ 0 ];\n\n\t\t\t\t\t\tdata.limits.max = parseFloat( max.textContent );\n\t\t\t\t\t\tdata.limits.min = parseFloat( min.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// if min is equal to or greater than max, consider the joint static\n\n\t\t\tif ( data.limits.min >= data.limits.max ) {\n\n\t\t\t\tdata.static = true;\n\n\t\t\t}\n\n\t\t\t// calculate middle position\n\n\t\t\tdata.middlePosition = ( data.limits.min + data.limits.max ) / 2.0;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsLink( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\tattachments: [],\n\t\t\t\ttransforms: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'attachment_full':\n\t\t\t\t\t\tdata.attachments.push( parseKinematicsAttachment( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsAttachment( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tjoint: xml.getAttribute( 'joint' ).split( '/' ).pop(),\n\t\t\t\ttransforms: [],\n\t\t\t\tlinks: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'link':\n\t\t\t\t\t\tdata.links.push( parseKinematicsLink( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tdata.transforms.push( parseKinematicsTransform( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseKinematicsTransform( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttype: xml.nodeName\n\t\t\t};\n\n\t\t\tconst array = parseFloats( xml.textContent );\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tdata.obj = new Matrix4();\n\t\t\t\t\tdata.obj.fromArray( array ).transpose();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'translate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tdata.obj = new Vector3();\n\t\t\t\t\tdata.obj.fromArray( array );\n\t\t\t\t\tdata.angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// physics\n\n\t\tfunction parsePhysicsModel( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\trigidBodies: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'rigid_body':\n\t\t\t\t\t\tdata.rigidBodies[ child.getAttribute( 'name' ) ] = {};\n\t\t\t\t\t\tparsePhysicsRigidBody( child, data.rigidBodies[ child.getAttribute( 'name' ) ] );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.physicsModels[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction parsePhysicsRigidBody( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'technique_common':\n\t\t\t\t\t\tparsePhysicsTechniqueCommon( child, data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction parsePhysicsTechniqueCommon( xml, data ) {\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'inertia':\n\t\t\t\t\t\tdata.inertia = parseFloats( child.textContent );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'mass':\n\t\t\t\t\t\tdata.mass = parseFloats( child.textContent )[ 0 ];\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// scene\n\n\t\tfunction parseKinematicsScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tbindJointAxis: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_joint_axis':\n\t\t\t\t\t\tdata.bindJointAxis.push( parseKinematicsBindJointAxis( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlibrary.kinematicsScenes[ parseId( xml.getAttribute( 'url' ) ) ] = data;\n\n\t\t}\n\n\t\tfunction parseKinematicsBindJointAxis( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\ttarget: xml.getAttribute( 'target' ).split( '/' ).pop()\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'axis':\n\t\t\t\t\t\tconst param = child.getElementsByTagName( 'param' )[ 0 ];\n\t\t\t\t\t\tdata.axis = param.textContent;\n\t\t\t\t\t\tconst tmpJointIndex = data.axis.split( 'inst_' ).pop().split( 'axis' )[ 0 ];\n\t\t\t\t\t\tdata.jointIndex = tmpJointIndex.substring( 0, tmpJointIndex.length - 1 );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildKinematicsScene( data ) {\n\n\t\t\tif ( data.build !== undefined ) return data.build;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction getKinematicsScene( id ) {\n\n\t\t\treturn getBuild( library.kinematicsScenes[ id ], buildKinematicsScene );\n\n\t\t}\n\n\t\tfunction setupKinematics() {\n\n\t\t\tconst kinematicsModelId = Object.keys( library.kinematicsModels )[ 0 ];\n\t\t\tconst kinematicsSceneId = Object.keys( library.kinematicsScenes )[ 0 ];\n\t\t\tconst visualSceneId = Object.keys( library.visualScenes )[ 0 ];\n\n\t\t\tif ( kinematicsModelId === undefined || kinematicsSceneId === undefined ) return;\n\n\t\t\tconst kinematicsModel = getKinematicsModel( kinematicsModelId );\n\t\t\tconst kinematicsScene = getKinematicsScene( kinematicsSceneId );\n\t\t\tconst visualScene = getVisualScene( visualSceneId );\n\n\t\t\tconst bindJointAxis = kinematicsScene.bindJointAxis;\n\t\t\tconst jointMap = {};\n\n\t\t\tfor ( let i = 0, l = bindJointAxis.length; i < l; i ++ ) {\n\n\t\t\t\tconst axis = bindJointAxis[ i ];\n\n\t\t\t\t// the result of the following query is an element of type 'translate', 'rotate','scale' or 'matrix'\n\n\t\t\t\tconst targetElement = collada.querySelector( '[sid=\"' + axis.target + '\"]' );\n\n\t\t\t\tif ( targetElement ) {\n\n\t\t\t\t\t// get the parent of the transform element\n\n\t\t\t\t\tconst parentVisualElement = targetElement.parentElement;\n\n\t\t\t\t\t// connect the joint of the kinematics model with the element in the visual scene\n\n\t\t\t\t\tconnect( axis.jointIndex, parentVisualElement );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction connect( jointIndex, visualElement ) {\n\n\t\t\t\tconst visualElementName = visualElement.getAttribute( 'name' );\n\t\t\t\tconst joint = kinematicsModel.joints[ jointIndex ];\n\n\t\t\t\tvisualScene.traverse( function ( object ) {\n\n\t\t\t\t\tif ( object.name === visualElementName ) {\n\n\t\t\t\t\t\tjointMap[ jointIndex ] = {\n\t\t\t\t\t\t\tobject: object,\n\t\t\t\t\t\t\ttransforms: buildTransformList( visualElement ),\n\t\t\t\t\t\t\tjoint: joint,\n\t\t\t\t\t\t\tposition: joint.zeroPosition\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst m0 = new Matrix4();\n\n\t\t\tkinematics = {\n\n\t\t\t\tjoints: kinematicsModel && kinematicsModel.joints,\n\n\t\t\t\tgetJointValue: function ( jointIndex ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\treturn jointData.position;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' doesn\\'t exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetJointValue: function ( jointIndex, value ) {\n\n\t\t\t\t\tconst jointData = jointMap[ jointIndex ];\n\n\t\t\t\t\tif ( jointData ) {\n\n\t\t\t\t\t\tconst joint = jointData.joint;\n\n\t\t\t\t\t\tif ( value > joint.limits.max || value < joint.limits.min ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ').' );\n\n\t\t\t\t\t\t} else if ( joint.static ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Joint ' + jointIndex + ' is static.' );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconst object = jointData.object;\n\t\t\t\t\t\t\tconst axis = joint.axis;\n\t\t\t\t\t\t\tconst transforms = jointData.transforms;\n\n\t\t\t\t\t\t\tmatrix.identity();\n\n\t\t\t\t\t\t\t// each update, we have to apply all transforms in the correct order\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < transforms.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst transform = transforms[ i ];\n\n\t\t\t\t\t\t\t\t// if there is a connection of the transform node with a joint, apply the joint value\n\n\t\t\t\t\t\t\t\tif ( transform.sid && transform.sid.indexOf( jointIndex ) !== - 1 ) {\n\n\t\t\t\t\t\t\t\t\tswitch ( joint.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'revolute':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( axis, MathUtils.degToRad( value ) ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'prismatic':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( axis.x * value, axis.y * value, axis.z * value ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Unknown joint type: ' + joint.type );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tswitch ( transform.type ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.scale( transform.obj );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\t\t\t\t\t\tmatrix.multiply( m0.makeRotationAxis( transform.obj, transform.angle ) );\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tobject.matrix.copy( matrix );\n\t\t\t\t\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t\t\t\t\tjointMap[ jointIndex ].position = value;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.log( 'THREE.ColladaLoader: ' + jointIndex + ' does not exist.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction buildTransformList( node ) {\n\n\t\t\tconst transforms = [];\n\n\t\t\tconst xml = collada.querySelector( '[id=\"' + node.id + '\"]' );\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array, vector;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst matrix = new Matrix4().fromArray( array ).transpose();\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: matrix\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector = new Vector3().fromArray( array );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\ttransforms.push( {\n\t\t\t\t\t\t\tsid: child.getAttribute( 'sid' ),\n\t\t\t\t\t\t\ttype: child.nodeName,\n\t\t\t\t\t\t\tobj: vector,\n\t\t\t\t\t\t\tangle: angle\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn transforms;\n\n\t\t}\n\n\t\t// nodes\n\n\t\tfunction prepareNodes( xml ) {\n\n\t\t\tconst elements = xml.getElementsByTagName( 'node' );\n\n\t\t\t// ensure all node elements have id attributes\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tconst element = elements[ i ];\n\n\t\t\t\tif ( element.hasAttribute( 'id' ) === false ) {\n\n\t\t\t\t\telement.setAttribute( 'id', generateId() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst matrix = new Matrix4();\n\t\tconst vector = new Vector3();\n\n\t\tfunction parseNode( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ) || '',\n\t\t\t\ttype: xml.getAttribute( 'type' ),\n\t\t\t\tid: xml.getAttribute( 'id' ),\n\t\t\t\tsid: xml.getAttribute( 'sid' ),\n\t\t\t\tmatrix: new Matrix4(),\n\t\t\t\tnodes: [],\n\t\t\t\tinstanceCameras: [],\n\t\t\t\tinstanceControllers: [],\n\t\t\t\tinstanceLights: [],\n\t\t\t\tinstanceGeometries: [],\n\t\t\t\tinstanceNodes: [],\n\t\t\t\ttransforms: {}\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tif ( child.nodeType !== 1 ) continue;\n\n\t\t\t\tlet array;\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'node':\n\t\t\t\t\t\tdata.nodes.push( child.getAttribute( 'id' ) );\n\t\t\t\t\t\tparseNode( child );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_camera':\n\t\t\t\t\t\tdata.instanceCameras.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_controller':\n\t\t\t\t\t\tdata.instanceControllers.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_light':\n\t\t\t\t\t\tdata.instanceLights.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_geometry':\n\t\t\t\t\t\tdata.instanceGeometries.push( parseNodeInstance( child ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'instance_node':\n\t\t\t\t\t\tdata.instanceNodes.push( parseId( child.getAttribute( 'url' ) ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'matrix':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.fromArray( array ).transpose() );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'translate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tvector.fromArray( array );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeTranslation( vector.x, vector.y, vector.z ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'rotate':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tconst angle = MathUtils.degToRad( array[ 3 ] );\n\t\t\t\t\t\tdata.matrix.multiply( matrix.makeRotationAxis( vector.fromArray( array ), angle ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'scale':\n\t\t\t\t\t\tarray = parseFloats( child.textContent );\n\t\t\t\t\t\tdata.matrix.scale( vector.fromArray( array ) );\n\t\t\t\t\t\tdata.transforms[ child.getAttribute( 'sid' ) ] = child.nodeName;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'extra':\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.log( child );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasNode( data.id ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.', data.id );\n\n\t\t\t} else {\n\n\t\t\t\tlibrary.nodes[ data.id ] = data;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction parseNodeInstance( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tid: parseId( xml.getAttribute( 'url' ) ),\n\t\t\t\tmaterials: {},\n\t\t\t\tskeletons: []\n\t\t\t};\n\n\t\t\tfor ( let i = 0; i < xml.childNodes.length; i ++ ) {\n\n\t\t\t\tconst child = xml.childNodes[ i ];\n\n\t\t\t\tswitch ( child.nodeName ) {\n\n\t\t\t\t\tcase 'bind_material':\n\t\t\t\t\t\tconst instances = child.getElementsByTagName( 'instance_material' );\n\n\t\t\t\t\t\tfor ( let j = 0; j < instances.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst instance = instances[ j ];\n\t\t\t\t\t\t\tconst symbol = instance.getAttribute( 'symbol' );\n\t\t\t\t\t\t\tconst target = instance.getAttribute( 'target' );\n\n\t\t\t\t\t\t\tdata.materials[ symbol ] = parseId( target );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'skeleton':\n\t\t\t\t\t\tdata.skeletons.push( parseId( child.textContent ) );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\tfunction buildSkeleton( skeletons, joints ) {\n\n\t\t\tconst boneData = [];\n\t\t\tconst sortedBoneData = [];\n\n\t\t\tlet i, j, data;\n\n\t\t\t// a skeleton can have multiple root bones. collada expresses this\n\t\t\t// situtation with multiple \"skeleton\" tags per controller instance\n\n\t\t\tfor ( i = 0; i < skeletons.length; i ++ ) {\n\n\t\t\t\tconst skeleton = skeletons[ i ];\n\n\t\t\t\tlet root;\n\n\t\t\t\tif ( hasNode( skeleton ) ) {\n\n\t\t\t\t\troot = getNode( skeleton );\n\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t} else if ( hasVisualScene( skeleton ) ) {\n\n\t\t\t\t\t// handle case where the skeleton refers to the visual scene (#13335)\n\n\t\t\t\t\tconst visualScene = library.visualScenes[ skeleton ];\n\t\t\t\t\tconst children = visualScene.children;\n\n\t\t\t\t\tfor ( let j = 0; j < children.length; j ++ ) {\n\n\t\t\t\t\t\tconst child = children[ j ];\n\n\t\t\t\t\t\tif ( child.type === 'JOINT' ) {\n\n\t\t\t\t\t\t\tconst root = getNode( child.id );\n\t\t\t\t\t\t\tbuildBoneHierarchy( root, joints, boneData );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.ColladaLoader: Unable to find root bone of skeleton with ID:', skeleton );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// sort bone data (the order is defined in the corresponding controller)\n\n\t\t\tfor ( i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < boneData.length; j ++ ) {\n\n\t\t\t\t\tdata = boneData[ j ];\n\n\t\t\t\t\tif ( data.bone.name === joints[ i ].name ) {\n\n\t\t\t\t\t\tsortedBoneData[ i ] = data;\n\t\t\t\t\t\tdata.processed = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add unprocessed bone data at the end of the list\n\n\t\t\tfor ( i = 0; i < boneData.length; i ++ ) {\n\n\t\t\t\tdata = boneData[ i ];\n\n\t\t\t\tif ( data.processed === false ) {\n\n\t\t\t\t\tsortedBoneData.push( data );\n\t\t\t\t\tdata.processed = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// setup arrays for skeleton creation\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( i = 0; i < sortedBoneData.length; i ++ ) {\n\n\t\t\t\tdata = sortedBoneData[ i ];\n\n\t\t\t\tbones.push( data.bone );\n\t\t\t\tboneInverses.push( data.boneInverse );\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t}\n\n\t\tfunction buildBoneHierarchy( root, joints, boneData ) {\n\n\t\t\t// setup bone data from visual scene\n\n\t\t\troot.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isBone === true ) {\n\n\t\t\t\t\tlet boneInverse;\n\n\t\t\t\t\t// retrieve the boneInverse from the controller data\n\n\t\t\t\t\tfor ( let i = 0; i < joints.length; i ++ ) {\n\n\t\t\t\t\t\tconst joint = joints[ i ];\n\n\t\t\t\t\t\tif ( joint.name === object.name ) {\n\n\t\t\t\t\t\t\tboneInverse = joint.boneInverse;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( boneInverse === undefined ) {\n\n\t\t\t\t\t\t// Unfortunately, there can be joints in the visual scene that are not part of the\n\t\t\t\t\t\t// corresponding controller. In this case, we have to create a dummy boneInverse matrix\n\t\t\t\t\t\t// for the respective bone. This bone won't affect any vertices, because there are no skin indices\n\t\t\t\t\t\t// and weights defined for it. But we still have to add the bone to the sorted bone list in order to\n\t\t\t\t\t\t// ensure a correct animation of the model.\n\n\t\t\t\t\t\tboneInverse = new Matrix4();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneData.push( { bone: object, boneInverse: boneInverse, processed: false } );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction buildNode( data ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tconst matrix = data.matrix;\n\t\t\tconst nodes = data.nodes;\n\t\t\tconst type = data.type;\n\t\t\tconst instanceCameras = data.instanceCameras;\n\t\t\tconst instanceControllers = data.instanceControllers;\n\t\t\tconst instanceLights = data.instanceLights;\n\t\t\tconst instanceGeometries = data.instanceGeometries;\n\t\t\tconst instanceNodes = data.instanceNodes;\n\n\t\t\t// nodes\n\n\t\t\tfor ( let i = 0, l = nodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( nodes[ i ] ) );\n\n\t\t\t}\n\n\t\t\t// instance cameras\n\n\t\t\tfor ( let i = 0, l = instanceCameras.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceCamera = getCamera( instanceCameras[ i ] );\n\n\t\t\t\tif ( instanceCamera !== null ) {\n\n\t\t\t\t\tobjects.push( instanceCamera.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance controllers\n\n\t\t\tfor ( let i = 0, l = instanceControllers.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceControllers[ i ];\n\t\t\t\tconst controller = getController( instance.id );\n\t\t\t\tconst geometries = getGeometry( controller.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tconst skeletons = instance.skeletons;\n\t\t\t\tconst joints = controller.skin.joints;\n\n\t\t\t\tconst skeleton = buildSkeleton( skeletons, joints );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst object = newObjects[ j ];\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.bind( skeleton, controller.skin.bindMatrix );\n\t\t\t\t\t\tobject.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance lights\n\n\t\t\tfor ( let i = 0, l = instanceLights.length; i < l; i ++ ) {\n\n\t\t\t\tconst instanceLight = getLight( instanceLights[ i ] );\n\n\t\t\t\tif ( instanceLight !== null ) {\n\n\t\t\t\t\tobjects.push( instanceLight.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance geometries\n\n\t\t\tfor ( let i = 0, l = instanceGeometries.length; i < l; i ++ ) {\n\n\t\t\t\tconst instance = instanceGeometries[ i ];\n\n\t\t\t\t// a single geometry instance in collada can lead to multiple object3Ds.\n\t\t\t\t// this is the case when primitives are combined like triangles and lines\n\n\t\t\t\tconst geometries = getGeometry( instance.id );\n\t\t\t\tconst newObjects = buildObjects( geometries, instance.materials );\n\n\t\t\t\tfor ( let j = 0, jl = newObjects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tobjects.push( newObjects[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// instance nodes\n\n\t\t\tfor ( let i = 0, l = instanceNodes.length; i < l; i ++ ) {\n\n\t\t\t\tobjects.push( getNode( instanceNodes[ i ] ).clone() );\n\n\t\t\t}\n\n\t\t\tlet object;\n\n\t\t\tif ( nodes.length === 0 && objects.length === 1 ) {\n\n\t\t\t\tobject = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tobject = ( type === 'JOINT' ) ? new Bone() : new Group();\n\n\t\t\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t\t\tobject.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tobject.name = ( type === 'JOINT' ) ? data.sid : data.name;\n\t\t\tobject.matrix.copy( matrix );\n\t\t\tobject.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\treturn object;\n\n\t\t}\n\n\t\tconst fallbackMaterial = new MeshBasicMaterial( { color: 0xff00ff } );\n\n\t\tfunction resolveMaterialBinding( keys, instanceMaterials ) {\n\n\t\t\tconst materials = [];\n\n\t\t\tfor ( let i = 0, l = keys.length; i < l; i ++ ) {\n\n\t\t\t\tconst id = instanceMaterials[ keys[ i ] ];\n\n\t\t\t\tif ( id === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Material with key %s not found. Apply fallback material.', keys[ i ] );\n\t\t\t\t\tmaterials.push( fallbackMaterial );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterials.push( getMaterial( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t}\n\n\t\tfunction buildObjects( geometries, instanceMaterials ) {\n\n\t\t\tconst objects = [];\n\n\t\t\tfor ( const type in geometries ) {\n\n\t\t\t\tconst geometry = geometries[ type ];\n\n\t\t\t\tconst materials = resolveMaterialBinding( geometry.materialKeys, instanceMaterials );\n\n\t\t\t\t// handle case if no materials are defined\n\n\t\t\t\tif ( materials.length === 0 ) {\n\n\t\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\t\tmaterials.push( new LineBasicMaterial() );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( new MeshPhongMaterial() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Collada allows to use phong and lambert materials with lines. Replacing these cases with LineBasicMaterial.\n\n\t\t\t\tif ( type === 'lines' || type === 'linestrips' ) {\n\n\t\t\t\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\t\t\tif ( material.isMeshPhongMaterial === true || material.isMeshLambertMaterial === true ) {\n\n\t\t\t\t\t\t\tconst lineMaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t\t// copy compatible properties\n\n\t\t\t\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\t\t\t\tlineMaterial.opacity = material.opacity;\n\t\t\t\t\t\t\tlineMaterial.transparent = material.transparent;\n\n\t\t\t\t\t\t\t// replace material\n\n\t\t\t\t\t\t\tmaterials[ i ] = lineMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// regard skinning\n\n\t\t\t\tconst skinning = ( geometry.data.attributes.skinIndex !== undefined );\n\n\t\t\t\t// choose between a single or multi materials (material array)\n\n\t\t\t\tconst material = ( materials.length === 1 ) ? materials[ 0 ] : materials;\n\n\t\t\t\t// now create a specific 3D object\n\n\t\t\t\tlet object;\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'lines':\n\t\t\t\t\t\tobject = new LineSegments( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'linestrips':\n\t\t\t\t\t\tobject = new Line( geometry.data, material );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'triangles':\n\t\t\t\t\tcase 'polylist':\n\t\t\t\t\t\tif ( skinning ) {\n\n\t\t\t\t\t\t\tobject = new SkinnedMesh( geometry.data, material );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tobject = new Mesh( geometry.data, material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tobjects.push( object );\n\n\t\t\t}\n\n\t\t\treturn objects;\n\n\t\t}\n\n\t\tfunction hasNode( id ) {\n\n\t\t\treturn library.nodes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getNode( id ) {\n\n\t\t\treturn getBuild( library.nodes[ id ], buildNode );\n\n\t\t}\n\n\t\t// visual scenes\n\n\t\tfunction parseVisualScene( xml ) {\n\n\t\t\tconst data = {\n\t\t\t\tname: xml.getAttribute( 'name' ),\n\t\t\t\tchildren: []\n\t\t\t};\n\n\t\t\tprepareNodes( xml );\n\n\t\t\tconst elements = getElementsByTagName( xml, 'node' );\n\n\t\t\tfor ( let i = 0; i < elements.length; i ++ ) {\n\n\t\t\t\tdata.children.push( parseNode( elements[ i ] ) );\n\n\t\t\t}\n\n\t\t\tlibrary.visualScenes[ xml.getAttribute( 'id' ) ] = data;\n\n\t\t}\n\n\t\tfunction buildVisualScene( data ) {\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.name = data.name;\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tgroup.add( getNode( child.id ) );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t}\n\n\t\tfunction hasVisualScene( id ) {\n\n\t\t\treturn library.visualScenes[ id ] !== undefined;\n\n\t\t}\n\n\t\tfunction getVisualScene( id ) {\n\n\t\t\treturn getBuild( library.visualScenes[ id ], buildVisualScene );\n\n\t\t}\n\n\t\t// scenes\n\n\t\tfunction parseScene( xml ) {\n\n\t\t\tconst instance = getElementsByTagName( xml, 'instance_visual_scene' )[ 0 ];\n\t\t\treturn getVisualScene( parseId( instance.getAttribute( 'url' ) ) );\n\n\t\t}\n\n\t\tfunction setupAnimations() {\n\n\t\t\tconst clips = library.clips;\n\n\t\t\tif ( isEmpty( clips ) === true ) {\n\n\t\t\t\tif ( isEmpty( library.animations ) === false ) {\n\n\t\t\t\t\t// if there are animations but no clips, we create a default clip for playback\n\n\t\t\t\t\tconst tracks = [];\n\n\t\t\t\t\tfor ( const id in library.animations ) {\n\n\t\t\t\t\t\tconst animationTracks = getAnimation( id );\n\n\t\t\t\t\t\tfor ( let i = 0, l = animationTracks.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\ttracks.push( animationTracks[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimations.push( new AnimationClip( 'default', - 1, tracks ) );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( const id in clips ) {\n\n\t\t\t\t\tanimations.push( getAnimationClip( id ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// convert the parser error element into text with each child elements text\n\t\t// separated by new lines.\n\n\t\tfunction parserErrorToText( parserError ) {\n\n\t\t\tlet result = '';\n\t\t\tconst stack = [ parserError ];\n\n\t\t\twhile ( stack.length ) {\n\n\t\t\t\tconst node = stack.shift();\n\n\t\t\t\tif ( node.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t\t\tresult += node.textContent;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresult += '\\n';\n\t\t\t\t\tstack.push.apply( stack, node.childNodes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result.trim();\n\n\t\t}\n\n\t\tif ( text.length === 0 ) {\n\n\t\t\treturn { scene: new Scene() };\n\n\t\t}\n\n\t\tconst xml = new DOMParser().parseFromString( text, 'application/xml' );\n\n\t\tconst collada = getElementsByTagName( xml, 'COLLADA' )[ 0 ];\n\n\t\tconst parserError = xml.getElementsByTagName( 'parsererror' )[ 0 ];\n\t\tif ( parserError !== undefined ) {\n\n\t\t\t// Chrome will return parser error with a div in it\n\n\t\t\tconst errorElement = getElementsByTagName( parserError, 'div' )[ 0 ];\n\t\t\tlet errorText;\n\n\t\t\tif ( errorElement ) {\n\n\t\t\t\terrorText = errorElement.textContent;\n\n\t\t\t} else {\n\n\t\t\t\terrorText = parserErrorToText( parserError );\n\n\t\t\t}\n\n\t\t\tconsole.error( 'THREE.ColladaLoader: Failed to parse collada file.\\n', errorText );\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// metadata\n\n\t\tconst version = collada.getAttribute( 'version' );\n\t\tconsole.debug( 'THREE.ColladaLoader: File version', version );\n\n\t\tconst asset = parseAsset( getElementsByTagName( collada, 'asset' )[ 0 ] );\n\t\tconst textureLoader = new TextureLoader( this.manager );\n\t\ttextureLoader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\tlet tgaLoader;\n\n\t\tif ( TGALoader ) {\n\n\t\t\ttgaLoader = new TGALoader( this.manager );\n\t\t\ttgaLoader.setPath( this.resourcePath || path );\n\n\t\t}\n\n\t\t//\n\n\t\tconst tempColor = new Color();\n\t\tconst animations = [];\n\t\tlet kinematics = {};\n\t\tlet count = 0;\n\n\t\t//\n\n\t\tconst library = {\n\t\t\tanimations: {},\n\t\t\tclips: {},\n\t\t\tcontrollers: {},\n\t\t\timages: {},\n\t\t\teffects: {},\n\t\t\tmaterials: {},\n\t\t\tcameras: {},\n\t\t\tlights: {},\n\t\t\tgeometries: {},\n\t\t\tnodes: {},\n\t\t\tvisualScenes: {},\n\t\t\tkinematicsModels: {},\n\t\t\tphysicsModels: {},\n\t\t\tkinematicsScenes: {}\n\t\t};\n\n\t\tparseLibrary( collada, 'library_animations', 'animation', parseAnimation );\n\t\tparseLibrary( collada, 'library_animation_clips', 'animation_clip', parseAnimationClip );\n\t\tparseLibrary( collada, 'library_controllers', 'controller', parseController );\n\t\tparseLibrary( collada, 'library_images', 'image', parseImage );\n\t\tparseLibrary( collada, 'library_effects', 'effect', parseEffect );\n\t\tparseLibrary( collada, 'library_materials', 'material', parseMaterial );\n\t\tparseLibrary( collada, 'library_cameras', 'camera', parseCamera );\n\t\tparseLibrary( collada, 'library_lights', 'light', parseLight );\n\t\tparseLibrary( collada, 'library_geometries', 'geometry', parseGeometry );\n\t\tparseLibrary( collada, 'library_nodes', 'node', parseNode );\n\t\tparseLibrary( collada, 'library_visual_scenes', 'visual_scene', parseVisualScene );\n\t\tparseLibrary( collada, 'library_kinematics_models', 'kinematics_model', parseKinematicsModel );\n\t\tparseLibrary( collada, 'library_physics_models', 'physics_model', parsePhysicsModel );\n\t\tparseLibrary( collada, 'scene', 'instance_kinematics_scene', parseKinematicsScene );\n\n\t\tbuildLibrary( library.animations, buildAnimation );\n\t\tbuildLibrary( library.clips, buildAnimationClip );\n\t\tbuildLibrary( library.controllers, buildController );\n\t\tbuildLibrary( library.images, buildImage );\n\t\tbuildLibrary( library.effects, buildEffect );\n\t\tbuildLibrary( library.materials, buildMaterial );\n\t\tbuildLibrary( library.cameras, buildCamera );\n\t\tbuildLibrary( library.lights, buildLight );\n\t\tbuildLibrary( library.geometries, buildGeometry );\n\t\tbuildLibrary( library.visualScenes, buildVisualScene );\n\n\t\tsetupAnimations();\n\t\tsetupKinematics();\n\n\t\tconst scene = parseScene( getElementsByTagName( collada, 'scene' )[ 0 ] );\n\t\tscene.animations = animations;\n\n\t\tif ( asset.upAxis === 'Z_UP' ) {\n\n\t\t\tconsole.warn( 'THREE.ColladaLoader: You are loading an asset with a Z-UP coordinate system. The loader just rotates the asset to transform it into Y-UP. The vertex data are not converted, see #24289.' );\n\t\t\tscene.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\t}\n\n\t\tscene.scale.multiplyScalar( asset.unit );\n\n\t\treturn {\n\t\t\tget animations() {\n\n\t\t\t\tconsole.warn( 'THREE.ColladaLoader: Please access animations over scene.animations now.' );\n\t\t\t\treturn animations;\n\n\t\t\t},\n\t\t\tkinematics: kinematics,\n\t\t\tlibrary: library,\n\t\t\tscene: scene\n\t\t};\n\n\t}\n\n}\n\nexport { ColladaLoader };\n","import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLoader,\n\tMesh,\n\tMeshPhongMaterial\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\n/**\n * Description: Early release of an AMF Loader following the pattern of the\n * example loaders in the three.js project.\n *\n * Usage:\n *\tconst loader = new AMFLoader();\n *\tloader.load('/path/to/project.amf', function(objecttree) {\n *\t\tscene.add(objecttree);\n *\t});\n *\n * Materials now supported, material colors supported\n * Zip support, requires fflate\n * No constellation support (yet)!\n *\n */\n\nclass AMFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tfunction loadDocument( data ) {\n\n\t\t\tlet view = new DataView( data );\n\t\t\tconst magic = String.fromCharCode( view.getUint8( 0 ), view.getUint8( 1 ) );\n\n\t\t\tif ( magic === 'PK' ) {\n\n\t\t\t\tlet zip = null;\n\t\t\t\tlet file = null;\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Loading Zip' );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tzip = fflate.unzipSync( new Uint8Array( data ) );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tif ( e instanceof ReferenceError ) {\n\n\t\t\t\t\t\tconsole.log( 'THREE.AMFLoader: fflate missing and file is compressed.' );\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( file in zip ) {\n\n\t\t\t\t\tif ( file.toLowerCase().slice( - 4 ) === '.amf' ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Trying to load file asset: ' + file );\n\t\t\t\tview = new DataView( zip[ file ].buffer );\n\n\t\t\t}\n\n\t\t\tconst fileText = new TextDecoder().decode( view );\n\t\t\tconst xmlData = new DOMParser().parseFromString( fileText, 'application/xml' );\n\n\t\t\tif ( xmlData.documentElement.nodeName.toLowerCase() !== 'amf' ) {\n\n\t\t\t\tconsole.log( 'THREE.AMFLoader: Error loading AMF - no AMF document found.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn xmlData;\n\n\t\t}\n\n\t\tfunction loadDocumentScale( node ) {\n\n\t\t\tlet scale = 1.0;\n\t\t\tlet unit = 'millimeter';\n\n\t\t\tif ( node.documentElement.attributes.unit !== undefined ) {\n\n\t\t\t\tunit = node.documentElement.attributes.unit.value.toLowerCase();\n\n\t\t\t}\n\n\t\t\tconst scaleUnits = {\n\t\t\t\tmillimeter: 1.0,\n\t\t\t\tinch: 25.4,\n\t\t\t\tfeet: 304.8,\n\t\t\t\tmeter: 1000.0,\n\t\t\t\tmicron: 0.001\n\t\t\t};\n\n\t\t\tif ( scaleUnits[ unit ] !== undefined ) {\n\n\t\t\t\tscale = scaleUnits[ unit ];\n\n\t\t\t}\n\n\t\t\tconsole.log( 'THREE.AMFLoader: Unit scale: ' + scale );\n\t\t\treturn scale;\n\n\t\t}\n\n\t\tfunction loadMaterials( node ) {\n\n\t\t\tlet matName = 'AMF Material';\n\t\t\tconst matId = node.attributes.id.textContent;\n\t\t\tlet color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tlet loadedMaterial = null;\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matChildEl = node.childNodes[ i ];\n\n\t\t\t\tif ( matChildEl.nodeName === 'metadata' && matChildEl.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( matChildEl.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tmatName = matChildEl.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( matChildEl.nodeName === 'color' ) {\n\n\t\t\t\t\tcolor = loadColor( matChildEl );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tloadedMaterial = new MeshPhongMaterial( {\n\t\t\t\tflatShading: true,\n\t\t\t\tcolor: new Color( color.r, color.g, color.b ),\n\t\t\t\tname: matName\n\t\t\t} );\n\n\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\tloadedMaterial.transparent = true;\n\t\t\t\tloadedMaterial.opacity = color.a;\n\n\t\t\t}\n\n\t\t\treturn { id: matId, material: loadedMaterial };\n\n\t\t}\n\n\t\tfunction loadColor( node ) {\n\n\t\t\tconst color = { r: 1.0, g: 1.0, b: 1.0, a: 1.0 };\n\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i ++ ) {\n\n\t\t\t\tconst matColor = node.childNodes[ i ];\n\n\t\t\t\tif ( matColor.nodeName === 'r' ) {\n\n\t\t\t\t\tcolor.r = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'g' ) {\n\n\t\t\t\t\tcolor.g = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'b' ) {\n\n\t\t\t\t\tcolor.b = matColor.textContent;\n\n\t\t\t\t} else if ( matColor.nodeName === 'a' ) {\n\n\t\t\t\t\tcolor.a = matColor.textContent;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tfunction loadMeshVolume( node ) {\n\n\t\t\tconst volume = { name: '', triangles: [], materialid: null };\n\n\t\t\tlet currVolumeNode = node.firstElementChild;\n\n\t\t\tif ( node.attributes.materialid !== undefined ) {\n\n\t\t\t\tvolume.materialId = node.attributes.materialid.nodeValue;\n\n\t\t\t}\n\n\t\t\twhile ( currVolumeNode ) {\n\n\t\t\t\tif ( currVolumeNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currVolumeNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currVolumeNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tvolume.name = currVolumeNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currVolumeNode.nodeName === 'triangle' ) {\n\n\t\t\t\t\tconst v1 = currVolumeNode.getElementsByTagName( 'v1' )[ 0 ].textContent;\n\t\t\t\t\tconst v2 = currVolumeNode.getElementsByTagName( 'v2' )[ 0 ].textContent;\n\t\t\t\t\tconst v3 = currVolumeNode.getElementsByTagName( 'v3' )[ 0 ].textContent;\n\n\t\t\t\t\tvolume.triangles.push( v1, v2, v3 );\n\n\t\t\t\t}\n\n\t\t\t\tcurrVolumeNode = currVolumeNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn volume;\n\n\t\t}\n\n\t\tfunction loadMeshVertices( node ) {\n\n\t\t\tconst vertArray = [];\n\t\t\tconst normalArray = [];\n\t\t\tlet currVerticesNode = node.firstElementChild;\n\n\t\t\twhile ( currVerticesNode ) {\n\n\t\t\t\tif ( currVerticesNode.nodeName === 'vertex' ) {\n\n\t\t\t\t\tlet vNode = currVerticesNode.firstElementChild;\n\n\t\t\t\t\twhile ( vNode ) {\n\n\t\t\t\t\t\tif ( vNode.nodeName === 'coordinates' ) {\n\n\t\t\t\t\t\t\tconst x = vNode.getElementsByTagName( 'x' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst y = vNode.getElementsByTagName( 'y' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst z = vNode.getElementsByTagName( 'z' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tvertArray.push( x, y, z );\n\n\t\t\t\t\t\t} else if ( vNode.nodeName === 'normal' ) {\n\n\t\t\t\t\t\t\tconst nx = vNode.getElementsByTagName( 'nx' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst ny = vNode.getElementsByTagName( 'ny' )[ 0 ].textContent;\n\t\t\t\t\t\t\tconst nz = vNode.getElementsByTagName( 'nz' )[ 0 ].textContent;\n\n\t\t\t\t\t\t\tnormalArray.push( nx, ny, nz );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvNode = vNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrVerticesNode = currVerticesNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'vertices': vertArray, 'normals': normalArray };\n\n\t\t}\n\n\t\tfunction loadObject( node ) {\n\n\t\t\tconst objId = node.attributes.id.textContent;\n\t\t\tconst loadedObject = { name: 'amfobject', meshes: [] };\n\t\t\tlet currColor = null;\n\t\t\tlet currObjNode = node.firstElementChild;\n\n\t\t\twhile ( currObjNode ) {\n\n\t\t\t\tif ( currObjNode.nodeName === 'metadata' ) {\n\n\t\t\t\t\tif ( currObjNode.attributes.type !== undefined ) {\n\n\t\t\t\t\t\tif ( currObjNode.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\t\tloadedObject.name = currObjNode.textContent;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'color' ) {\n\n\t\t\t\t\tcurrColor = loadColor( currObjNode );\n\n\t\t\t\t} else if ( currObjNode.nodeName === 'mesh' ) {\n\n\t\t\t\t\tlet currMeshNode = currObjNode.firstElementChild;\n\t\t\t\t\tconst mesh = { vertices: [], normals: [], volumes: [], color: currColor };\n\n\t\t\t\t\twhile ( currMeshNode ) {\n\n\t\t\t\t\t\tif ( currMeshNode.nodeName === 'vertices' ) {\n\n\t\t\t\t\t\t\tconst loadedVertices = loadMeshVertices( currMeshNode );\n\n\t\t\t\t\t\t\tmesh.normals = mesh.normals.concat( loadedVertices.normals );\n\t\t\t\t\t\t\tmesh.vertices = mesh.vertices.concat( loadedVertices.vertices );\n\n\t\t\t\t\t\t} else if ( currMeshNode.nodeName === 'volume' ) {\n\n\t\t\t\t\t\t\tmesh.volumes.push( loadMeshVolume( currMeshNode ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrMeshNode = currMeshNode.nextElementSibling;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tloadedObject.meshes.push( mesh );\n\n\t\t\t\t}\n\n\t\t\t\tcurrObjNode = currObjNode.nextElementSibling;\n\n\t\t\t}\n\n\t\t\treturn { 'id': objId, 'obj': loadedObject };\n\n\t\t}\n\n\t\tconst xmlData = loadDocument( data );\n\t\tlet amfName = '';\n\t\tlet amfAuthor = '';\n\t\tconst amfScale = loadDocumentScale( xmlData );\n\t\tconst amfMaterials = {};\n\t\tconst amfObjects = {};\n\t\tconst childNodes = xmlData.documentElement.childNodes;\n\n\t\tlet i, j;\n\n\t\tfor ( i = 0; i < childNodes.length; i ++ ) {\n\n\t\t\tconst child = childNodes[ i ];\n\n\t\t\tif ( child.nodeName === 'metadata' ) {\n\n\t\t\t\tif ( child.attributes.type !== undefined ) {\n\n\t\t\t\t\tif ( child.attributes.type.value === 'name' ) {\n\n\t\t\t\t\t\tamfName = child.textContent;\n\n\t\t\t\t\t} else if ( child.attributes.type.value === 'author' ) {\n\n\t\t\t\t\t\tamfAuthor = child.textContent;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( child.nodeName === 'material' ) {\n\n\t\t\t\tconst loadedMaterial = loadMaterials( child );\n\n\t\t\t\tamfMaterials[ loadedMaterial.id ] = loadedMaterial.material;\n\n\t\t\t} else if ( child.nodeName === 'object' ) {\n\n\t\t\t\tconst loadedObject = loadObject( child );\n\n\t\t\t\tamfObjects[ loadedObject.id ] = loadedObject.obj;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst sceneObject = new Group();\n\t\tconst defaultMaterial = new MeshPhongMaterial( { color: 0xaaaaff, flatShading: true } );\n\n\t\tsceneObject.name = amfName;\n\t\tsceneObject.userData.author = amfAuthor;\n\t\tsceneObject.userData.loader = 'AMF';\n\n\t\tfor ( const id in amfObjects ) {\n\n\t\t\tconst part = amfObjects[ id ];\n\t\t\tconst meshes = part.meshes;\n\t\t\tconst newObject = new Group();\n\t\t\tnewObject.name = part.name || '';\n\n\t\t\tfor ( i = 0; i < meshes.length; i ++ ) {\n\n\t\t\t\tlet objDefaultMaterial = defaultMaterial;\n\t\t\t\tconst mesh = meshes[ i ];\n\t\t\t\tconst vertices = new Float32BufferAttribute( mesh.vertices, 3 );\n\t\t\t\tlet normals = null;\n\n\t\t\t\tif ( mesh.normals.length ) {\n\n\t\t\t\t\tnormals = new Float32BufferAttribute( mesh.normals, 3 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( mesh.color ) {\n\n\t\t\t\t\tconst color = mesh.color;\n\n\t\t\t\t\tobjDefaultMaterial = defaultMaterial.clone();\n\t\t\t\t\tobjDefaultMaterial.color = new Color( color.r, color.g, color.b );\n\n\t\t\t\t\tif ( color.a !== 1.0 ) {\n\n\t\t\t\t\t\tobjDefaultMaterial.transparent = true;\n\t\t\t\t\t\tobjDefaultMaterial.opacity = color.a;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst volumes = mesh.volumes;\n\n\t\t\t\tfor ( j = 0; j < volumes.length; j ++ ) {\n\n\t\t\t\t\tconst volume = volumes[ j ];\n\t\t\t\t\tconst newGeometry = new BufferGeometry();\n\t\t\t\t\tlet material = objDefaultMaterial;\n\n\t\t\t\t\tnewGeometry.setIndex( volume.triangles );\n\t\t\t\t\tnewGeometry.setAttribute( 'position', vertices.clone() );\n\n\t\t\t\t\tif ( normals ) {\n\n\t\t\t\t\t\tnewGeometry.setAttribute( 'normal', normals.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( amfMaterials[ volume.materialId ] !== undefined ) {\n\n\t\t\t\t\t\tmaterial = amfMaterials[ volume.materialId ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnewGeometry.scale( amfScale, amfScale, amfScale );\n\t\t\t\t\tnewObject.add( new Mesh( newGeometry, material.clone() ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tsceneObject.add( newObject );\n\n\t\t}\n\n\t\treturn sceneObject;\n\n\t}\n\n}\n\nexport { AMFLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader\n} from 'three';\n\n/**\n * GCodeLoader is used to load gcode files usually used for 3D printing or CNC applications.\n *\n * Gcode files are composed by commands used by machines to create objects.\n *\n * @class GCodeLoader\n * @param {Manager} manager Loading manager.\n */\n\nclass GCodeLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.splitLayer = false;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tlet state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };\n\t\tconst layers = [];\n\n\t\tlet currentLayer = undefined;\n\n\t\tconst pathMaterial = new LineBasicMaterial( { color: 0xFF0000 } );\n\t\tpathMaterial.name = 'path';\n\n\t\tconst extrudingMaterial = new LineBasicMaterial( { color: 0x00FF00 } );\n\t\textrudingMaterial.name = 'extruded';\n\n\t\tfunction newLayer( line ) {\n\n\t\t\tcurrentLayer = { vertex: [], pathVertex: [], z: line.z };\n\t\t\tlayers.push( currentLayer );\n\n\t\t}\n\n\t\t//Create lie segment between p1 and p2\n\t\tfunction addSegment( p1, p2 ) {\n\n\t\t\tif ( currentLayer === undefined ) {\n\n\t\t\t\tnewLayer( p1 );\n\n\t\t\t}\n\n\t\t\tif ( state.extruding ) {\n\n\t\t\t\tcurrentLayer.vertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.vertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentLayer.pathVertex.push( p1.x, p1.y, p1.z );\n\t\t\t\tcurrentLayer.pathVertex.push( p2.x, p2.y, p2.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction delta( v1, v2 ) {\n\n\t\t\treturn state.relative ? v2 : v2 - v1;\n\n\t\t}\n\n\t\tfunction absolute( v1, v2 ) {\n\n\t\t\treturn state.relative ? v1 + v2 : v2;\n\n\t\t}\n\n\t\tconst lines = data.replace( /;.+/g, '' ).split( '\\n' );\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tconst tokens = lines[ i ].split( ' ' );\n\t\t\tconst cmd = tokens[ 0 ].toUpperCase();\n\n\t\t\t//Argumments\n\t\t\tconst args = {};\n\t\t\ttokens.splice( 1 ).forEach( function ( token ) {\n\n\t\t\t\tif ( token[ 0 ] !== undefined ) {\n\n\t\t\t\t\tconst key = token[ 0 ].toLowerCase();\n\t\t\t\t\tconst value = parseFloat( token.substring( 1 ) );\n\t\t\t\t\targs[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t//Process commands\n\t\t\t//G0/G1 – Linear Movement\n\t\t\tif ( cmd === 'G0' || cmd === 'G1' ) {\n\n\t\t\t\tconst line = {\n\t\t\t\t\tx: args.x !== undefined ? absolute( state.x, args.x ) : state.x,\n\t\t\t\t\ty: args.y !== undefined ? absolute( state.y, args.y ) : state.y,\n\t\t\t\t\tz: args.z !== undefined ? absolute( state.z, args.z ) : state.z,\n\t\t\t\t\te: args.e !== undefined ? absolute( state.e, args.e ) : state.e,\n\t\t\t\t\tf: args.f !== undefined ? absolute( state.f, args.f ) : state.f,\n\t\t\t\t};\n\n\t\t\t\t//Layer change detection is or made by watching Z, it's made by watching when we extrude at a new Z position\n\t\t\t\tif ( delta( state.e, line.e ) > 0 ) {\n\n\t\t\t\t\tstate.extruding = delta( state.e, line.e ) > 0;\n\n\t\t\t\t\tif ( currentLayer == undefined || line.z != currentLayer.z ) {\n\n\t\t\t\t\t\tnewLayer( line );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\taddSegment( state, line );\n\t\t\t\tstate = line;\n\n\t\t\t} else if ( cmd === 'G2' || cmd === 'G3' ) {\n\n\t\t\t\t//G2/G3 - Arc Movement ( G2 clock wise and G3 counter clock wise )\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Arc command not supported' );\n\n\t\t\t} else if ( cmd === 'G90' ) {\n\n\t\t\t\t//G90: Set to Absolute Positioning\n\t\t\t\tstate.relative = false;\n\n\t\t\t} else if ( cmd === 'G91' ) {\n\n\t\t\t\t//G91: Set to state.relative Positioning\n\t\t\t\tstate.relative = true;\n\n\t\t\t} else if ( cmd === 'G92' ) {\n\n\t\t\t\t//G92: Set Position\n\t\t\t\tconst line = state;\n\t\t\t\tline.x = args.x !== undefined ? args.x : line.x;\n\t\t\t\tline.y = args.y !== undefined ? args.y : line.y;\n\t\t\t\tline.z = args.z !== undefined ? args.z : line.z;\n\t\t\t\tline.e = args.e !== undefined ? args.e : line.e;\n\n\t\t\t} else {\n\n\t\t\t\t//console.warn( 'THREE.GCodeLoader: Command not supported:' + cmd );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction addObject( vertex, extruding, i ) {\n\n\t\t\tconst geometry = new BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertex, 3 ) );\n\t\t\tconst segments = new LineSegments( geometry, extruding ? extrudingMaterial : pathMaterial );\n\t\t\tsegments.name = 'layer' + i;\n\t\t\tobject.add( segments );\n\n\t\t}\n\n\t\tconst object = new Group();\n\t\tobject.name = 'gcode';\n\n\t\tif ( this.splitLayer ) {\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\taddObject( layer.vertex, true, i );\n\t\t\t\taddObject( layer.pathVertex, false, i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst vertex = [],\n\t\t\t\tpathVertex = [];\n\n\t\t\tfor ( let i = 0; i < layers.length; i ++ ) {\n\n\t\t\t\tconst layer = layers[ i ];\n\t\t\t\tconst layerVertex = layer.vertex;\n\t\t\t\tconst layerPathVertex = layer.pathVertex;\n\n\t\t\t\tfor ( let j = 0; j < layerVertex.length; j ++ ) {\n\n\t\t\t\t\tvertex.push( layerVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < layerPathVertex.length; j ++ ) {\n\n\t\t\t\t\tpathVertex.push( layerPathVertex[ j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\taddObject( vertex, true, layers.length );\n\t\t\taddObject( pathVertex, false, layers.length );\n\n\t\t}\n\n\t\tobject.rotation.set( - Math.PI / 2, 0, 0 );\n\n\t\treturn object;\n\n\t}\n\n}\n\nexport { GCodeLoader };\n","import {\n\tAnimationClip,\n\tBone,\n\tFileLoader,\n\tLoader,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tSkeleton,\n\tVector3,\n\tVectorKeyframeTrack\n} from 'three';\n\n/**\n * Description: reads BVH files and outputs a single Skeleton and an AnimationClip\n *\n * Currently only supports bvh files containing a single root.\n *\n */\n\nclass BVHLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.animateBonePositions = true;\n\t\tthis.animateBoneRotations = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text ) {\n\n\t\t/*\n\t\t\treads a string array (lines) from a BVH file\n\t\t\tand outputs a skeleton structure including motion data\n\n\t\t\treturns thee root node:\n\t\t\t{ name: '', channels: [], children: [] }\n\t\t*/\n\t\tfunction readBvh( lines ) {\n\n\t\t\t// read model structure\n\n\t\t\tif ( nextLine( lines ) !== 'HIERARCHY' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: HIERARCHY expected.' );\n\n\t\t\t}\n\n\t\t\tconst list = []; // collects flat array of all bones\n\t\t\tconst root = readNode( lines, nextLine( lines ), list );\n\n\t\t\t// read motion data\n\n\t\t\tif ( nextLine( lines ) !== 'MOTION' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: MOTION expected.' );\n\n\t\t\t}\n\n\t\t\t// number of frames\n\n\t\t\tlet tokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst numFrames = parseInt( tokens[ 1 ] );\n\n\t\t\tif ( isNaN( numFrames ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read number of frames.' );\n\n\t\t\t}\n\n\t\t\t// frame time\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\tconst frameTime = parseFloat( tokens[ 2 ] );\n\n\t\t\tif ( isNaN( frameTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Failed to read frame time.' );\n\n\t\t\t}\n\n\t\t\t// read frame data line by line\n\n\t\t\tfor ( let i = 0; i < numFrames; i ++ ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\t\t\t\treadFrameData( tokens, i * frameTime, root );\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\t/*\n\t\t\tRecursively reads data from a single frame into the bone hierarchy.\n\t\t\tThe passed bone hierarchy has to be structured in the same order as the BVH file.\n\t\t\tkeyframe data is stored in bone.frames.\n\n\t\t\t- data: splitted string array (frame values), values are shift()ed so\n\t\t\tthis should be empty after parsing the whole hierarchy.\n\t\t\t- frameTime: playback time for this keyframe.\n\t\t\t- bone: the bone to read frame data from.\n\t\t*/\n\t\tfunction readFrameData( data, frameTime, bone ) {\n\n\t\t\t// end sites have no motion data\n\n\t\t\tif ( bone.type === 'ENDSITE' ) return;\n\n\t\t\t// add keyframe\n\n\t\t\tconst keyframe = {\n\t\t\t\ttime: frameTime,\n\t\t\t\tposition: new Vector3(),\n\t\t\t\trotation: new Quaternion()\n\t\t\t};\n\n\t\t\tbone.frames.push( keyframe );\n\n\t\t\tconst quat = new Quaternion();\n\n\t\t\tconst vx = new Vector3( 1, 0, 0 );\n\t\t\tconst vy = new Vector3( 0, 1, 0 );\n\t\t\tconst vz = new Vector3( 0, 0, 1 );\n\n\t\t\t// parse values for each channel in node\n\n\t\t\tfor ( let i = 0; i < bone.channels.length; i ++ ) {\n\n\t\t\t\tswitch ( bone.channels[ i ] ) {\n\n\t\t\t\t\tcase 'Xposition':\n\t\t\t\t\t\tkeyframe.position.x = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yposition':\n\t\t\t\t\t\tkeyframe.position.y = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zposition':\n\t\t\t\t\t\tkeyframe.position.z = parseFloat( data.shift().trim() );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Xrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vx, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Yrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vy, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Zrotation':\n\t\t\t\t\t\tquat.setFromAxisAngle( vz, parseFloat( data.shift().trim() ) * Math.PI / 180 );\n\t\t\t\t\t\tkeyframe.rotation.multiply( quat );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tconsole.warn( 'THREE.BVHLoader: Invalid channel type.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// parse child nodes\n\n\t\t\tfor ( let i = 0; i < bone.children.length; i ++ ) {\n\n\t\t\t\treadFrameData( data, frameTime, bone.children[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t Recursively parses the HIERACHY section of the BVH file\n\n\t\t - lines: all lines of the file. lines are consumed as we go along.\n\t\t - firstline: line containing the node type and name e.g. 'JOINT hip'\n\t\t - list: collects a flat list of nodes\n\n\t\t returns: a BVH node including children\n\t\t*/\n\t\tfunction readNode( lines, firstline, list ) {\n\n\t\t\tconst node = { name: '', type: '', frames: [] };\n\t\t\tlist.push( node );\n\n\t\t\t// parse node type and name\n\n\t\t\tlet tokens = firstline.split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ].toUpperCase() === 'END' && tokens[ 1 ].toUpperCase() === 'SITE' ) {\n\n\t\t\t\tnode.type = 'ENDSITE';\n\t\t\t\tnode.name = 'ENDSITE'; // bvh end sites have no name\n\n\t\t\t} else {\n\n\t\t\t\tnode.name = tokens[ 1 ];\n\t\t\t\tnode.type = tokens[ 0 ].toUpperCase();\n\n\t\t\t}\n\n\t\t\tif ( nextLine( lines ) !== '{' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected opening { after type & name' );\n\n\t\t\t}\n\n\t\t\t// parse OFFSET\n\n\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\tif ( tokens[ 0 ] !== 'OFFSET' ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected OFFSET but got: ' + tokens[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( tokens.length !== 4 ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid number of values for OFFSET.' );\n\n\t\t\t}\n\n\t\t\tconst offset = new Vector3(\n\t\t\t\tparseFloat( tokens[ 1 ] ),\n\t\t\t\tparseFloat( tokens[ 2 ] ),\n\t\t\t\tparseFloat( tokens[ 3 ] )\n\t\t\t);\n\n\t\t\tif ( isNaN( offset.x ) || isNaN( offset.y ) || isNaN( offset.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BVHLoader: Invalid values of OFFSET.' );\n\n\t\t\t}\n\n\t\t\tnode.offset = offset;\n\n\t\t\t// parse CHANNELS definitions\n\n\t\t\tif ( node.type !== 'ENDSITE' ) {\n\n\t\t\t\ttokens = nextLine( lines ).split( /[\\s]+/ );\n\n\t\t\t\tif ( tokens[ 0 ] !== 'CHANNELS' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.BVHLoader: Expected CHANNELS definition.' );\n\n\t\t\t\t}\n\n\t\t\t\tconst numChannels = parseInt( tokens[ 1 ] );\n\t\t\t\tnode.channels = tokens.splice( 2, numChannels );\n\t\t\t\tnode.children = [];\n\n\t\t\t}\n\n\t\t\t// read children\n\n\t\t\twhile ( true ) {\n\n\t\t\t\tconst line = nextLine( lines );\n\n\t\t\t\tif ( line === '}' ) {\n\n\t\t\t\t\treturn node;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnode.children.push( readNode( lines, line, list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t\trecursively converts the internal bvh node structure to a Bone hierarchy\n\n\t\t\tsource: the bvh root node\n\t\t\tlist: pass an empty array, collects a flat list of all converted THREE.Bones\n\n\t\t\treturns the root Bone\n\t\t*/\n\t\tfunction toTHREEBone( source, list ) {\n\n\t\t\tconst bone = new Bone();\n\t\t\tlist.push( bone );\n\n\t\t\tbone.position.add( source.offset );\n\t\t\tbone.name = source.name;\n\n\t\t\tif ( source.type !== 'ENDSITE' ) {\n\n\t\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tbone.add( toTHREEBone( source.children[ i ], list ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t\t/*\n\t\t\tbuilds a AnimationClip from the keyframe data saved in each bone.\n\n\t\t\tbone: bvh root node\n\n\t\t\treturns: a AnimationClip containing position and quaternion tracks\n\t\t*/\n\t\tfunction toTHREEAnimation( bones ) {\n\n\t\t\tconst tracks = [];\n\n\t\t\t// create a position and quaternion animation track for each node\n\n\t\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tconst bone = bones[ i ];\n\n\t\t\t\tif ( bone.type === 'ENDSITE' )\n\t\t\t\t\tcontinue;\n\n\t\t\t\t// track data\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst positions = [];\n\t\t\t\tconst rotations = [];\n\n\t\t\t\tfor ( let j = 0; j < bone.frames.length; j ++ ) {\n\n\t\t\t\t\tconst frame = bone.frames[ j ];\n\n\t\t\t\t\ttimes.push( frame.time );\n\n\t\t\t\t\t// the animation system animates the position property,\n\t\t\t\t\t// so we have to add the joint offset to all values\n\n\t\t\t\t\tpositions.push( frame.position.x + bone.offset.x );\n\t\t\t\t\tpositions.push( frame.position.y + bone.offset.y );\n\t\t\t\t\tpositions.push( frame.position.z + bone.offset.z );\n\n\t\t\t\t\trotations.push( frame.rotation.x );\n\t\t\t\t\trotations.push( frame.rotation.y );\n\t\t\t\t\trotations.push( frame.rotation.z );\n\t\t\t\t\trotations.push( frame.rotation.w );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBonePositions ) {\n\n\t\t\t\t\ttracks.push( new VectorKeyframeTrack( bone.name + '.position', times, positions ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.animateBoneRotations ) {\n\n\t\t\t\t\ttracks.push( new QuaternionKeyframeTrack( bone.name + '.quaternion', times, rotations ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( 'animation', - 1, tracks );\n\n\t\t}\n\n\t\t/*\n\t\t\treturns the next non-empty line in lines\n\t\t*/\n\t\tfunction nextLine( lines ) {\n\n\t\t\tlet line;\n\t\t\t// skip empty lines\n\t\t\twhile ( ( line = lines.shift().trim() ).length === 0 ) { }\n\n\t\t\treturn line;\n\n\t\t}\n\n\t\tconst scope = this;\n\n\t\tconst lines = text.split( /[\\r\\n]+/g );\n\n\t\tconst bones = readBvh( lines );\n\n\t\tconst threeBones = [];\n\t\ttoTHREEBone( bones[ 0 ], threeBones );\n\n\t\tconst threeClip = toTHREEAnimation( bones );\n\n\t\treturn {\n\t\t\tskeleton: new Skeleton( threeBones ),\n\t\t\tclip: threeClip\n\t\t};\n\n\t}\n\n}\n\nexport { BVHLoader };\n","import {\n\tBufferGeometry,\n\tColor,\n\tData3DTexture,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tLoader,\n\tLinearFilter,\n\tMesh,\n\tMeshStandardMaterial,\n\tNearestFilter,\n\tRedFormat,\n\tSRGBColorSpace\n} from 'three';\n\nclass VOXLoader extends Loader {\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.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst data = new DataView( buffer );\n\n\t\tconst id = data.getUint32( 0, true );\n\t\tconst version = data.getUint32( 4, true );\n\n\t\tif ( id !== 542658390 || version !== 150 ) {\n\n\t\t\tconsole.error( 'Not a valid VOX file' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst DEFAULT_PALETTE = [\n\t\t\t0x00000000, 0xffffffff, 0xffccffff, 0xff99ffff, 0xff66ffff, 0xff33ffff, 0xff00ffff, 0xffffccff,\n\t\t\t0xffccccff, 0xff99ccff, 0xff66ccff, 0xff33ccff, 0xff00ccff, 0xffff99ff, 0xffcc99ff, 0xff9999ff,\n\t\t\t0xff6699ff, 0xff3399ff, 0xff0099ff, 0xffff66ff, 0xffcc66ff, 0xff9966ff, 0xff6666ff, 0xff3366ff,\n\t\t\t0xff0066ff, 0xffff33ff, 0xffcc33ff, 0xff9933ff, 0xff6633ff, 0xff3333ff, 0xff0033ff, 0xffff00ff,\n\t\t\t0xffcc00ff, 0xff9900ff, 0xff6600ff, 0xff3300ff, 0xff0000ff, 0xffffffcc, 0xffccffcc, 0xff99ffcc,\n\t\t\t0xff66ffcc, 0xff33ffcc, 0xff00ffcc, 0xffffcccc, 0xffcccccc, 0xff99cccc, 0xff66cccc, 0xff33cccc,\n\t\t\t0xff00cccc, 0xffff99cc, 0xffcc99cc, 0xff9999cc, 0xff6699cc, 0xff3399cc, 0xff0099cc, 0xffff66cc,\n\t\t\t0xffcc66cc, 0xff9966cc, 0xff6666cc, 0xff3366cc, 0xff0066cc, 0xffff33cc, 0xffcc33cc, 0xff9933cc,\n\t\t\t0xff6633cc, 0xff3333cc, 0xff0033cc, 0xffff00cc, 0xffcc00cc, 0xff9900cc, 0xff6600cc, 0xff3300cc,\n\t\t\t0xff0000cc, 0xffffff99, 0xffccff99, 0xff99ff99, 0xff66ff99, 0xff33ff99, 0xff00ff99, 0xffffcc99,\n\t\t\t0xffcccc99, 0xff99cc99, 0xff66cc99, 0xff33cc99, 0xff00cc99, 0xffff9999, 0xffcc9999, 0xff999999,\n\t\t\t0xff669999, 0xff339999, 0xff009999, 0xffff6699, 0xffcc6699, 0xff996699, 0xff666699, 0xff336699,\n\t\t\t0xff006699, 0xffff3399, 0xffcc3399, 0xff993399, 0xff663399, 0xff333399, 0xff003399, 0xffff0099,\n\t\t\t0xffcc0099, 0xff990099, 0xff660099, 0xff330099, 0xff000099, 0xffffff66, 0xffccff66, 0xff99ff66,\n\t\t\t0xff66ff66, 0xff33ff66, 0xff00ff66, 0xffffcc66, 0xffcccc66, 0xff99cc66, 0xff66cc66, 0xff33cc66,\n\t\t\t0xff00cc66, 0xffff9966, 0xffcc9966, 0xff999966, 0xff669966, 0xff339966, 0xff009966, 0xffff6666,\n\t\t\t0xffcc6666, 0xff996666, 0xff666666, 0xff336666, 0xff006666, 0xffff3366, 0xffcc3366, 0xff993366,\n\t\t\t0xff663366, 0xff333366, 0xff003366, 0xffff0066, 0xffcc0066, 0xff990066, 0xff660066, 0xff330066,\n\t\t\t0xff000066, 0xffffff33, 0xffccff33, 0xff99ff33, 0xff66ff33, 0xff33ff33, 0xff00ff33, 0xffffcc33,\n\t\t\t0xffcccc33, 0xff99cc33, 0xff66cc33, 0xff33cc33, 0xff00cc33, 0xffff9933, 0xffcc9933, 0xff999933,\n\t\t\t0xff669933, 0xff339933, 0xff009933, 0xffff6633, 0xffcc6633, 0xff996633, 0xff666633, 0xff336633,\n\t\t\t0xff006633, 0xffff3333, 0xffcc3333, 0xff993333, 0xff663333, 0xff333333, 0xff003333, 0xffff0033,\n\t\t\t0xffcc0033, 0xff990033, 0xff660033, 0xff330033, 0xff000033, 0xffffff00, 0xffccff00, 0xff99ff00,\n\t\t\t0xff66ff00, 0xff33ff00, 0xff00ff00, 0xffffcc00, 0xffcccc00, 0xff99cc00, 0xff66cc00, 0xff33cc00,\n\t\t\t0xff00cc00, 0xffff9900, 0xffcc9900, 0xff999900, 0xff669900, 0xff339900, 0xff009900, 0xffff6600,\n\t\t\t0xffcc6600, 0xff996600, 0xff666600, 0xff336600, 0xff006600, 0xffff3300, 0xffcc3300, 0xff993300,\n\t\t\t0xff663300, 0xff333300, 0xff003300, 0xffff0000, 0xffcc0000, 0xff990000, 0xff660000, 0xff330000,\n\t\t\t0xff0000ee, 0xff0000dd, 0xff0000bb, 0xff0000aa, 0xff000088, 0xff000077, 0xff000055, 0xff000044,\n\t\t\t0xff000022, 0xff000011, 0xff00ee00, 0xff00dd00, 0xff00bb00, 0xff00aa00, 0xff008800, 0xff007700,\n\t\t\t0xff005500, 0xff004400, 0xff002200, 0xff001100, 0xffee0000, 0xffdd0000, 0xffbb0000, 0xffaa0000,\n\t\t\t0xff880000, 0xff770000, 0xff550000, 0xff440000, 0xff220000, 0xff110000, 0xffeeeeee, 0xffdddddd,\n\t\t\t0xffbbbbbb, 0xffaaaaaa, 0xff888888, 0xff777777, 0xff555555, 0xff444444, 0xff222222, 0xff111111\n\t\t];\n\n\t\tlet i = 8;\n\n\t\tlet chunk;\n\t\tconst chunks = [];\n\n\t\twhile ( i < data.byteLength ) {\n\n\t\t\tlet id = '';\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\tid += String.fromCharCode( data.getUint8( i ++ ) );\n\n\t\t\t}\n\n\t\t\tconst chunkSize = data.getUint32( i, true ); i += 4;\n\t\t\ti += 4; // childChunks\n\n\t\t\tif ( id === 'SIZE' ) {\n\n\t\t\t\tconst x = data.getUint32( i, true ); i += 4;\n\t\t\t\tconst y = data.getUint32( i, true ); i += 4;\n\t\t\t\tconst z = data.getUint32( i, true ); i += 4;\n\n\t\t\t\tchunk = {\n\t\t\t\t\tpalette: DEFAULT_PALETTE,\n\t\t\t\t\tsize: { x: x, y: y, z: z },\n\t\t\t\t};\n\n\t\t\t\tchunks.push( chunk );\n\n\t\t\t\ti += chunkSize - ( 3 * 4 );\n\n\t\t\t} else if ( id === 'XYZI' ) {\n\n\t\t\t\tconst numVoxels = data.getUint32( i, true ); i += 4;\n\t\t\t\tchunk.data = new Uint8Array( buffer, i, numVoxels * 4 );\n\n\t\t\t\ti += numVoxels * 4;\n\n\t\t\t} else if ( id === 'RGBA' ) {\n\n\t\t\t\tconst palette = [ 0 ];\n\n\t\t\t\tfor ( let j = 0; j < 256; j ++ ) {\n\n\t\t\t\t\tpalette[ j + 1 ] = data.getUint32( i, true ); i += 4;\n\n\t\t\t\t}\n\n\t\t\t\tchunk.palette = palette;\n\n\t\t\t} else {\n\n\t\t\t\t// console.log( id, chunkSize, childChunks );\n\n\t\t\t\ti += chunkSize;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn chunks;\n\n\t}\n\n}\n\nclass VOXMesh extends Mesh {\n\n\tconstructor( chunk ) {\n\n\t\tconst data = chunk.data;\n\t\tconst size = chunk.size;\n\t\tconst palette = chunk.palette;\n\n\t\t//\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst nx = [ 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1 ];\n\t\tconst px = [ 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0 ];\n\t\tconst py = [ 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1 ];\n\t\tconst ny = [ 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0 ];\n\t\tconst nz = [ 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0 ];\n\t\tconst pz = [ 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1 ];\n\n\t\tconst _color = new Color();\n\n\t\tfunction add( tile, x, y, z, r, g, b ) {\n\n\t\t\tx -= size.x / 2;\n\t\t\ty -= size.z / 2;\n\t\t\tz += size.y / 2;\n\n\t\t\tfor ( let i = 0; i < 18; i += 3 ) {\n\n\t\t\t\t_color.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\tvertices.push( tile[ i + 0 ] + x, tile[ i + 1 ] + y, tile[ i + 2 ] + 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\t// Store data in a volume for sampling\n\n\t\tconst offsety = size.x;\n\t\tconst offsetz = size.x * size.y;\n\n\t\tconst array = new Uint8Array( size.x * size.y * size.z );\n\n\t\tfor ( let j = 0; j < data.length; j += 4 ) {\n\n\t\t\tconst x = data[ j + 0 ];\n\t\t\tconst y = data[ j + 1 ];\n\t\t\tconst z = data[ j + 2 ];\n\n\t\t\tconst index = x + ( y * offsety ) + ( z * offsetz );\n\n\t\t\tarray[ index ] = 255;\n\n\t\t}\n\n\t\t// Construct geometry\n\n\t\tlet hasColors = false;\n\n\t\tfor ( let j = 0; j < data.length; j += 4 ) {\n\n\t\t\tconst x = data[ j + 0 ];\n\t\t\tconst y = data[ j + 1 ];\n\t\t\tconst z = data[ j + 2 ];\n\t\t\tconst c = data[ j + 3 ];\n\n\t\t\tconst hex = palette[ c ];\n\t\t\tconst r = ( hex >> 0 & 0xff ) / 0xff;\n\t\t\tconst g = ( hex >> 8 & 0xff ) / 0xff;\n\t\t\tconst b = ( hex >> 16 & 0xff ) / 0xff;\n\n\t\t\tif ( r > 0 || g > 0 || b > 0 ) hasColors = true;\n\n\t\t\tconst index = x + ( y * offsety ) + ( z * offsetz );\n\n\t\t\tif ( array[ index + 1 ] === 0 || x === size.x - 1 ) add( px, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - 1 ] === 0 || x === 0 ) add( nx, x, z, - y, r, g, b );\n\t\t\tif ( array[ index + offsety ] === 0 || y === size.y - 1 ) add( ny, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - offsety ] === 0 || y === 0 ) add( py, x, z, - y, r, g, b );\n\t\t\tif ( array[ index + offsetz ] === 0 || z === size.z - 1 ) add( pz, x, z, - y, r, g, b );\n\t\t\tif ( array[ index - offsetz ] === 0 || z === 0 ) add( nz, x, z, - y, r, g, b );\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.computeVertexNormals();\n\n\t\tconst material = new MeshStandardMaterial();\n\n\t\tif ( hasColors ) {\n\n\t\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\tsuper( geometry, material );\n\n\t}\n\n}\n\nclass VOXData3DTexture extends Data3DTexture {\n\n\tconstructor( chunk ) {\n\n\t\tconst data = chunk.data;\n\t\tconst size = chunk.size;\n\n\t\tconst offsety = size.x;\n\t\tconst offsetz = size.x * size.y;\n\n\t\tconst array = new Uint8Array( size.x * size.y * size.z );\n\n\t\tfor ( let j = 0; j < data.length; j += 4 ) {\n\n\t\t\tconst x = data[ j + 0 ];\n\t\t\tconst y = data[ j + 1 ];\n\t\t\tconst z = data[ j + 2 ];\n\n\t\t\tconst index = x + ( y * offsety ) + ( z * offsetz );\n\n\t\t\tarray[ index ] = 255;\n\n\t\t}\n\n\t\tsuper( array, size.x, size.y, size.z );\n\n\t\tthis.format = RedFormat;\n\t\tthis.minFilter = NearestFilter;\n\t\tthis.magFilter = LinearFilter;\n\t\tthis.unpackAlignment = 1;\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nexport { VOXLoader, VOXMesh, VOXData3DTexture };\n","/**\n * MDD is a special format that stores a position for every vertex in a model for every frame in an animation.\n * Similar to BVH, it can be used to transfer animation data between different 3D applications or engines.\n *\n * MDD stores its data in binary format (big endian) in the following way:\n *\n * number of frames (a single uint32)\n * number of vertices (a single uint32)\n * time values for each frame (sequence of float32)\n * vertex data for each frame (sequence of float32)\n */\n\nimport {\n\tAnimationClip,\n\tBufferAttribute,\n\tFileLoader,\n\tLoader,\n\tNumberKeyframeTrack\n} from 'three';\n\nclass MDDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\tonLoad( scope.parse( data ) );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\tconst view = new DataView( data );\n\n\t\tconst totalFrames = view.getUint32( 0 );\n\t\tconst totalPoints = view.getUint32( 4 );\n\n\t\tlet offset = 8;\n\n\t\t// animation clip\n\n\t\tconst times = new Float32Array( totalFrames );\n\t\tconst values = new Float32Array( totalFrames * totalFrames ).fill( 0 );\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\ttimes[ i ] = view.getFloat32( offset ); offset += 4;\n\t\t\tvalues[ ( totalFrames * i ) + i ] = 1;\n\n\t\t}\n\n\t\tconst track = new NumberKeyframeTrack( '.morphTargetInfluences', times, values );\n\t\tconst clip = new AnimationClip( 'default', times[ times.length - 1 ], [ track ] );\n\n\t\t// morph targets\n\n\t\tconst morphTargets = [];\n\n\t\tfor ( let i = 0; i < totalFrames; i ++ ) {\n\n\t\t\tconst morphTarget = new Float32Array( totalPoints * 3 );\n\n\t\t\tfor ( let j = 0; j < totalPoints; j ++ ) {\n\n\t\t\t\tconst stride = ( j * 3 );\n\n\t\t\t\tmorphTarget[ stride + 0 ] = view.getFloat32( offset ); offset += 4; // x\n\t\t\t\tmorphTarget[ stride + 1 ] = view.getFloat32( offset ); offset += 4; // y\n\t\t\t\tmorphTarget[ stride + 2 ] = view.getFloat32( offset ); offset += 4; // z\n\n\t\t\t}\n\n\t\t\tconst attribute = new BufferAttribute( morphTarget, 3 );\n\t\t\tattribute.name = 'morph_' + i;\n\n\t\t\tmorphTargets.push( attribute );\n\n\t\t}\n\n\t\treturn {\n\t\t\tmorphTargets: morphTargets,\n\t\t\tclip: clip\n\t\t};\n\n\t}\n\n}\n\nexport { MDDLoader };\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial\n} from 'three';\n\nclass PCDLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.littleEndian = true;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( data ) {\n\n\t\t\tconst PCDheader = {};\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.size = /SIZE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.type = /TYPE (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.count = /COUNT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );\n\t\t\tPCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\tconst textData = new TextDecoder().decode( data );\n\n\t\t// parse header (always ascii format)\n\n\t\tconst PCDheader = parseHeader( textData );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( rgb >> 16 ) & 0x0000ff;\n\t\t\t\t\tconst g = ( rgb >> 8 ) & 0x0000ff;\n\t\t\t\t\tconst b = ( rgb >> 0 ) & 0x0000ff;\n\t\t\t\t\tcolor.push( r / 255, g / 255, b / 255 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.x, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.y, this.littleEndian ) );\n\t\t\t\t\tposition.push( dataview.getFloat32( row + offset.z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 2 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 1 ) / 255.0 );\n\t\t\t\t\tcolor.push( dataview.getUint8( row + offset.rgb + 0 ) / 255.0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_x, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_y, this.littleEndian ) );\n\t\t\t\t\tnormal.push( dataview.getFloat32( row + offset.normal_z, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tDoubleSide,\n\tFileLoader,\n\tGroup,\n\tLoader,\n\tMesh,\n\tMeshBasicMaterial,\n\tRawShaderMaterial,\n\tTextureLoader,\n\tQuaternion,\n\tVector3\n} from 'three';\nimport * as fflate from '../libs/fflate.module.js';\n\nclass TiltLoader 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.setResponseType( 'arraybuffer' );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( buffer ) {\n\n\t\tconst group = new Group();\n\t\t// https://docs.google.com/document/d/11ZsHozYn9FnWG7y3s3WAyKIACfbfwb4PbaS8cZ_xjvo/edit#\n\n\t\tconst zip = fflate.unzipSync( new Uint8Array( buffer.slice( 16 ) ) );\n\n\t\t/*\n\t\tconst thumbnail = zip[ 'thumbnail.png' ].buffer;\n\t\tconst img = document.createElement( 'img' );\n\t\timg.src = URL.createObjectURL( new Blob( [ thumbnail ] ) );\n\t\tdocument.body.appendChild( img );\n\t\t*/\n\n\t\tconst metadata = JSON.parse( fflate.strFromU8( zip[ 'metadata.json' ] ) );\n\n\t\t/*\n\t\tconst blob = new Blob( [ zip[ 'data.sketch' ].buffer ], { type: 'application/octet-stream' } );\n\t\twindow.open( URL.createObjectURL( blob ) );\n\t\t*/\n\n\t\tconst data = new DataView( zip[ 'data.sketch' ].buffer );\n\n\t\tconst num_strokes = data.getInt32( 16, true );\n\n\t\tconst brushes = {};\n\n\t\tlet offset = 20;\n\n\t\tfor ( let i = 0; i < num_strokes; i ++ ) {\n\n\t\t\tconst brush_index = data.getInt32( offset, true );\n\n\t\t\tconst brush_color = [\n\t\t\t\tdata.getFloat32( offset + 4, true ),\n\t\t\t\tdata.getFloat32( offset + 8, true ),\n\t\t\t\tdata.getFloat32( offset + 12, true ),\n\t\t\t\tdata.getFloat32( offset + 16, true )\n\t\t\t];\n\t\t\tconst brush_size = data.getFloat32( offset + 20, true );\n\t\t\tconst stroke_mask = data.getUint32( offset + 24, true );\n\t\t\tconst controlpoint_mask = data.getUint32( offset + 28, true );\n\n\t\t\tlet offset_stroke_mask = 0;\n\t\t\tlet offset_controlpoint_mask = 0;\n\n\t\t\tfor ( let j = 0; j < 4; j ++ ) {\n\n\t\t\t\t// TOFIX: I don't understand these masks yet\n\n\t\t\t\tconst byte = 1 << j;\n\t\t\t\tif ( ( stroke_mask & byte ) > 0 ) offset_stroke_mask += 4;\n\t\t\t\tif ( ( controlpoint_mask & byte ) > 0 ) offset_controlpoint_mask += 4;\n\n\t\t\t}\n\n\t\t\t// console.log( { brush_index, brush_color, brush_size, stroke_mask, controlpoint_mask } );\n\t\t\t// console.log( offset_stroke_mask, offset_controlpoint_mask );\n\n\t\t\toffset = offset + 28 + offset_stroke_mask + 4; // TOFIX: This is wrong\n\n\t\t\tconst num_control_points = data.getInt32( offset, true );\n\n\t\t\t// console.log( { num_control_points } );\n\n\t\t\tconst positions = new Float32Array( num_control_points * 3 );\n\t\t\tconst quaternions = new Float32Array( num_control_points * 4 );\n\n\t\t\toffset = offset + 4;\n\n\t\t\tfor ( let j = 0, k = 0; j < positions.length; j += 3, k += 4 ) {\n\n\t\t\t\tpositions[ j + 0 ] = data.getFloat32( offset + 0, true );\n\t\t\t\tpositions[ j + 1 ] = data.getFloat32( offset + 4, true );\n\t\t\t\tpositions[ j + 2 ] = data.getFloat32( offset + 8, true );\n\n\t\t\t\tquaternions[ k + 0 ] = data.getFloat32( offset + 12, true );\n\t\t\t\tquaternions[ k + 1 ] = data.getFloat32( offset + 16, true );\n\t\t\t\tquaternions[ k + 2 ] = data.getFloat32( offset + 20, true );\n\t\t\t\tquaternions[ k + 3 ] = data.getFloat32( offset + 24, true );\n\n\t\t\t\toffset = offset + 28 + offset_controlpoint_mask; // TOFIX: This is wrong\n\n\t\t\t}\n\n\t\t\tif ( brush_index in brushes === false ) {\n\n\t\t\t\tbrushes[ brush_index ] = [];\n\n\t\t\t}\n\n\t\t\tbrushes[ brush_index ].push( [ positions, quaternions, brush_size, brush_color ] );\n\n\t\t}\n\n\t\tfor ( const brush_index in brushes ) {\n\n\t\t\tconst geometry = new StrokeGeometry( brushes[ brush_index ] );\n\t\t\tconst material = getMaterial( metadata.BrushIndex[ brush_index ] );\n\n\t\t\tgroup.add( new Mesh( geometry, material ) );\n\n\t\t}\n\n\t\treturn group;\n\n\t}\n\n}\n\nclass StrokeGeometry extends BufferGeometry {\n\n\tconstructor( strokes ) {\n\n\t\tsuper();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\t\tconst uvs = [];\n\n\t\tconst position = new Vector3();\n\t\tconst prevPosition = new Vector3();\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst prevQuaternion = new Quaternion();\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 color = new Color();\n\n\t\t// size = size / 2;\n\n\t\tfor ( const k in strokes ) {\n\n\t\t\tconst stroke = strokes[ k ];\n\t\t\tconst positions = stroke[ 0 ];\n\t\t\tconst quaternions = stroke[ 1 ];\n\t\t\tconst size = stroke[ 2 ];\n\t\t\tconst rgba = stroke[ 3 ];\n\t\t\tconst alpha = stroke[ 3 ][ 3 ];\n\n\t\t\tcolor.fromArray( rgba ).convertSRGBToLinear();\n\n\t\t\tprevPosition.fromArray( positions, 0 );\n\t\t\tprevQuaternion.fromArray( quaternions, 0 );\n\n\t\t\tfor ( let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4 ) {\n\n\t\t\t\tposition.fromArray( positions, i );\n\t\t\t\tquaternion.fromArray( quaternions, j );\n\n\t\t\t\tvector1.set( - size, 0, 0 );\n\t\t\t\tvector1.applyQuaternion( quaternion );\n\t\t\t\tvector1.add( position );\n\n\t\t\t\tvector2.set( size, 0, 0 );\n\t\t\t\tvector2.applyQuaternion( quaternion );\n\t\t\t\tvector2.add( position );\n\n\t\t\t\tvector3.set( size, 0, 0 );\n\t\t\t\tvector3.applyQuaternion( prevQuaternion );\n\t\t\t\tvector3.add( prevPosition );\n\n\t\t\t\tvector4.set( - size, 0, 0 );\n\t\t\t\tvector4.applyQuaternion( prevQuaternion );\n\t\t\t\tvector4.add( prevPosition );\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\tprevPosition.copy( position );\n\t\t\t\tprevQuaternion.copy( quaternion );\n\n\t\t\t\tcolors.push( ...color, alpha );\n\t\t\t\tcolors.push( ...color, alpha );\n\t\t\t\tcolors.push( ...color, alpha );\n\n\t\t\t\tcolors.push( ...color, alpha );\n\t\t\t\tcolors.push( ...color, alpha );\n\t\t\t\tcolors.push( ...color, alpha );\n\n\t\t\t\tconst p1 = i / l;\n\t\t\t\tconst p2 = ( i - 3 ) / l;\n\n\t\t\t\tuvs.push( p1, 0 );\n\t\t\t\tuvs.push( p1, 1 );\n\t\t\t\tuvs.push( p2, 0 );\n\n\t\t\t\tuvs.push( p1, 1 );\n\t\t\t\tuvs.push( p2, 1 );\n\t\t\t\tuvs.push( p2, 0 );\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 ), 4 ) );\n\t\tthis.setAttribute( 'uv', new BufferAttribute( new Float32Array( uvs ), 2 ) );\n\n\t}\n\n}\n\nconst BRUSH_LIST_ARRAY = {\n\t'89d104cd-d012-426b-b5b3-bbaee63ac43c': 'Bubbles',\n\t'700f3aa8-9a7c-2384-8b8a-ea028905dd8c': 'CelVinyl',\n\t'0f0ff7b2-a677-45eb-a7d6-0cd7206f4816': 'ChromaticWave',\n\t'1161af82-50cf-47db-9706-0c3576d43c43': 'CoarseBristles',\n\t'79168f10-6961-464a-8be1-57ed364c5600': 'CoarseBristlesSingleSided',\n\t'1caa6d7d-f015-3f54-3a4b-8b5354d39f81': 'Comet',\n\t'c8313697-2563-47fc-832e-290f4c04b901': 'DiamondHull',\n\t'4391aaaa-df73-4396-9e33-31e4e4930b27': 'Disco',\n\t'd1d991f2-e7a0-4cf1-b328-f57e915e6260': 'DotMarker',\n\t'6a1cf9f9-032c-45ec-9b1d-a6680bee30f7': 'Dots',\n\t'0d3889f3-3ede-470c-8af4-f44813306126': 'DoubleTaperedFlat',\n\t'0d3889f3-3ede-470c-8af4-de4813306126': 'DoubleTaperedMarker',\n\t'd0262945-853c-4481-9cbd-88586bed93cb': 'DuctTape',\n\t'3ca16e2f-bdcd-4da2-8631-dcef342f40f1': 'DuctTapeSingleSided',\n\t'f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51': 'Electricity',\n\t'02ffb866-7fb2-4d15-b761-1012cefb1360': 'Embers',\n\t'cb92b597-94ca-4255-b017-0e3f42f12f9e': 'Fire',\n\t'2d35bcf0-e4d8-452c-97b1-3311be063130': 'Flat',\n\t'55303bc4-c749-4a72-98d9-d23e68e76e18': 'FlatDeprecated',\n\t'280c0a7a-aad8-416c-a7d2-df63d129ca70': 'FlatSingleSided',\n\t'cf019139-d41c-4eb0-a1d0-5cf54b0a42f3': 'Highlighter',\n\t'6a1cf9f9-032c-45ec-9b6e-a6680bee32e9': 'HyperGrid',\n\t'dce872c2-7b49-4684-b59b-c45387949c5c': 'Hypercolor',\n\t'e8ef32b1-baa8-460a-9c2c-9cf8506794f5': 'HypercolorSingleSided',\n\t'2f212815-f4d3-c1a4-681a-feeaf9c6dc37': 'Icing',\n\t'f5c336cf-5108-4b40-ade9-c687504385ab': 'Ink',\n\t'c0012095-3ffd-4040-8ee1-fc180d346eaa': 'InkSingleSided',\n\t'4a76a27a-44d8-4bfe-9a8c-713749a499b0': 'Leaves',\n\t'ea19de07-d0c0-4484-9198-18489a3c1487': 'LeavesSingleSided',\n\t'2241cd32-8ba2-48a5-9ee7-2caef7e9ed62': 'Light',\n\t'4391aaaa-df81-4396-9e33-31e4e4930b27': 'LightWire',\n\t'd381e0f5-3def-4a0d-8853-31e9200bcbda': 'Lofted',\n\t'429ed64a-4e97-4466-84d3-145a861ef684': 'Marker',\n\t'79348357-432d-4746-8e29-0e25c112e3aa': 'MatteHull',\n\t'b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6': 'NeonPulse',\n\t'f72ec0e7-a844-4e38-82e3-140c44772699': 'OilPaint',\n\t'c515dad7-4393-4681-81ad-162ef052241b': 'OilPaintSingleSided',\n\t'f1114e2e-eb8d-4fde-915a-6e653b54e9f5': 'Paper',\n\t'759f1ebd-20cd-4720-8d41-234e0da63716': 'PaperSingleSided',\n\t'e0abbc80-0f80-e854-4970-8924a0863dcc': 'Petal',\n\t'c33714d1-b2f9-412e-bd50-1884c9d46336': 'Plasma',\n\t'ad1ad437-76e2-450d-a23a-e17f8310b960': 'Rainbow',\n\t'faaa4d44-fcfb-4177-96be-753ac0421ba3': 'ShinyHull',\n\t'70d79cca-b159-4f35-990c-f02193947fe8': 'Smoke',\n\t'd902ed8b-d0d1-476c-a8de-878a79e3a34c': 'Snow',\n\t'accb32f5-4509-454f-93f8-1df3fd31df1b': 'SoftHighlighter',\n\t'cf7f0059-7aeb-53a4-2b67-c83d863a9ffa': 'Spikes',\n\t'8dc4a70c-d558-4efd-a5ed-d4e860f40dc3': 'Splatter',\n\t'7a1c8107-50c5-4b70-9a39-421576d6617e': 'SplatterSingleSided',\n\t'0eb4db27-3f82-408d-b5a1-19ebd7d5b711': 'Stars',\n\t'44bb800a-fbc3-4592-8426-94ecb05ddec3': 'Streamers',\n\t'0077f88c-d93a-42f3-b59b-b31c50cdb414': 'Taffy',\n\t'b468c1fb-f254-41ed-8ec9-57030bc5660c': 'TaperedFlat',\n\t'c8ccb53d-ae13-45ef-8afb-b730d81394eb': 'TaperedFlatSingleSided',\n\t'd90c6ad8-af0f-4b54-b422-e0f92abe1b3c': 'TaperedMarker',\n\t'1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0': 'TaperedMarker_Flat',\n\t'75b32cf0-fdd6-4d89-a64b-e2a00b247b0f': 'ThickPaint',\n\t'fdf0326a-c0d1-4fed-b101-9db0ff6d071f': 'ThickPaintSingleSided',\n\t'4391385a-df73-4396-9e33-31e4e4930b27': 'Toon',\n\t'a8fea537-da7c-4d4b-817f-24f074725d6d': 'UnlitHull',\n\t'd229d335-c334-495a-a801-660ac8a87360': 'VelvetInk',\n\t'10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab': 'Waveform',\n\t'b67c0e81-ce6d-40a8-aeb0-ef036b081aa3': 'WetPaint',\n\t'dea67637-cd1a-27e4-c9b1-52f4bbcb84e5': 'WetPaintSingleSided',\n\t'5347acf0-a8e2-47b6-8346-30c70719d763': 'WigglyGraphite',\n\t'e814fef1-97fd-7194-4a2f-50c2bb918be2': 'WigglyGraphiteSingleSided',\n\t'4391385a-cf83-4396-9e33-31e4e4930b27': 'Wire'\n};\n\nconst common = {\n\n\t'colors': {\n\n\t\t'BloomColor': `\n\t\t\tvec3 BloomColor(vec3 color, float gain) {\n\t\t\t\t// Guarantee that there's at least a little bit of all 3 channels.\n\t\t\t\t// This makes fully-saturated strokes (which only have 2 non-zero\n\t\t\t\t// color channels) eventually clip to white rather than to a secondary.\n\t\t\t\tfloat cmin = length(color.rgb) * .05;\n\t\t\t\tcolor.rgb = max(color.rgb, vec3(cmin, cmin, cmin));\n\t\t\t\t// If we try to remove this pow() from .a, it brightens up\n\t\t\t\t// pressure-sensitive strokes; looks better as-is.\n\t\t\t\tcolor = pow(color, vec3(2.2));\n\t\t\t\tcolor.rgb *= 2. * exp(gain * 10.);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n\n\t\t'LinearToSrgb': `\n\t\t\tvec3 LinearToSrgb(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 linearColor = color.rgb;\n\t\t\t\tvec3 S1 = sqrt(linearColor);\n\t\t\t\tvec3 S2 = sqrt(S1);\n\t\t\t\tvec3 S3 = sqrt(S2);\n\t\t\t\tcolor.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor;\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n\n\t\t'hsv': `\n\t\t\t// uniform sampler2D lookupTex;\n\t\t\tvec4 lookup(vec4 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 lookup(vec3 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 hsv2rgb( vec3 hsv ) {\n\t\t\t\tvec3 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 );\n\t\t\t\treturn hsv.z * mix( vec3(1.0), rgb, hsv.y);\n\t\t\t}\n\n\t\t\tvec3 rgb2hsv( vec3 rgb ) {\n\t\t\t\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\t\t\t\tvec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n\t\t\t\tvec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n\t\t\t\tfloat d = q.x - min(q.w, q.y);\n\t\t\t\tfloat e = 1.0e-10;\n\n\t\t\t\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n\t\t\t}\n\t\t`,\n\n\t\t'SrgbToLinear': `\n\t\t\tvec3 SrgbToLinear(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 sRGB = color.rgb;\n\t\t\t\tcolor.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`\n\n\t}\n\n};\n\nlet shaders = null;\n\nfunction getShaders() {\n\n\tif ( shaders === null ) {\n\n\t\tconst loader = new TextureLoader().setPath( './textures/tiltbrush/' );\n\n\t\tshaders = {\n\t\t\t'Light': {\n\t\t\t\tuniforms: {\n\t\t\t\t\tmainTex: { value: loader.load( 'Light.webp' ) },\n\t\t\t\t\talphaTest: { value: 0.067 },\n\t\t\t\t\temission_gain: { value: 0.45 },\n\t\t\t\t\talpha: { value: 1 },\n\t\t\t\t},\n\t\t\t\tvertexShader: `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tprecision highp int;\n\n\t\t\t\t\tattribute vec2 uv;\n\t\t\t\t\tattribute vec4 color;\n\t\t\t\t\tattribute vec3 position;\n\n\t\t\t\t\tuniform mat4 modelMatrix;\n\t\t\t\t\tuniform mat4 modelViewMatrix;\n\t\t\t\t\tuniform mat4 projectionMatrix;\n\t\t\t\t\tuniform mat4 viewMatrix;\n\t\t\t\t\tuniform mat3 normalMatrix;\n\t\t\t\t\tuniform vec3 cameraPosition;\n\n\t\t\t\t\tvarying vec2 vUv;\n\t\t\t\t\tvarying vec3 vColor;\n\n\t\t\t\t\t${ common.colors.LinearToSrgb }\n\t\t\t\t\t${ common.colors.hsv }\n\n\t\t\t\t\tvoid main() {\n\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t\tvColor = lookup(color.rgb);\n\n\t\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t\t}\n\t\t\t\t`,\n\t\t\t\tfragmentShader: `\n\t\t\t\t\tprecision highp float;\n\t\t\t\t\tprecision highp int;\n\n\t\t\t\t\tuniform float emission_gain;\n\n\t\t\t\t\tuniform sampler2D mainTex;\n\t\t\t\t\tuniform float alphaTest;\n\n\t\t\t\t\tvarying vec2 vUv;\n\t\t\t\t\tvarying vec3 vColor;\n\n\t\t\t\t\t${ common.colors.BloomColor }\n\t\t\t\t\t${ common.colors.SrgbToLinear }\n\n\t\t\t\t\tvoid main(){\n\t\t\t\t\t\tvec4 col = texture2D(mainTex, vUv);\n\t\t\t\t\t\tvec3 color = vColor;\n\t\t\t\t\t\tcolor = BloomColor(color, emission_gain);\n\t\t\t\t\t\tcolor = color * col.rgb;\n\t\t\t\t\t\tcolor = color * col.a;\n\t\t\t\t\t\tcolor = SrgbToLinear(color);\n\t\t\t\t\t\tgl_FragColor = vec4(color, 1.0);\n\t\t\t\t\t}\n\t\t\t\t`,\n\t\t\t\tside: 2,\n\t\t\t\ttransparent: true,\n\t\t\t\tdepthFunc: 2,\n\t\t\t\tdepthWrite: true,\n\t\t\t\tdepthTest: false,\n\t\t\t\tblending: 5,\n\t\t\t\tblendDst: 201,\n\t\t\t\tblendDstAlpha: 201,\n\t\t\t\tblendEquation: 100,\n\t\t\t\tblendEquationAlpha: 100,\n\t\t\t\tblendSrc: 201,\n\t\t\t\tblendSrcAlpha: 201,\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\treturn shaders;\n\n}\n\nfunction getMaterial( GUID ) {\n\n\tconst name = BRUSH_LIST_ARRAY[ GUID ];\n\n\tswitch ( name ) {\n\n\t\tcase 'Light':\n\t\t\treturn new RawShaderMaterial( getShaders().Light );\n\n\t\tdefault:\n\t\t\treturn new MeshBasicMaterial( { vertexColors: true, side: DoubleSide } );\n\n\t}\n\n}\n\nexport { TiltLoader };\n","/*! chevrotain - v9.0.1 */\nvar R=(t,e)=>()=>(e||(e={exports:{}},t(e.exports,e)),e.exports);var Er=R(Pt=>{\"use strict\";Object.defineProperty(Pt,\"__esModule\",{value:!0});Pt.VERSION=void 0;Pt.VERSION=\"9.0.1\"});var k=R((exports,module)=>{\"use strict\";var __spreadArray=exports&&exports.__spreadArray||function(t,e){for(var r=0,n=e.length,i=t.length;r<n;r++,i++)t[i]=e[r];return t};Object.defineProperty(exports,\"__esModule\",{value:!0});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(t){return t&&t.length===0}exports.isEmpty=isEmpty;function keys(t){return t==null?[]:Object.keys(t)}exports.keys=keys;function values(t){for(var e=[],r=Object.keys(t),n=0;n<r.length;n++)e.push(t[r[n]]);return e}exports.values=values;function mapValues(t,e){for(var r=[],n=keys(t),i=0;i<n.length;i++){var a=n[i];r.push(e.call(null,t[a],a))}return r}exports.mapValues=mapValues;function map(t,e){for(var r=[],n=0;n<t.length;n++)r.push(e.call(null,t[n],n));return r}exports.map=map;function flatten(t){for(var e=[],r=0;r<t.length;r++){var n=t[r];Array.isArray(n)?e=e.concat(flatten(n)):e.push(n)}return e}exports.flatten=flatten;function first(t){return isEmpty(t)?void 0:t[0]}exports.first=first;function last(t){var e=t&&t.length;return e?t[e-1]:void 0}exports.last=last;function forEach(t,e){if(Array.isArray(t))for(var r=0;r<t.length;r++)e.call(null,t[r],r);else if(isObject(t))for(var n=keys(t),r=0;r<n.length;r++){var i=n[r],a=t[i];e.call(null,a,i)}else throw Error(\"non exhaustive match\")}exports.forEach=forEach;function isString(t){return typeof t==\"string\"}exports.isString=isString;function isUndefined(t){return t===void 0}exports.isUndefined=isUndefined;function isFunction(t){return t instanceof Function}exports.isFunction=isFunction;function drop(t,e){return e===void 0&&(e=1),t.slice(e,t.length)}exports.drop=drop;function dropRight(t,e){return e===void 0&&(e=1),t.slice(0,t.length-e)}exports.dropRight=dropRight;function filter(t,e){var r=[];if(Array.isArray(t))for(var n=0;n<t.length;n++){var i=t[n];e.call(null,i)&&r.push(i)}return r}exports.filter=filter;function reject(t,e){return filter(t,function(r){return!e(r)})}exports.reject=reject;function pick(t,e){for(var r=Object.keys(t),n={},i=0;i<r.length;i++){var a=r[i],o=t[a];e(o)&&(n[a]=o)}return n}exports.pick=pick;function has(t,e){return isObject(t)?t.hasOwnProperty(e):!1}exports.has=has;function contains(t,e){return find(t,function(r){return r===e})!==void 0}exports.contains=contains;function cloneArr(t){for(var e=[],r=0;r<t.length;r++)e.push(t[r]);return e}exports.cloneArr=cloneArr;function cloneObj(t){var e={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}exports.cloneObj=cloneObj;function find(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(e.call(null,n))return n}}exports.find=find;function findAll(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n];e.call(null,i)&&r.push(i)}return r}exports.findAll=findAll;function reduce(t,e,r){for(var n=Array.isArray(t),i=n?t:values(t),a=n?[]:keys(t),o=r,s=0;s<i.length;s++)o=e.call(null,o,i[s],n?s:a[s]);return o}exports.reduce=reduce;function compact(t){return reject(t,function(e){return e==null})}exports.compact=compact;function uniq(t,e){e===void 0&&(e=function(n){return n});var r=[];return reduce(t,function(n,i){var a=e(i);return contains(r,a)?n:(r.push(a),n.concat(i))},[])}exports.uniq=uniq;function partial(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=[null],i=n.concat(e);return Function.bind.apply(t,i)}exports.partial=partial;function isArray(t){return Array.isArray(t)}exports.isArray=isArray;function isRegExp(t){return t instanceof RegExp}exports.isRegExp=isRegExp;function isObject(t){return t instanceof Object}exports.isObject=isObject;function every(t,e){for(var r=0;r<t.length;r++)if(!e(t[r],r))return!1;return!0}exports.every=every;function difference(t,e){return reject(t,function(r){return contains(e,r)})}exports.difference=difference;function some(t,e){for(var r=0;r<t.length;r++)if(e(t[r]))return!0;return!1}exports.some=some;function indexOf(t,e){for(var r=0;r<t.length;r++)if(t[r]===e)return r;return-1}exports.indexOf=indexOf;function sortBy(t,e){var r=cloneArr(t);return r.sort(function(n,i){return e(n)-e(i)}),r}exports.sortBy=sortBy;function zipObject(t,e){if(t.length!==e.length)throw Error(\"can't zipObject with different number of keys and values!\");for(var r={},n=0;n<t.length;n++)r[t[n]]=e[n];return r}exports.zipObject=zipObject;function assign(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];for(var n=0;n<e.length;n++)for(var i=e[n],a=keys(i),o=0;o<a.length;o++){var s=a[o];t[s]=i[s]}return t}exports.assign=assign;function assignNoOverwrite(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];for(var n=0;n<e.length;n++)for(var i=e[n],a=keys(i),o=0;o<a.length;o++){var s=a[o];has(t,s)||(t[s]=i[s])}return t}exports.assignNoOverwrite=assignNoOverwrite;function defaults(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return assignNoOverwrite.apply(void 0,__spreadArray([{}],t))}exports.defaults=defaults;function groupBy(t,e){var r={};return forEach(t,function(n){var i=e(n),a=r[i];a?a.push(n):r[i]=[n]}),r}exports.groupBy=groupBy;function merge(t,e){for(var r=cloneObj(t),n=keys(e),i=0;i<n.length;i++){var a=n[i],o=e[a];r[a]=o}return r}exports.merge=merge;function NOOP(){}exports.NOOP=NOOP;function IDENTITY(t){return t}exports.IDENTITY=IDENTITY;function packArray(t){for(var e=[],r=0;r<t.length;r++){var n=t[r];e.push(n!==void 0?n:void 0)}return e}exports.packArray=packArray;function PRINT_ERROR(t){console&&console.error&&console.error(\"Error: \"+t)}exports.PRINT_ERROR=PRINT_ERROR;function PRINT_WARNING(t){console&&console.warn&&console.warn(\"Warning: \"+t)}exports.PRINT_WARNING=PRINT_WARNING;function isES2015MapSupported(){return typeof Map==\"function\"}exports.isES2015MapSupported=isES2015MapSupported;function peek(t){return t[t.length-1]}exports.peek=peek;function timer(t){var e=new Date().getTime(),r=t(),n=new Date().getTime(),i=n-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=R((sn,St)=>{(function(t,e){typeof define==\"function\"&&define.amd?define([],e):typeof St==\"object\"&&St.exports?St.exports=e():t.regexpToAst=e()})(typeof self!=\"undefined\"?self:sn,function(){function t(){}t.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},t.prototype.restoreState=function(u){this.idx=u.idx,this.input=u.input,this.groupIdx=u.groupIdx},t.prototype.pattern=function(u){this.idx=0,this.input=u,this.groupIdx=0,this.consumeChar(\"/\");var d=this.disjunction();this.consumeChar(\"/\");for(var A={type:\"Flags\",loc:{begin:this.idx,end:u.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case\"g\":o(A,\"global\");break;case\"i\":o(A,\"ignoreCase\");break;case\"m\":o(A,\"multiLine\");break;case\"u\":o(A,\"unicode\");break;case\"y\":o(A,\"sticky\");break}if(this.idx!==this.input.length)throw Error(\"Redundant input: \"+this.input.substring(this.idx));return{type:\"Pattern\",flags:A,value:d,loc:this.loc(0)}},t.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)}},t.prototype.alternative=function(){for(var u=[],d=this.idx;this.isTerm();)u.push(this.term());return{type:\"Alternative\",value:u,loc:this.loc(d)}},t.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},t.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 A=this.disjunction();return this.consumeChar(\")\"),{type:d,value:A,loc:this.loc(u)}}c()},t.prototype.quantifier=function(u){var d,A=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 g;this.isDigit()?(g=this.integerIncludingZero(),d={atLeast:_,atMost:g}):d={atLeast:_,atMost:Infinity},this.consumeChar(\"}\");break}if(u===!0&&d===void 0)return;s(d);break}if(!(u===!0&&d===void 0))return s(d),this.peekChar(0)===\"?\"?(this.consumeChar(\"?\"),d.greedy=!1):d.greedy=!0,d.type=\"Quantifier\",d.loc=this.loc(A),d},t.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},t.prototype.dotAll=function(){return this.consumeChar(\".\"),{type:\"Set\",complement:!0,value:[i(`\n`),i(\"\\r\"),i(\"\\u2028\"),i(\"\\u2029\")]}},t.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()}},t.prototype.decimalEscapeAtom=function(){var u=this.positiveInteger();return{type:\"GroupBackReference\",value:u}},t.prototype.characterClassEscape=function(){var u,d=!1;switch(this.popChar()){case\"d\":u=p;break;case\"D\":u=p,d=!0;break;case\"s\":u=m;break;case\"S\":u=m,d=!0;break;case\"w\":u=l;break;case\"W\":u=l,d=!0;break}return s(u),{type:\"Set\",value:u,complement:d}},t.prototype.controlEscapeAtom=function(){var u;switch(this.popChar()){case\"f\":u=i(\"\\f\");break;case\"n\":u=i(`\n`);break;case\"r\":u=i(\"\\r\");break;case\"t\":u=i(\"\t\");break;case\"v\":u=i(\"\\v\");break}return s(u),{type:\"Character\",value:u}},t.prototype.controlLetterEscapeAtom=function(){this.consumeChar(\"c\");var u=this.popChar();if(/[a-zA-Z]/.test(u)===!1)throw Error(\"Invalid \");var d=u.toUpperCase().charCodeAt(0)-64;return{type:\"Character\",value:d}},t.prototype.nulCharacterAtom=function(){return this.consumeChar(\"0\"),{type:\"Character\",value:i(\"\\0\")}},t.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar(\"x\"),this.parseHexDigits(2)},t.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar(\"u\"),this.parseHexDigits(4)},t.prototype.identityEscapeAtom=function(){var u=this.popChar();return{type:\"Character\",value:i(u)}},t.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":case\"\\\\\":case\"]\":throw Error(\"TBD\");default:var u=this.popChar();return{type:\"Character\",value:i(u)}}},t.prototype.characterClass=function(){var u=[],d=!1;for(this.consumeChar(\"[\"),this.peekChar(0)===\"^\"&&(this.consumeChar(\"^\"),d=!0);this.isClassAtom();){var A=this.classAtom(),_=A.type===\"Character\";if(_&&this.isRangeDash()){this.consumeChar(\"-\");var g=this.classAtom(),y=g.type===\"Character\";if(y){if(g.value<A.value)throw Error(\"Range out of order in character class\");u.push({from:A.value,to:g.value})}else a(A.value,u),u.push(i(\"-\")),a(g.value,u)}else a(A.value,u)}return this.consumeChar(\"]\"),{type:\"Set\",complement:d,value:u}},t.prototype.classAtom=function(){switch(this.peekChar()){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":throw Error(\"TBD\");case\"\\\\\":return this.classEscape();default:return this.classPatternCharacterAtom()}},t.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()}},t.prototype.group=function(){var u=!0;switch(this.consumeChar(\"(\"),this.peekChar(0)){case\"?\":this.consumeChar(\"?\"),this.consumeChar(\":\"),u=!1;break;default:this.groupIdx++;break}var d=this.disjunction();this.consumeChar(\")\");var A={type:\"Group\",capturing:u,value:d};return u&&(A.idx=this.groupIdx),A},t.prototype.positiveInteger=function(){var u=this.popChar();if(n.test(u)===!1)throw Error(\"Expecting a positive integer\");for(;r.test(this.peekChar(0));)u+=this.popChar();return parseInt(u,10)},t.prototype.integerIncludingZero=function(){var u=this.popChar();if(r.test(u)===!1)throw Error(\"Expecting an integer\");for(;r.test(this.peekChar(0));)u+=this.popChar();return parseInt(u,10)},t.prototype.patternCharacter=function(){var u=this.popChar();switch(u){case`\n`: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)}}},t.prototype.isRegExpFlag=function(){switch(this.peekChar(0)){case\"g\":case\"i\":case\"m\":case\"u\":case\"y\":return!0;default:return!1}},t.prototype.isRangeDash=function(){return this.peekChar()===\"-\"&&this.isClassAtom(1)},t.prototype.isDigit=function(){return r.test(this.peekChar(0))},t.prototype.isClassAtom=function(u){switch(u===void 0&&(u=0),this.peekChar(u)){case\"]\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},t.prototype.isTerm=function(){return this.isAtom()||this.isAssertion()},t.prototype.isAtom=function(){if(this.isPatternCharacter())return!0;switch(this.peekChar(0)){case\".\":case\"\\\\\":case\"[\":case\"(\":return!0;default:return!1}},t.prototype.isAssertion=function(){switch(this.peekChar(0)){case\"^\":case\"$\":return!0;case\"\\\\\":switch(this.peekChar(1)){case\"b\":case\"B\":return!0;default:return!1}case\"(\":return this.peekChar(1)===\"?\"&&(this.peekChar(2)===\"=\"||this.peekChar(2)===\"!\");default:return!1}},t.prototype.isQuantifier=function(){var u=this.saveState();try{return this.quantifier(!0)!==void 0}catch(d){return!1}finally{this.restoreState(u)}},t.prototype.isPatternCharacter=function(){switch(this.peekChar()){case\"^\":case\"$\":case\"\\\\\":case\".\":case\"*\":case\"+\":case\"?\":case\"(\":case\")\":case\"[\":case\"|\":case\"/\":case`\n`:case\"\\r\":case\"\\u2028\":case\"\\u2029\":return!1;default:return!0}},t.prototype.parseHexDigits=function(u){for(var d=\"\",A=0;A<u;A++){var _=this.popChar();if(e.test(_)===!1)throw Error(\"Expecting a HexDecimal digits\");d+=_}var g=parseInt(d,16);return{type:\"Character\",value:g}},t.prototype.peekChar=function(u){return u===void 0&&(u=0),this.input[this.idx+u]},t.prototype.popChar=function(){var u=this.peekChar(0);return this.consumeChar(),u},t.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++},t.prototype.loc=function(u){return{begin:u,end:this.idx}};var e=/[0-9a-fA-F]/,r=/[0-9]/,n=/[1-9]/;function i(u){return u.charCodeAt(0)}function a(u,d){u.length!==void 0?u.forEach(function(A){d.push(A)}):d.push(u)}function o(u,d){if(u[d]===!0)throw\"duplicate flag \"+d;u[d]=!0}function s(u){if(u===void 0)throw Error(\"Internal Error - Should never get here!\")}function c(){throw Error(\"Internal Error - Should never get here!\")}var f,p=[];for(f=i(\"0\");f<=i(\"9\");f++)p.push(f);var l=[i(\"_\")].concat(p);for(f=i(\"a\");f<=i(\"z\");f++)l.push(f);for(f=i(\"A\");f<=i(\"Z\");f++)l.push(f);var m=[i(\" \"),i(\"\\f\"),i(`\n`),i(\"\\r\"),i(\"\t\"),i(\"\\v\"),i(\"\t\"),i(\"\\xA0\"),i(\"\\u1680\"),i(\"\\u2000\"),i(\"\\u2001\"),i(\"\\u2002\"),i(\"\\u2003\"),i(\"\\u2004\"),i(\"\\u2005\"),i(\"\\u2006\"),i(\"\\u2007\"),i(\"\\u2008\"),i(\"\\u2009\"),i(\"\\u200A\"),i(\"\\u2028\"),i(\"\\u2029\"),i(\"\\u202F\"),i(\"\\u205F\"),i(\"\\u3000\"),i(\"\\uFEFF\")];function v(){}return v.prototype.visitChildren=function(u){for(var d in u){var A=u[d];u.hasOwnProperty(d)&&(A.type!==void 0?this.visit(A):Array.isArray(A)&&A.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:t,BaseRegExpVisitor:v,VERSION:\"0.5.0\"}})});var Lt=R(He=>{\"use strict\";Object.defineProperty(He,\"__esModule\",{value:!0});He.clearRegExpParserCache=He.getRegExpAst=void 0;var Ga=xt(),Ct={},Wa=new Ga.RegExpParser;function Ba(t){var e=t.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=R(re=>{\"use strict\";var ja=re&&re.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(re,\"__esModule\",{value:!0});re.canMatchCharCode=re.firstCharOptimizedIndices=re.getOptimizedStartCodesIndices=re.failedOptimizationPrefixMsg=void 0;var un=xt(),pe=k(),cn=Lt(),Ce=Tr(),ln=\"Complement Sets are not supported for first char optimization\";re.failedOptimizationPrefixMsg=`Unable to use \"first char\" lexer optimizations:\n`;function Va(t,e){e===void 0&&(e=!1);try{var r=cn.getRegExpAst(t),n=Mt(r.value,{},r.flags.ignoreCase);return n}catch(a){if(a.message===ln)e&&pe.PRINT_WARNING(\"\"+re.failedOptimizationPrefixMsg+(\"\tUnable to optimize: < \"+t.toString()+` >\n`)+`\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var i=\"\";e&&(i=`\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),pe.PRINT_ERROR(re.failedOptimizationPrefixMsg+`\n`+(\"\tFailed parsing: < \"+t.toString()+` >\n`)+(\"\tUsing the regexp-to-ast library version: \"+un.VERSION+`\n`)+\"\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\"+i)}}return[]}re.getOptimizedStartCodesIndices=Va;function Mt(t,e,r){switch(t.type){case\"Disjunction\":for(var n=0;n<t.value.length;n++)Mt(t.value[n],e,r);break;case\"Alternative\":for(var i=t.value,n=0;n<i.length;n++){var a=i[n];switch(a.type){case\"EndAnchor\":case\"GroupBackReference\":case\"Lookahead\":case\"NegativeLookahead\":case\"StartAnchor\":case\"WordBoundary\":case\"NonWordBoundary\":continue}var o=a;switch(o.type){case\"Character\":bt(o.value,e,r);break;case\"Set\":if(o.complement===!0)throw Error(ln);pe.forEach(o.value,function(f){if(typeof f==\"number\")bt(f,e,r);else{var p=f;if(r===!0)for(var l=p.from;l<=p.to;l++)bt(l,e,r);else{for(var l=p.from;l<=p.to&&l<Ce.minOptimizationVal;l++)bt(l,e,r);if(p.to>=Ce.minOptimizationVal)for(var m=p.from>=Ce.minOptimizationVal?p.from:Ce.minOptimizationVal,v=p.to,u=Ce.charCodeToOptimizedIndex(m),d=Ce.charCodeToOptimizedIndex(v),A=u;A<=d;A++)e[A]=A}}});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)===!1||o.type!==\"Group\"&&s===!1)break}break;default:throw Error(\"non exhaustive match!\")}return pe.values(e)}re.firstCharOptimizedIndices=Mt;function bt(t,e,r){var n=Ce.charCodeToOptimizedIndex(t);e[n]=n,r===!0&&Ka(t,e)}function Ka(t,e){var r=String.fromCharCode(t),n=r.toUpperCase();if(n!==r){var i=Ce.charCodeToOptimizedIndex(n.charCodeAt(0));e[i]=i}else{var a=r.toLowerCase();if(a!==r){var i=Ce.charCodeToOptimizedIndex(a.charCodeAt(0));e[i]=i}}}function fn(t,e){return pe.find(t.value,function(r){if(typeof r==\"number\")return pe.contains(e,r);var n=r;return pe.find(e,function(i){return n.from<=i&&i<=n.to})!==void 0})}function yr(t){return t.quantifier&&t.quantifier.atLeast===0?!0:t.value?pe.isArray(t.value)?pe.every(t.value,yr):yr(t.value):!1}var za=function(t){ja(e,t);function e(r){var n=t.call(this)||this;return n.targetCharCodes=r,n.found=!1,n}return e.prototype.visitChildren=function(r){if(this.found!==!0){switch(r.type){case\"Lookahead\":this.visitLookahead(r);return;case\"NegativeLookahead\":this.visitNegativeLookahead(r);return}t.prototype.visitChildren.call(this,r)}},e.prototype.visitCharacter=function(r){pe.contains(this.targetCharCodes,r.value)&&(this.found=!0)},e.prototype.visitSet=function(r){r.complement?fn(r,this.targetCharCodes)===void 0&&(this.found=!0):fn(r,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(un.BaseRegExpVisitor);function Ha(t,e){if(e instanceof RegExp){var r=cn.getRegExpAst(e),n=new za(t);return n.visit(r),n.found}else return pe.find(e,function(i){return pe.contains(t,i.charCodeAt(0))})!==void 0}re.canMatchCharCode=Ha});var Tr=R(T=>{\"use strict\";var hn=T&&T.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(T,\"__esModule\",{value:!0});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(),F=ft(),h=k(),Ye=pn(),vn=Lt(),Ae=\"PATTERN\";T.DEFAULT_MODE=\"defaultMode\";T.MODES=\"modes\";T.SUPPORT_STICKY=typeof new RegExp(\"(?:)\").sticky==\"boolean\";function Ya(){T.SUPPORT_STICKY=!1}T.disableSticky=Ya;function Xa(){T.SUPPORT_STICKY=!0}T.enableSticky=Xa;function Za(t,e){e=h.defaults(e,{useSticky:T.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:\"full\",lineTerminatorCharacters:[\"\\r\",`\n`],tracer:function(g,y){return y()}});var r=e.tracer;r(\"initCharCodeToOptimizedIndexMap\",function(){$a()});var n;r(\"Reject Lexer.NA\",function(){n=h.reject(t,function(g){return g[Ae]===F.Lexer.NA})});var i=!1,a;r(\"Transform Patterns\",function(){i=!1,a=h.map(n,function(g){var y=g[Ae];if(h.isRegExp(y)){var b=y.source;return b.length===1&&b!==\"^\"&&b!==\"$\"&&b!==\".\"&&!y.ignoreCase?b:b.length===2&&b[0]===\"\\\\\"&&!h.contains([\"d\",\"D\",\"s\",\"S\",\"t\",\"r\",\"n\",\"t\",\"0\",\"c\",\"b\",\"B\",\"f\",\"v\",\"w\",\"W\"],b[1])?b[1]:e.useSticky?gr(y):_r(y)}else{if(h.isFunction(y))return i=!0,{exec:y};if(h.has(y,\"exec\"))return i=!0,y;if(typeof y==\"string\"){if(y.length===1)return y;var L=y.replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\"),se=new RegExp(L);return e.useSticky?gr(se):_r(se)}else throw Error(\"non exhaustive match\")}})});var o,s,c,f,p;r(\"misc mapping\",function(){o=h.map(n,function(g){return g.tokenTypeIdx}),s=h.map(n,function(g){var y=g.GROUP;if(y!==F.Lexer.SKIPPED){if(h.isString(y))return y;if(h.isUndefined(y))return!1;throw Error(\"non exhaustive match\")}}),c=h.map(n,function(g){var y=g.LONGER_ALT;if(y){var b=h.indexOf(n,y);return b}}),f=h.map(n,function(g){return g.PUSH_MODE}),p=h.map(n,function(g){return h.has(g,\"POP_MODE\")})});var l;r(\"Line Terminator Handling\",function(){var g=Tn(e.lineTerminatorCharacters);l=h.map(n,function(y){return!1}),e.positionTracking!==\"onlyOffset\"&&(l=h.map(n,function(y){if(h.has(y,\"LINE_BREAKS\"))return y.LINE_BREAKS;if(En(y,g)===!1)return Ye.canMatchCharCode(g,y.PATTERN)}))});var m,v,u,d;r(\"Misc Mapping #2\",function(){m=h.map(n,Ar),v=h.map(a,mn),u=h.reduce(n,function(g,y){var b=y.GROUP;return h.isString(b)&&b!==F.Lexer.SKIPPED&&(g[b]=[]),g},{}),d=h.map(a,function(g,y){return{pattern:a[y],longerAlt:c[y],canLineTerminator:l[y],isCustom:m[y],short:v[y],group:s[y],push:f[y],pop:p[y],tokenTypeIdx:o[y],tokenType:n[y]}})});var A=!0,_=[];return e.safeMode||r(\"First Char Optimization\",function(){_=h.reduce(n,function(g,y,b){if(typeof y.PATTERN==\"string\"){var L=y.PATTERN.charCodeAt(0),se=Or(L);Rr(g,se,d[b])}else if(h.isArray(y.START_CHARS_HINT)){var fe;h.forEach(y.START_CHARS_HINT,function(ue){var Q=typeof ue==\"string\"?ue.charCodeAt(0):ue,te=Or(Q);fe!==te&&(fe=te,Rr(g,te,d[b]))})}else if(h.isRegExp(y.PATTERN))if(y.PATTERN.unicode)A=!1,e.ensureOptimizations&&h.PRINT_ERROR(\"\"+Ye.failedOptimizationPrefixMsg+(\"\tUnable to analyze < \"+y.PATTERN.toString()+` > pattern.\n`)+`\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var Z=Ye.getOptimizedStartCodesIndices(y.PATTERN,e.ensureOptimizations);h.isEmpty(Z)&&(A=!1),h.forEach(Z,function(ue){Rr(g,ue,d[b])})}else e.ensureOptimizations&&h.PRINT_ERROR(\"\"+Ye.failedOptimizationPrefixMsg+(\"\tTokenType: <\"+y.name+`> is using a custom token pattern without providing <start_chars_hint> parameter.\n`)+`\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),A=!1;return g},[])}),r(\"ArrayPacking\",function(){_=h.packArray(_)}),{emptyGroups:u,patternIdxToConfig:d,charCodeToPatternIdxToConfig:_,hasCustom:i,canBeOptimized:A}}T.analyzeTokenTypes=Za;function Ja(t,e){var r=[],n=yn(t);r=r.concat(n.errors);var i=_n(n.valid),a=i.valid;return r=r.concat(i.errors),r=r.concat(Qa(a)),r=r.concat(gn(a)),r=r.concat(An(a,e)),r=r.concat(Rn(a)),r}T.validatePatterns=Ja;function Qa(t){var e=[],r=h.filter(t,function(n){return h.isRegExp(n[Ae])});return e=e.concat(On(r)),e=e.concat(In(r)),e=e.concat(kn(r)),e=e.concat(Pn(r)),e=e.concat(Nn(r)),e}function yn(t){var e=h.filter(t,function(i){return!h.has(i,Ae)}),r=h.map(e,function(i){return{message:\"Token Type: ->\"+i.name+\"<- missing static 'PATTERN' property\",type:F.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[i]}}),n=h.difference(t,e);return{errors:r,valid:n}}T.findMissingPatterns=yn;function _n(t){var e=h.filter(t,function(i){var a=i[Ae];return!h.isRegExp(a)&&!h.isFunction(a)&&!h.has(a,\"exec\")&&!h.isString(a)}),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:F.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[i]}}),n=h.difference(t,e);return{errors:r,valid:n}}T.findInvalidPatterns=_n;var eo=/[^\\\\][\\$]/;function On(t){var e=function(i){hn(a,i);function a(){var o=i!==null&&i.apply(this,arguments)||this;return o.found=!1,o}return a.prototype.visitEndAnchor=function(o){this.found=!0},a}(dn.BaseRegExpVisitor),r=h.filter(t,function(i){var a=i[Ae];try{var o=vn.getRegExpAst(a),s=new e;return s.visit(o),s.found}catch(c){return eo.test(a.source)}}),n=h.map(r,function(i){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+i.name+`<- static 'PATTERN' cannot contain end of input anchor '$'\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:F.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[i]}});return n}T.findEndOfInputAnchor=On;function Nn(t){var e=h.filter(t,function(n){var i=n[Ae];return i.test(\"\")}),r=h.map(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' must not match an empty string\",type:F.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[n]}});return r}T.findEmptyMatchRegExps=Nn;var to=/[^\\\\[][\\^]|^\\^/;function In(t){var e=function(i){hn(a,i);function a(){var o=i!==null&&i.apply(this,arguments)||this;return o.found=!1,o}return a.prototype.visitStartAnchor=function(o){this.found=!0},a}(dn.BaseRegExpVisitor),r=h.filter(t,function(i){var a=i[Ae];try{var o=vn.getRegExpAst(a),s=new e;return s.visit(o),s.found}catch(c){return to.test(a.source)}}),n=h.map(r,function(i){return{message:`Unexpected RegExp Anchor Error:\n\tToken Type: ->`+i.name+`<- static 'PATTERN' cannot contain start of input anchor '^'\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.`,type:F.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[i]}});return n}T.findStartOfInputAnchor=In;function kn(t){var e=h.filter(t,function(n){var i=n[Ae];return i instanceof RegExp&&(i.multiline||i.global)}),r=h.map(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",type:F.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[n]}});return r}T.findUnsupportedFlags=kn;function Pn(t){var e=[],r=h.map(t,function(a){return h.reduce(t,function(o,s){return a.PATTERN.source===s.PATTERN.source&&!h.contains(e,s)&&s.PATTERN!==F.Lexer.NA&&(e.push(s),o.push(s)),o},[])});r=h.compact(r);var n=h.filter(r,function(a){return a.length>1}),i=h.map(n,function(a){var o=h.map(a,function(c){return c.name}),s=h.first(a).PATTERN;return{message:\"The same RegExp pattern ->\"+s+\"<-\"+(\"has been used in all of the following Token Types: \"+o.join(\", \")+\" <-\"),type:F.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:a}});return i}T.findDuplicatePatterns=Pn;function gn(t){var e=h.filter(t,function(n){if(!h.has(n,\"GROUP\"))return!1;var i=n.GROUP;return i!==F.Lexer.SKIPPED&&i!==F.Lexer.NA&&!h.isString(i)}),r=h.map(e,function(n){return{message:\"Token Type: ->\"+n.name+\"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",type:F.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[n]}});return r}T.findInvalidGroupType=gn;function An(t,e){var r=h.filter(t,function(i){return i.PUSH_MODE!==void 0&&!h.contains(e,i.PUSH_MODE)}),n=h.map(r,function(i){var a=\"Token Type: ->\"+i.name+\"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\"+i.PUSH_MODE+\"<-which does not exist\";return{message:a,type:F.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[i]}});return n}T.findModesThatDoNotExist=An;function Rn(t){var e=[],r=h.reduce(t,function(n,i,a){var o=i.PATTERN;return o===F.Lexer.NA||(h.isString(o)?n.push({str:o,idx:a,tokenType:i}):h.isRegExp(o)&&no(o)&&n.push({str:o.source,idx:a,tokenType:i})),n},[]);return h.forEach(t,function(n,i){h.forEach(r,function(a){var o=a.str,s=a.idx,c=a.tokenType;if(i<s&&ro(o,n.PATTERN)){var f=\"Token: ->\"+c.name+`<- can never be matched.\n`+(\"Because it appears AFTER the Token Type ->\"+n.name+\"<-\")+`in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:f,type:F.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[n,c]})}})}),e}T.findUnreachablePatterns=Rn;function ro(t,e){if(h.isRegExp(e)){var r=e.exec(t);return r!==null&&r.index===0}else{if(h.isFunction(e))return e(t,0,[],{});if(h.has(e,\"exec\"))return e.exec(t,0,[],{});if(typeof e==\"string\")return e===t;throw Error(\"non exhaustive match\")}}function no(t){var e=[\".\",\"\\\\\",\"[\",\"]\",\"|\",\"^\",\"$\",\"(\",\")\",\"?\",\"*\",\"+\",\"{\"];return h.find(e,function(r){return t.source.indexOf(r)!==-1})===void 0}function _r(t){var e=t.ignoreCase?\"i\":\"\";return new RegExp(\"^(?:\"+t.source+\")\",e)}T.addStartOfInput=_r;function gr(t){var e=t.ignoreCase?\"iy\":\"y\";return new RegExp(\"\"+t.source,e)}T.addStickyFlag=gr;function io(t,e,r){var n=[];return h.has(t,T.DEFAULT_MODE)||n.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+T.DEFAULT_MODE+`> property in its definition\n`,type:F.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),h.has(t,T.MODES)||n.push({message:\"A MultiMode Lexer cannot be initialized without a <\"+T.MODES+`> property in its definition\n`,type:F.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),h.has(t,T.MODES)&&h.has(t,T.DEFAULT_MODE)&&!h.has(t.modes,t.defaultMode)&&n.push({message:\"A MultiMode Lexer cannot be initialized with a \"+T.DEFAULT_MODE+\": <\"+t.defaultMode+`>which does not exist\n`,type:F.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),h.has(t,T.MODES)&&h.forEach(t.modes,function(i,a){h.forEach(i,function(o,s){h.isUndefined(o)&&n.push({message:\"A Lexer cannot be initialized using an undefined Token Type. Mode:\"+(\"<\"+a+\"> at index: <\"+s+`>\n`),type:F.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),n}T.performRuntimeChecks=io;function ao(t,e,r){var n=[],i=!1,a=h.compact(h.flatten(h.mapValues(t.modes,function(c){return c}))),o=h.reject(a,function(c){return c[Ae]===F.Lexer.NA}),s=Tn(r);return e&&h.forEach(o,function(c){var f=En(c,s);if(f!==!1){var p=Sn(c,f),l={message:p,type:f.issue,tokenType:c};n.push(l)}else h.has(c,\"LINE_BREAKS\")?c.LINE_BREAKS===!0&&(i=!0):Ye.canMatchCharCode(s,c.PATTERN)&&(i=!0)}),e&&!i&&n.push({message:`Warning: No LINE_BREAKS Found.\n\tThis Lexer has been defined to track line and column information,\n\tBut none of the Token Types can be identified as matching a line terminator.\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS\n\tfor details.`,type:F.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),n}T.performWarningRuntimeChecks=ao;function oo(t){var e={},r=h.keys(t);return h.forEach(r,function(n){var i=t[n];if(h.isArray(i))e[n]=[];else throw Error(\"non exhaustive match\")}),e}T.cloneEmptyGroups=oo;function Ar(t){var e=t.PATTERN;if(h.isRegExp(e))return!1;if(h.isFunction(e))return!0;if(h.has(e,\"exec\"))return!0;if(h.isString(e))return!1;throw Error(\"non exhaustive match\")}T.isCustomPattern=Ar;function mn(t){return h.isString(t)&&t.length===1?t.charCodeAt(0):!1}T.isShortPattern=mn;T.LineTerminatorOptimizedTester={test:function(t){for(var e=t.length,r=this.lastIndex;r<e;r++){var n=t.charCodeAt(r);if(n===10)return this.lastIndex=r+1,!0;if(n===13)return t.charCodeAt(r+1)===10?this.lastIndex=r+2:this.lastIndex=r+1,!0}return!1},lastIndex:0};function En(t,e){if(h.has(t,\"LINE_BREAKS\"))return!1;if(h.isRegExp(t.PATTERN)){try{Ye.canMatchCharCode(e,t.PATTERN)}catch(r){return{issue:F.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,errMsg:r.message}}return!1}else{if(h.isString(t.PATTERN))return!1;if(Ar(t))return{issue:F.LexerDefinitionErrorType.CUSTOM_LINE_BREAK};throw Error(\"non exhaustive match\")}}function Sn(t,e){if(e.issue===F.LexerDefinitionErrorType.IDENTIFY_TERMINATOR)return`Warning: unable to identify line terminator usage in pattern.\n`+(\"\tThe problem is in the <\"+t.name+`> Token Type\n`)+(\"\t Root cause: \"+e.errMsg+`.\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\";if(e.issue===F.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the <line_breaks> option.\n`+(\"\tThe problem is in the <\"+t.name+`> Token Type\n`)+\"\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\";throw Error(\"non exhaustive match\")}T.buildLineBreakIssueMessage=Sn;function Tn(t){var e=h.map(t,function(r){return h.isString(r)&&r.length>0?r.charCodeAt(0):r});return e}function Rr(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}T.minOptimizationVal=256;var Ft=[];function Or(t){return t<T.minOptimizationVal?t:Ft[t]}T.charCodeToOptimizedIndex=Or;function $a(){if(h.isEmpty(Ft)){Ft=new Array(65536);for(var t=0;t<65536;t++)Ft[t]=t>255?255+~~(t/255):t}}});var Xe=R(N=>{\"use strict\";Object.defineProperty(N,\"__esModule\",{value:!0});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(t,e){var r=t.tokenTypeIdx;return r===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[r]===!0}N.tokenStructuredMatcher=so;function uo(t,e){return t.tokenTypeIdx===e.tokenTypeIdx}N.tokenStructuredMatcherNoCategories=uo;N.tokenShortNameIdx=1;N.tokenIdxToClass={};function co(t){var e=xn(t);Cn(e),Mn(e),Ln(e),V.forEach(e,function(r){r.isParent=r.categoryMatches.length>0})}N.augmentTokenTypes=co;function xn(t){for(var e=V.cloneArr(t),r=t,n=!0;n;){r=V.compact(V.flatten(V.map(r,function(a){return a.CATEGORIES})));var i=V.difference(r,e);e=e.concat(i),V.isEmpty(i)?n=!1:r=i}return e}N.expandCategories=xn;function Cn(t){V.forEach(t,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(t){V.forEach(t,function(e){e.categoryMatches=[],V.forEach(e.categoryMatchesMap,function(r,n){e.categoryMatches.push(N.tokenIdxToClass[n].tokenTypeIdx)})})}N.assignCategoriesTokensProp=Ln;function Mn(t){V.forEach(t,function(e){Ir([],e)})}N.assignCategoriesMapProp=Mn;function Ir(t,e){V.forEach(t,function(r){e.categoryMatchesMap[r.tokenTypeIdx]=!0}),V.forEach(e.CATEGORIES,function(r){var n=t.concat(e);V.contains(n,r)||Ir(n,r)})}N.singleAssignCategoriesToksMap=Ir;function bn(t){return V.has(t,\"tokenTypeIdx\")}N.hasShortKeyProperty=bn;function Nr(t){return V.has(t,\"CATEGORIES\")}N.hasCategoriesProperty=Nr;function Fn(t){return V.has(t,\"categoryMatches\")}N.hasExtendingTokensTypesProperty=Fn;function wn(t){return V.has(t,\"categoryMatchesMap\")}N.hasExtendingTokensTypesMapProperty=wn;function lo(t){return V.has(t,\"tokenTypeIdx\")}N.isTokenType=lo});var kr=R(wt=>{\"use strict\";Object.defineProperty(wt,\"__esModule\",{value:!0});wt.defaultLexerErrorProvider=void 0;wt.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(t){return\"Unable to pop Lexer Mode after encountering Token ->\"+t.image+\"<- The Mode Stack is empty\"},buildUnexpectedCharactersMessage:function(t,e,r,n,i){return\"unexpected character: ->\"+t.charAt(e)+\"<- at offset: \"+e+\",\"+(\" skipped \"+r+\" characters.\")}}});var ft=R(qe=>{\"use strict\";Object.defineProperty(qe,\"__esModule\",{value:!0});qe.Lexer=qe.LexerDefinitionErrorType=void 0;var Ee=Tr(),w=k(),fo=Xe(),po=kr(),ho=Lt(),vo;(function(t){t[t.MISSING_PATTERN=0]=\"MISSING_PATTERN\",t[t.INVALID_PATTERN=1]=\"INVALID_PATTERN\",t[t.EOI_ANCHOR_FOUND=2]=\"EOI_ANCHOR_FOUND\",t[t.UNSUPPORTED_FLAGS_FOUND=3]=\"UNSUPPORTED_FLAGS_FOUND\",t[t.DUPLICATE_PATTERNS_FOUND=4]=\"DUPLICATE_PATTERNS_FOUND\",t[t.INVALID_GROUP_TYPE_FOUND=5]=\"INVALID_GROUP_TYPE_FOUND\",t[t.PUSH_MODE_DOES_NOT_EXIST=6]=\"PUSH_MODE_DOES_NOT_EXIST\",t[t.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]=\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\",t[t.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]=\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\",t[t.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]=\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\",t[t.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]=\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\",t[t.SOI_ANCHOR_FOUND=11]=\"SOI_ANCHOR_FOUND\",t[t.EMPTY_MATCH_PATTERN=12]=\"EMPTY_MATCH_PATTERN\",t[t.NO_LINE_BREAKS_FLAGS=13]=\"NO_LINE_BREAKS_FLAGS\",t[t.UNREACHABLE_PATTERN=14]=\"UNREACHABLE_PATTERN\",t[t.IDENTIFY_TERMINATOR=15]=\"IDENTIFY_TERMINATOR\",t[t.CUSTOM_LINE_BREAK=16]=\"CUSTOM_LINE_BREAK\"})(vo=qe.LexerDefinitionErrorType||(qe.LexerDefinitionErrorType={}));var pt={deferDefinitionErrorsHandling:!1,positionTracking:\"full\",lineTerminatorsPattern:/\\n|\\r\\n?/g,lineTerminatorCharacters:[`\n`,\"\\r\"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:po.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(pt);var mo=function(){function t(e,r){var n=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=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof r==\"boolean\")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported`);this.config=w.merge(pt,r);var i=this.config.traceInitPerf;i===!0?(this.traceInitMaxIdent=Infinity,this.traceInitPerf=!0):typeof i==\"number\"&&(this.traceInitMaxIdent=i,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT(\"Lexer Constructor\",function(){var a,o=!0;n.TRACE_INIT(\"Lexer Config handling\",function(){if(n.config.lineTerminatorsPattern===pt.lineTerminatorsPattern)n.config.lineTerminatorsPattern=Ee.LineTerminatorOptimizedTester;else if(n.config.lineTerminatorCharacters===pt.lineTerminatorCharacters)throw Error(`Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n\tFor 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.');n.trackStartLines=/full|onlyStart/i.test(n.config.positionTracking),n.trackEndLines=/full/i.test(n.config.positionTracking),w.isArray(e)?(a={modes:{}},a.modes[Ee.DEFAULT_MODE]=w.cloneArr(e),a[Ee.DEFAULT_MODE]=Ee.DEFAULT_MODE):(o=!1,a=w.cloneObj(e))}),n.config.skipValidations===!1&&(n.TRACE_INIT(\"performRuntimeChecks\",function(){n.lexerDefinitionErrors=n.lexerDefinitionErrors.concat(Ee.performRuntimeChecks(a,n.trackStartLines,n.config.lineTerminatorCharacters))}),n.TRACE_INIT(\"performWarningRuntimeChecks\",function(){n.lexerDefinitionWarning=n.lexerDefinitionWarning.concat(Ee.performWarningRuntimeChecks(a,n.trackStartLines,n.config.lineTerminatorCharacters))})),a.modes=a.modes?a.modes:{},w.forEach(a.modes,function(p,l){a.modes[l]=w.reject(p,function(m){return w.isUndefined(m)})});var s=w.keys(a.modes);if(w.forEach(a.modes,function(p,l){n.TRACE_INIT(\"Mode: <\"+l+\"> processing\",function(){if(n.modes.push(l),n.config.skipValidations===!1&&n.TRACE_INIT(\"validatePatterns\",function(){n.lexerDefinitionErrors=n.lexerDefinitionErrors.concat(Ee.validatePatterns(p,s))}),w.isEmpty(n.lexerDefinitionErrors)){fo.augmentTokenTypes(p);var m;n.TRACE_INIT(\"analyzeTokenTypes\",function(){m=Ee.analyzeTokenTypes(p,{lineTerminatorCharacters:n.config.lineTerminatorCharacters,positionTracking:r.positionTracking,ensureOptimizations:r.ensureOptimizations,safeMode:r.safeMode,tracer:n.TRACE_INIT.bind(n)})}),n.patternIdxToConfig[l]=m.patternIdxToConfig,n.charCodeToPatternIdxToConfig[l]=m.charCodeToPatternIdxToConfig,n.emptyGroups=w.merge(n.emptyGroups,m.emptyGroups),n.hasCustom=m.hasCustom||n.hasCustom,n.canModeBeOptimized[l]=m.canBeOptimized}})}),n.defaultMode=a.defaultMode,!w.isEmpty(n.lexerDefinitionErrors)&&!n.config.deferDefinitionErrorsHandling){var c=w.map(n.lexerDefinitionErrors,function(p){return p.message}),f=c.join(`-----------------------\n`);throw new Error(`Errors detected in definition of Lexer:\n`+f)}w.forEach(n.lexerDefinitionWarning,function(p){w.PRINT_WARNING(p.message)}),n.TRACE_INIT(\"Choosing sub-methods implementations\",function(){if(Ee.SUPPORT_STICKY?(n.chopInput=w.IDENTITY,n.match=n.matchWithTest):(n.updateLastIndex=w.NOOP,n.match=n.matchWithExec),o&&(n.handleModes=w.NOOP),n.trackStartLines===!1&&(n.computeNewColumn=w.IDENTITY),n.trackEndLines===!1&&(n.updateTokenEndLineColumnLocation=w.NOOP),/full/i.test(n.config.positionTracking))n.createTokenInstance=n.createFullToken;else if(/onlyStart/i.test(n.config.positionTracking))n.createTokenInstance=n.createStartOnlyToken;else if(/onlyOffset/i.test(n.config.positionTracking))n.createTokenInstance=n.createOffsetOnlyToken;else throw Error('Invalid <positionTracking> config option: \"'+n.config.positionTracking+'\"');n.hasCustom?(n.addToken=n.addTokenUsingPush,n.handlePayload=n.handlePayloadWithCustom):(n.addToken=n.addTokenUsingMemberAccess,n.handlePayload=n.handlePayloadNoCustom)}),n.TRACE_INIT(\"Failed Optimization Warnings\",function(){var p=w.reduce(n.canModeBeOptimized,function(l,m,v){return m===!1&&l.push(v),l},[]);if(r.ensureOptimizations&&!w.isEmpty(p))throw Error(\"Lexer Modes: < \"+p.join(\", \")+` > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`)}),n.TRACE_INIT(\"clearRegExpParserCache\",function(){ho.clearRegExpParserCache()}),n.TRACE_INIT(\"toFastProperties\",function(){w.toFastProperties(n)})})}return t.prototype.tokenize=function(e,r){if(r===void 0&&(r=this.defaultMode),!w.isEmpty(this.lexerDefinitionErrors)){var n=w.map(this.lexerDefinitionErrors,function(o){return o.message}),i=n.join(`-----------------------\n`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer:\n`+i)}var a=this.tokenizeInternal(e,r);return a},t.prototype.tokenizeInternal=function(e,r){var n=this,i,a,o,s,c,f,p,l,m,v,u,d,A,_,g,y=e,b=y.length,L=0,se=0,fe=this.hasCustom?0:Math.floor(e.length/10),Z=new Array(fe),ue=[],Q=this.trackStartLines?1:void 0,te=this.trackStartLines?1:void 0,xe=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=n.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=n.patternIdxToConfig[ze],ot=n.charCodeToPatternIdxToConfig[ze],Ke=we.length;var Ua=n.canModeBeOptimized[ze]&&n.config.safeMode===!1;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===!1;ot&&lt?st=en:st=Jr}tn.call(this,r);for(var me;L<b;){c=null;var rn=y.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!==!1?rn===ut&&(c=De):me.isCustom===!0?(g=De.exec(y,L,Z,xe),g!==null?(c=g[0],g.payload!==void 0&&(f=g.payload)):c=null):(this.updateLastIndex(De,L),c=this.match(De,e,L)),c!==null){if(s=me.longerAlt,s!==void 0){var fr=we[s],pr=fr.pattern;p=null,fr.isCustom===!0?(g=pr.exec(y,L,Z,xe),g!==null?(o=g[0],g.payload!==void 0&&(p=g.payload)):o=null):(this.updateLastIndex(pr,L),o=this.match(pr,e,L)),o&&o.length>c.length&&(c=o,f=p,me=fr)}break}}if(c!==null){if(l=c.length,m=me.group,m!==void 0&&(v=me.tokenTypeIdx,u=this.createTokenInstance(c,L,v,me.tokenType,Q,te,l),this.handlePayload(u,f),m===!1?se=this.addToken(Z,se,u):xe[m].push(u)),e=this.chopInput(e,l),L=L+l,te=this.computeNewColumn(te,l),it===!0&&me.canLineTerminator===!0){var kt=0,hr=void 0,dr=void 0;at.lastIndex=0;do hr=at.test(c),hr===!0&&(dr=at.lastIndex-1,kt++);while(hr===!0);kt!==0&&(Q=Q+kt,te=l-dr,this.updateTokenEndLineColumnLocation(u,m,dr,kt,Q,te,l))}this.handleModes(me,wa,tn,u)}else{for(var vr=L,an=Q,on=te,ct=!1;!ct&&L<b;)for(A=y.charCodeAt(L),e=this.chopInput(e,1),L++,a=0;a<Ke;a++){var mr=we[a],De=mr.pattern,ut=mr.short;if(ut!==!1?y.charCodeAt(L)===ut&&(ct=!0):mr.isCustom===!0?ct=De.exec(y,L,Z,xe)!==null:(this.updateLastIndex(De,L),ct=De.exec(e)!==null),ct===!0)break}d=L-vr,_=this.config.errorMessageProvider.buildUnexpectedCharactersMessage(y,vr,d,an,on),ue.push({offset:vr,line:an,column:on,length:d,message:_})}}return this.hasCustom||(Z.length=se),{tokens:Z,groups:xe,errors:ue}},t.prototype.handleModes=function(e,r,n,i){if(e.pop===!0){var a=e.push;r(i),a!==void 0&&n.call(this,a)}else e.push!==void 0&&n.call(this,e.push)},t.prototype.chopInput=function(e,r){return e.substring(r)},t.prototype.updateLastIndex=function(e,r){e.lastIndex=r},t.prototype.updateTokenEndLineColumnLocation=function(e,r,n,i,a,o,s){var c,f;r!==void 0&&(c=n===s-1,f=c?-1:0,i===1&&c===!0||(e.endLine=a+f,e.endColumn=o-1+-f))},t.prototype.computeNewColumn=function(e,r){return e+r},t.prototype.createTokenInstance=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return null},t.prototype.createOffsetOnlyToken=function(e,r,n,i){return{image:e,startOffset:r,tokenTypeIdx:n,tokenType:i}},t.prototype.createStartOnlyToken=function(e,r,n,i,a,o){return{image:e,startOffset:r,startLine:a,startColumn:o,tokenTypeIdx:n,tokenType:i}},t.prototype.createFullToken=function(e,r,n,i,a,o,s){return{image:e,startOffset:r,endOffset:r+s-1,startLine:a,endLine:a,startColumn:o,endColumn:o+s-1,tokenTypeIdx:n,tokenType:i}},t.prototype.addToken=function(e,r,n){return 666},t.prototype.addTokenUsingPush=function(e,r,n){return e.push(n),r},t.prototype.addTokenUsingMemberAccess=function(e,r,n){return e[r]=n,r++,r},t.prototype.handlePayload=function(e,r){},t.prototype.handlePayloadNoCustom=function(e,r){},t.prototype.handlePayloadWithCustom=function(e,r){r!==null&&(e.payload=r)},t.prototype.match=function(e,r,n){return null},t.prototype.matchWithTest=function(e,r,n){var i=e.test(r);return i===!0?r.substring(n,e.lastIndex):null},t.prototype.matchWithExec=function(e,r){var n=e.exec(r);return n!==null?n[0]:n},t.prototype.TRACE_INIT=function(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;var n=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(n+\"--> <\"+e+\">\");var i=w.timer(r),a=i.time,o=i.value,s=a>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(n+\"<-- <\"+e+\"> time: \"+a+\"ms\"),this.traceInitIndent--,o}else return r()},t.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.\",t.NA=/NOT_APPLICABLE/,t}();qe.Lexer=mo});var Ue=R(H=>{\"use strict\";Object.defineProperty(H,\"__esModule\",{value:!0});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(t){return Dn(t)?t.LABEL:t.name}H.tokenLabel=To;function yo(t){return t.name}H.tokenName=yo;function Dn(t){return Te.isString(t.LABEL)&&t.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(t){return go(t)}H.createToken=zn;function go(t){var e=t.pattern,r={};if(r.name=t.name,Te.isUndefined(e)||(r.PATTERN=e),Te.has(t,_o))throw`The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return Te.has(t,Un)&&(r.CATEGORIES=t[Un]),Pr.augmentTokenTypes([r]),Te.has(t,Gn)&&(r.LABEL=t[Gn]),Te.has(t,Wn)&&(r.GROUP=t[Wn]),Te.has(t,qn)&&(r.POP_MODE=t[qn]),Te.has(t,Bn)&&(r.PUSH_MODE=t[Bn]),Te.has(t,jn)&&(r.LONGER_ALT=t[jn]),Te.has(t,Vn)&&(r.LINE_BREAKS=t[Vn]),Te.has(t,Kn)&&(r.START_CHARS_HINT=t[Kn]),r}H.EOF=zn({name:\"EOF\",pattern:Eo.Lexer.NA});Pr.augmentTokenTypes([H.EOF]);function Ao(t,e,r,n,i,a,o,s){return{image:e,startOffset:r,endOffset:n,startLine:i,endLine:a,startColumn:o,endColumn:s,tokenTypeIdx:t.tokenTypeIdx,tokenType:t}}H.createTokenInstance=Ao;function Ro(t,e){return Pr.tokenStructuredMatcher(t,e)}H.tokenMatcher=Ro});var ne=R(S=>{\"use strict\";var Le=S&&S.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(S,\"__esModule\",{value:!0});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 t(e){this._definition=e}return Object.defineProperty(t.prototype,\"definition\",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),t.prototype.accept=function(e){e.visit(this),G.forEach(this.definition,function(r){r.accept(e)})},t}();S.AbstractProduction=Re;var Hn=function(t){Le(e,t);function e(r){var n=t.call(this,[])||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(r){},enumerable:!1,configurable:!0}),e.prototype.accept=function(r){r.visit(this)},e}(Re);S.NonTerminal=Hn;var Yn=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.orgText=\"\",G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.Rule=Yn;var Xn=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.ignoreAmbiguities=!1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.Alternative=Xn;var $n=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.Option=$n;var Zn=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.RepetitionMandatory=Zn;var Qn=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.RepetitionMandatoryWithSeparator=Qn;var Jn=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.Repetition=Jn;var ei=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return e}(Re);S.RepetitionWithSeparator=ei;var ti=function(t){Le(e,t);function e(r){var n=t.call(this,r.definition)||this;return n.idx=1,n.ignoreAmbiguities=!1,n.hasPredicates=!1,G.assign(n,G.pick(r,function(i){return i!==void 0})),n}return Object.defineProperty(e.prototype,\"definition\",{get:function(){return this._definition},set:function(r){this._definition=r},enumerable:!1,configurable:!0}),e}(Re);S.Alternation=ti;var Dt=function(){function t(e){this.idx=1,G.assign(this,G.pick(e,function(r){return r!==void 0}))}return t.prototype.accept=function(e){e.visit(this)},t}();S.Terminal=Dt;function No(t){return G.map(t,ht)}S.serializeGrammar=No;function ht(t){function e(i){return G.map(i,ht)}if(t instanceof Hn)return{type:\"NonTerminal\",name:t.nonTerminalName,idx:t.idx};if(t instanceof Xn)return{type:\"Alternative\",definition:e(t.definition)};if(t instanceof $n)return{type:\"Option\",idx:t.idx,definition:e(t.definition)};if(t instanceof Zn)return{type:\"RepetitionMandatory\",idx:t.idx,definition:e(t.definition)};if(t instanceof Qn)return{type:\"RepetitionMandatoryWithSeparator\",idx:t.idx,separator:ht(new Dt({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof ei)return{type:\"RepetitionWithSeparator\",idx:t.idx,separator:ht(new Dt({terminalType:t.separator})),definition:e(t.definition)};if(t instanceof Jn)return{type:\"Repetition\",idx:t.idx,definition:e(t.definition)};if(t instanceof ti)return{type:\"Alternation\",idx:t.idx,definition:e(t.definition)};if(t instanceof Dt){var r={type:\"Terminal\",name:t.terminalType.name,label:Oo.tokenLabel(t.terminalType),idx:t.idx},n=t.terminalType.PATTERN;return t.terminalType.PATTERN&&(r.pattern=G.isRegExp(n)?n.source:n),r}else{if(t instanceof Yn)return{type:\"Rule\",name:t.name,orgText:t.orgText,definition:e(t.definition)};throw Error(\"non exhaustive match\")}}S.serializeProduction=ht});var Gt=R(Ut=>{\"use strict\";Object.defineProperty(Ut,\"__esModule\",{value:!0});Ut.RestWalker=void 0;var Sr=k(),ie=ne(),Io=function(){function t(){}return t.prototype.walk=function(e,r){var n=this;r===void 0&&(r=[]),Sr.forEach(e.definition,function(i,a){var o=Sr.drop(e.definition,a+1);if(i instanceof ie.NonTerminal)n.walkProdRef(i,o,r);else if(i instanceof ie.Terminal)n.walkTerminal(i,o,r);else if(i instanceof ie.Alternative)n.walkFlat(i,o,r);else if(i instanceof ie.Option)n.walkOption(i,o,r);else if(i instanceof ie.RepetitionMandatory)n.walkAtLeastOne(i,o,r);else if(i instanceof ie.RepetitionMandatoryWithSeparator)n.walkAtLeastOneSep(i,o,r);else if(i instanceof ie.RepetitionWithSeparator)n.walkManySep(i,o,r);else if(i instanceof ie.Repetition)n.walkMany(i,o,r);else if(i instanceof ie.Alternation)n.walkOr(i,o,r);else throw Error(\"non exhaustive match\")})},t.prototype.walkTerminal=function(e,r,n){},t.prototype.walkProdRef=function(e,r,n){},t.prototype.walkFlat=function(e,r,n){var i=r.concat(n);this.walk(e,i)},t.prototype.walkOption=function(e,r,n){var i=r.concat(n);this.walk(e,i)},t.prototype.walkAtLeastOne=function(e,r,n){var i=[new ie.Option({definition:e.definition})].concat(r,n);this.walk(e,i)},t.prototype.walkAtLeastOneSep=function(e,r,n){var i=ri(e,r,n);this.walk(e,i)},t.prototype.walkMany=function(e,r,n){var i=[new ie.Option({definition:e.definition})].concat(r,n);this.walk(e,i)},t.prototype.walkManySep=function(e,r,n){var i=ri(e,r,n);this.walk(e,i)},t.prototype.walkOr=function(e,r,n){var i=this,a=r.concat(n);Sr.forEach(e.definition,function(o){var s=new ie.Alternative({definition:[o]});i.walk(s,a)})},t}();Ut.RestWalker=Io;function ri(t,e,r){var n=[new ie.Option({definition:[new ie.Terminal({terminalType:t.separator})].concat(t.definition)})],i=n.concat(e,r);return i}});var $e=R(Wt=>{\"use strict\";Object.defineProperty(Wt,\"__esModule\",{value:!0});Wt.GAstVisitor=void 0;var Oe=ne(),ko=function(){function t(){}return t.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\")}},t.prototype.visitNonTerminal=function(e){},t.prototype.visitAlternative=function(e){},t.prototype.visitOption=function(e){},t.prototype.visitRepetition=function(e){},t.prototype.visitRepetitionMandatory=function(e){},t.prototype.visitRepetitionMandatoryWithSeparator=function(e){},t.prototype.visitRepetitionWithSeparator=function(e){},t.prototype.visitAlternation=function(e){},t.prototype.visitTerminal=function(e){},t.prototype.visitRule=function(e){},t}();Wt.GAstVisitor=ko});var vt=R(X=>{\"use strict\";var Po=X&&X.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(X,\"__esModule\",{value:!0});X.collectMethods=X.DslMethodsCollectorVisitor=X.getProductionDslName=X.isBranchingProd=X.isOptionalProd=X.isSequenceProd=void 0;var dt=k(),W=ne(),So=$e();function xo(t){return t instanceof W.Alternative||t instanceof W.Option||t instanceof W.Repetition||t instanceof W.RepetitionMandatory||t instanceof W.RepetitionMandatoryWithSeparator||t instanceof W.RepetitionWithSeparator||t instanceof W.Terminal||t instanceof W.Rule}X.isSequenceProd=xo;function xr(t,e){e===void 0&&(e=[]);var r=t instanceof W.Option||t instanceof W.Repetition||t instanceof W.RepetitionWithSeparator;return r?!0:t instanceof W.Alternation?dt.some(t.definition,function(n){return xr(n,e)}):t instanceof W.NonTerminal&&dt.contains(e,t)?!1:t instanceof W.AbstractProduction?(t instanceof W.NonTerminal&&e.push(t),dt.every(t.definition,function(n){return xr(n,e)})):!1}X.isOptionalProd=xr;function Co(t){return t instanceof W.Alternation}X.isBranchingProd=Co;function Lo(t){if(t instanceof W.NonTerminal)return\"SUBRULE\";if(t instanceof W.Option)return\"OPTION\";if(t instanceof W.Alternation)return\"OR\";if(t instanceof W.RepetitionMandatory)return\"AT_LEAST_ONE\";if(t instanceof W.RepetitionMandatoryWithSeparator)return\"AT_LEAST_ONE_SEP\";if(t instanceof W.RepetitionWithSeparator)return\"MANY_SEP\";if(t instanceof W.Repetition)return\"MANY\";if(t instanceof W.Terminal)return\"CONSUME\";throw Error(\"non exhaustive match\")}X.getProductionDslName=Lo;var ni=function(t){Po(e,t);function e(){var r=t!==null&&t.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 n=r.terminalType.name+this.separator+\"Terminal\";dt.has(this.dslMethods,n)||(this.dslMethods[n]=[]),this.dslMethods[n].push(r)},e.prototype.visitNonTerminal=function(r){var n=r.nonTerminalName+this.separator+\"Terminal\";dt.has(this.dslMethods,n)||(this.dslMethods[n]=[]),this.dslMethods[n].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);X.DslMethodsCollectorVisitor=ni;var Bt=new ni;function Mo(t){Bt.reset(),t.accept(Bt);var e=Bt.dslMethods;return Bt.reset(),e}X.collectMethods=Mo});var Lr=R(Ne=>{\"use strict\";Object.defineProperty(Ne,\"__esModule\",{value:!0});Ne.firstForTerminal=Ne.firstForBranching=Ne.firstForSequence=Ne.first=void 0;var qt=k(),ii=ne(),Cr=vt();function jt(t){if(t instanceof ii.NonTerminal)return jt(t.referencedRule);if(t instanceof ii.Terminal)return si(t);if(Cr.isSequenceProd(t))return ai(t);if(Cr.isBranchingProd(t))return oi(t);throw Error(\"non exhaustive match\")}Ne.first=jt;function ai(t){for(var e=[],r=t.definition,n=0,i=r.length>n,a,o=!0;i&&o;)a=r[n],o=Cr.isOptionalProd(a),e=e.concat(jt(a)),n=n+1,i=r.length>n;return qt.uniq(e)}Ne.firstForSequence=ai;function oi(t){var e=qt.map(t.definition,function(r){return jt(r)});return qt.uniq(qt.flatten(e))}Ne.firstForBranching=oi;function si(t){return[t.terminalType]}Ne.firstForTerminal=si});var Mr=R(Vt=>{\"use strict\";Object.defineProperty(Vt,\"__esModule\",{value:!0});Vt.IN=void 0;Vt.IN=\"_~IN~_\"});var pi=R(he=>{\"use strict\";var bo=he&&he.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(he,\"__esModule\",{value:!0});he.buildInProdFollowPrefix=he.buildBetweenProdsFollowPrefix=he.computeAllProdsFollows=he.ResyncFollowsWalker=void 0;var Fo=Gt(),wo=Lr(),ui=k(),ci=Mr(),Do=ne(),fi=function(t){bo(e,t);function e(r){var n=t.call(this)||this;return n.topProd=r,n.follows={},n}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(r,n,i){},e.prototype.walkProdRef=function(r,n,i){var a=li(r.referencedRule,r.idx)+this.topProd.name,o=n.concat(i),s=new Do.Alternative({definition:o}),c=wo.first(s);this.follows[a]=c},e}(Fo.RestWalker);he.ResyncFollowsWalker=fi;function Uo(t){var e={};return ui.forEach(t,function(r){var n=new fi(r).startWalking();ui.assign(e,n)}),e}he.computeAllProdsFollows=Uo;function li(t,e){return t.name+e+ci.IN}he.buildBetweenProdsFollowPrefix=li;function Go(t){var e=t.terminalType.name;return e+t.idx+ci.IN}he.buildInProdFollowPrefix=Go});var mt=R(Me=>{\"use strict\";Object.defineProperty(Me,\"__esModule\",{value:!0});Me.defaultGrammarValidatorErrorProvider=Me.defaultGrammarResolverErrorProvider=Me.defaultParserErrorProvider=void 0;var Ze=Ue(),Wo=k(),ye=k(),br=ne(),hi=vt();Me.defaultParserErrorProvider={buildMismatchTokenMessage:function(t){var e=t.expected,r=t.actual,n=t.previous,i=t.ruleName,a=Ze.hasTokenLabel(e),o=a?\"--> \"+Ze.tokenLabel(e)+\" <--\":\"token of type --> \"+e.name+\" <--\",s=\"Expecting \"+o+\" but found --> '\"+r.image+\"' <--\";return s},buildNotAllInputParsedMessage:function(t){var e=t.firstRedundant,r=t.ruleName;return\"Redundant input, expecting EOF but found: \"+e.image},buildNoViableAltMessage:function(t){var e=t.expectedPathsPerAlt,r=t.actual,n=t.previous,i=t.customUserDescription,a=t.ruleName,o=\"Expecting: \",s=ye.first(r).image,c=`\nbut found: '`+s+\"'\";if(i)return o+i+c;var f=ye.reduce(e,function(v,u){return v.concat(u)},[]),p=ye.map(f,function(v){return\"[\"+ye.map(v,function(u){return Ze.tokenLabel(u)}).join(\", \")+\"]\"}),l=ye.map(p,function(v,u){return\" \"+(u+1)+\". \"+v}),m=`one of these possible Token sequences:\n`+l.join(`\n`);return o+m+c},buildEarlyExitMessage:function(t){var e=t.expectedIterationPaths,r=t.actual,n=t.customUserDescription,i=t.ruleName,a=\"Expecting: \",o=ye.first(r).image,s=`\nbut found: '`+o+\"'\";if(n)return a+n+s;var c=ye.map(e,function(p){return\"[\"+ye.map(p,function(l){return Ze.tokenLabel(l)}).join(\",\")+\"]\"}),f=`expecting at least one iteration which starts with one of these possible Token sequences::\n `+(\"<\"+c.join(\" ,\")+\">\");return a+f+s}};Object.freeze(Me.defaultParserErrorProvider);Me.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(t,e){var r=\"Invalid grammar, reference to a rule which is not defined: ->\"+e.nonTerminalName+`<-\ninside top level rule: ->`+t.name+\"<-\";return r}};Me.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(t,e){function r(p){return p instanceof br.Terminal?p.terminalType.name:p instanceof br.NonTerminal?p.nonTerminalName:\"\"}var n=t.name,i=ye.first(e),a=i.idx,o=hi.getProductionDslName(i),s=r(i),c=a>0,f=\"->\"+o+(c?a:\"\")+\"<- \"+(s?\"with argument: ->\"+s+\"<-\":\"\")+`\n appears more than once (`+e.length+\" times) in the top level rule: ->\"+n+`<-.\n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES\n `;return f=f.replace(/[ \\t]+/g,\" \"),f=f.replace(/\\s\\s+/g,`\n`),f},buildNamespaceConflictError:function(t){var e=`Namespace conflict found in grammar.\n`+(\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\"+t.name+`>.\n`)+`To resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(t){var e=ye.map(t.prefixPath,function(i){return Ze.tokenLabel(i)}).join(\", \"),r=t.alternation.idx===0?\"\":t.alternation.idx,n=\"Ambiguous alternatives: <\"+t.ambiguityIndices.join(\" ,\")+`> due to common lookahead prefix\n`+(\"in <OR\"+r+\"> inside <\"+t.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;return n},buildAlternationAmbiguityError:function(t){var e=ye.map(t.prefixPath,function(i){return Ze.tokenLabel(i)}).join(\", \"),r=t.alternation.idx===0?\"\":t.alternation.idx,n=\"Ambiguous Alternatives Detected: <\"+t.ambiguityIndices.join(\" ,\")+\"> in <OR\"+r+\">\"+(\" inside <\"+t.topLevelRule.name+`> Rule,\n`)+(\"<\"+e+`> may appears as a prefix path in all these alternatives.\n`);return n=n+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`,n},buildEmptyRepetitionError:function(t){var e=hi.getProductionDslName(t.repetition);t.repetition.idx!==0&&(e+=t.repetition.idx);var r=\"The repetition <\"+e+\"> within Rule <\"+t.topLevelRule.name+`> can never consume any tokens.\nThis could lead to an infinite loop.`;return r},buildTokenNameError:function(t){return\"deprecated\"},buildEmptyAlternationError:function(t){var e=\"Ambiguous empty alternative: <\"+(t.emptyChoiceIdx+1)+\">\"+(\" in <OR\"+t.alternation.idx+\"> inside <\"+t.topLevelRule.name+`> Rule.\n`)+\"Only the last alternative may be an empty alternative.\";return e},buildTooManyAlternativesError:function(t){var e=`An Alternation cannot have more than 256 alternatives:\n`+(\"<OR\"+t.alternation.idx+\"> inside <\"+t.topLevelRule.name+`> Rule.\n has `+(t.alternation.definition.length+1)+\" alternatives.\");return e},buildLeftRecursionError:function(t){var e=t.topLevelRule.name,r=Wo.map(t.leftRecursionPath,function(a){return a.name}),n=e+\" --> \"+r.concat([e]).join(\" --> \"),i=`Left Recursion found in grammar.\n`+(\"rule: <\"+e+`> can be invoked from itself (directly or indirectly)\n`)+(`without consuming any Tokens. The grammar path that causes this is:\n `+n+`\n`)+` To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return i},buildInvalidRuleNameError:function(t){return\"deprecated\"},buildDuplicateRuleNameError:function(t){var e;t.topLevelRule instanceof br.Rule?e=t.topLevelRule.name:e=t.topLevelRule;var r=\"Duplicate definition, rule: ->\"+e+\"<- is already defined in the grammar: ->\"+t.grammarName+\"<-\";return r}}});var mi=R(Ge=>{\"use strict\";var Bo=Ge&&Ge.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(Ge,\"__esModule\",{value:!0});Ge.GastRefResolverVisitor=Ge.resolveGrammar=void 0;var qo=ce(),di=k(),jo=$e();function Vo(t,e){var r=new vi(t,e);return r.resolveRefs(),r.errors}Ge.resolveGrammar=Vo;var vi=function(t){Bo(e,t);function e(r,n){var i=t.call(this)||this;return i.nameToTopRule=r,i.errMsgProvider=n,i.errors=[],i}return e.prototype.resolveRefs=function(){var r=this;di.forEach(di.values(this.nameToTopRule),function(n){r.currTopLevel=n,n.accept(r)})},e.prototype.visitNonTerminal=function(r){var n=this.nameToTopRule[r.nonTerminalName];if(n)r.referencedRule=n;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=R(j=>{\"use strict\";var je=j&&j.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(j,\"__esModule\",{value:!0});j.nextPossibleTokensAfter=j.possiblePathsFrom=j.NextTerminalAfterAtLeastOneSepWalker=j.NextTerminalAfterAtLeastOneWalker=j.NextTerminalAfterManySepWalker=j.NextTerminalAfterManyWalker=j.AbstractNextTerminalAfterProductionWalker=j.NextAfterTokenWalker=j.AbstractNextPossibleTokensWalker=void 0;var Ei=Gt(),I=k(),Ko=Lr(),O=ne(),Ti=function(t){je(e,t);function e(r,n){var i=t.call(this)||this;return i.topProd=r,i.path=n,i.possibleTokTypes=[],i.nextProductionName=\"\",i.nextProductionOccurrence=0,i.found=!1,i.isAtEndOfPath=!1,i}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error(\"The path does not start with the walker's top Rule!\");return this.ruleStack=I.cloneArr(this.path.ruleStack).reverse(),this.occurrenceStack=I.cloneArr(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(r,n){n===void 0&&(n=[]),this.found||t.prototype.walk.call(this,r,n)},e.prototype.walkProdRef=function(r,n,i){if(r.referencedRule.name===this.nextProductionName&&r.idx===this.nextProductionOccurrence){var a=n.concat(i);this.updateExpectedNext(),this.walk(r.referencedRule,a)}},e.prototype.updateExpectedNext=function(){I.isEmpty(this.ruleStack)?(this.nextProductionName=\"\",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(Ei.RestWalker);j.AbstractNextPossibleTokensWalker=Ti;var zo=function(t){je(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.path=n,i.nextTerminalName=\"\",i.nextTerminalOccurrence=0,i.nextTerminalName=i.path.lastTok.name,i.nextTerminalOccurrence=i.path.lastTokOccurrence,i}return e.prototype.walkTerminal=function(r,n,i){if(this.isAtEndOfPath&&r.terminalType.name===this.nextTerminalName&&r.idx===this.nextTerminalOccurrence&&!this.found){var a=n.concat(i),o=new O.Alternative({definition:a});this.possibleTokTypes=Ko.first(o),this.found=!0}},e}(Ti);j.NextAfterTokenWalker=zo;var Et=function(t){je(e,t);function e(r,n){var i=t.call(this)||this;return i.topRule=r,i.occurrence=n,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}(Ei.RestWalker);j.AbstractNextTerminalAfterProductionWalker=Et;var Ho=function(t){je(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkMany=function(r,n,i){if(r.idx===this.occurrence){var a=I.first(n.concat(i));this.result.isEndOfRule=a===void 0,a instanceof O.Terminal&&(this.result.token=a.terminalType,this.result.occurrence=a.idx)}else t.prototype.walkMany.call(this,r,n,i)},e}(Et);j.NextTerminalAfterManyWalker=Ho;var Yo=function(t){je(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkManySep=function(r,n,i){if(r.idx===this.occurrence){var a=I.first(n.concat(i));this.result.isEndOfRule=a===void 0,a instanceof O.Terminal&&(this.result.token=a.terminalType,this.result.occurrence=a.idx)}else t.prototype.walkManySep.call(this,r,n,i)},e}(Et);j.NextTerminalAfterManySepWalker=Yo;var Xo=function(t){je(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(r,n,i){if(r.idx===this.occurrence){var a=I.first(n.concat(i));this.result.isEndOfRule=a===void 0,a instanceof O.Terminal&&(this.result.token=a.terminalType,this.result.occurrence=a.idx)}else t.prototype.walkAtLeastOne.call(this,r,n,i)},e}(Et);j.NextTerminalAfterAtLeastOneWalker=Xo;var $o=function(t){je(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(r,n,i){if(r.idx===this.occurrence){var a=I.first(n.concat(i));this.result.isEndOfRule=a===void 0,a instanceof O.Terminal&&(this.result.token=a.terminalType,this.result.occurrence=a.idx)}else t.prototype.walkAtLeastOneSep.call(this,r,n,i)},e}(Et);j.NextTerminalAfterAtLeastOneSepWalker=$o;function yi(t,e,r){r===void 0&&(r=[]),r=I.cloneArr(r);var n=[],i=0;function a(f){return f.concat(I.drop(t,i+1))}function o(f){var p=yi(a(f),e,r);return n.concat(p)}for(;r.length<e&&i<t.length;){var s=t[i];if(s instanceof O.Alternative)return o(s.definition);if(s instanceof O.NonTerminal)return o(s.definition);if(s instanceof O.Option)n=o(s.definition);else if(s instanceof O.RepetitionMandatory){var c=s.definition.concat([new O.Repetition({definition:s.definition})]);return o(c)}else if(s instanceof O.RepetitionMandatoryWithSeparator){var c=[new O.Alternative({definition:s.definition}),new O.Repetition({definition:[new O.Terminal({terminalType:s.separator})].concat(s.definition)})];return o(c)}else if(s instanceof O.RepetitionWithSeparator){var c=s.definition.concat([new O.Repetition({definition:[new O.Terminal({terminalType:s.separator})].concat(s.definition)})]);n=o(c)}else if(s instanceof O.Repetition){var c=s.definition.concat([new O.Repetition({definition:s.definition})]);n=o(c)}else{if(s instanceof O.Alternation)return I.forEach(s.definition,function(f){I.isEmpty(f.definition)===!1&&(n=o(f.definition))}),n;if(s instanceof O.Terminal)r.push(s.terminalType);else throw Error(\"non exhaustive match\")}i++}return n.push({partialPath:r,suffixDef:I.drop(t,i)}),n}j.possiblePathsFrom=yi;function Qo(t,e,r,n){var i=\"EXIT_NONE_TERMINAL\",a=[i],o=\"EXIT_ALTERNATIVE\",s=!1,c=e.length,f=c-n-1,p=[],l=[];for(l.push({idx:-1,def:t,ruleStack:[],occurrenceStack:[]});!I.isEmpty(l);){var m=l.pop();if(m===o){s&&I.last(l).idx<=f&&l.pop();continue}var v=m.def,u=m.idx,d=m.ruleStack,A=m.occurrenceStack;if(!I.isEmpty(v)){var _=v[0];if(_===i){var g={idx:u,def:I.drop(v),ruleStack:I.dropRight(d),occurrenceStack:I.dropRight(A)};l.push(g)}else if(_ instanceof O.Terminal)if(u<c-1){var y=u+1,b=e[y];if(r(b,_.terminalType)){var g={idx:y,def:I.drop(v),ruleStack:d,occurrenceStack:A};l.push(g)}}else if(u===c-1)p.push({nextTokenType:_.terminalType,nextTokenOccurrence:_.idx,ruleStack:d,occurrenceStack:A}),s=!0;else throw Error(\"non exhaustive match\");else if(_ instanceof O.NonTerminal){var L=I.cloneArr(d);L.push(_.nonTerminalName);var se=I.cloneArr(A);se.push(_.idx);var g={idx:u,def:_.definition.concat(a,I.drop(v)),ruleStack:L,occurrenceStack:se};l.push(g)}else if(_ instanceof O.Option){var fe={idx:u,def:I.drop(v),ruleStack:d,occurrenceStack:A};l.push(fe),l.push(o);var Z={idx:u,def:_.definition.concat(I.drop(v)),ruleStack:d,occurrenceStack:A};l.push(Z)}else if(_ instanceof O.RepetitionMandatory){var ue=new O.Repetition({definition:_.definition,idx:_.idx}),Q=_.definition.concat([ue],I.drop(v)),g={idx:u,def:Q,ruleStack:d,occurrenceStack:A};l.push(g)}else if(_ instanceof O.RepetitionMandatoryWithSeparator){var te=new O.Terminal({terminalType:_.separator}),ue=new O.Repetition({definition:[te].concat(_.definition),idx:_.idx}),Q=_.definition.concat([ue],I.drop(v)),g={idx:u,def:Q,ruleStack:d,occurrenceStack:A};l.push(g)}else if(_ instanceof O.RepetitionWithSeparator){var fe={idx:u,def:I.drop(v),ruleStack:d,occurrenceStack:A};l.push(fe),l.push(o);var te=new O.Terminal({terminalType:_.separator}),xe=new O.Repetition({definition:[te].concat(_.definition),idx:_.idx}),Q=_.definition.concat([xe],I.drop(v)),Z={idx:u,def:Q,ruleStack:d,occurrenceStack:A};l.push(Z)}else if(_ instanceof O.Repetition){var fe={idx:u,def:I.drop(v),ruleStack:d,occurrenceStack:A};l.push(fe),l.push(o);var xe=new O.Repetition({definition:_.definition,idx:_.idx}),Q=_.definition.concat([xe],I.drop(v)),Z={idx:u,def:Q,ruleStack:d,occurrenceStack:A};l.push(Z)}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(I.drop(v)),ruleStack:d,occurrenceStack:A};l.push(Ke),l.push(o)}else if(_ instanceof O.Alternative)l.push({idx:u,def:_.definition.concat(I.drop(v)),ruleStack:d,occurrenceStack:A});else if(_ instanceof O.Rule)l.push(Zo(_,u,d,A));else throw Error(\"non exhaustive match\")}}return p}j.nextPossibleTokensAfter=Qo;function Zo(t,e,r,n){var i=I.cloneArr(r);i.push(t.name);var a=I.cloneArr(n);return a.push(1),{idx:e,def:t.definition,ruleStack:i,occurrenceStack:a}}});var yt=R(C=>{\"use strict\";var _i=C&&C.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(C,\"__esModule\",{value:!0});C.areTokenCategoriesNotUsed=C.isStrictPrefixOfPath=C.containsPath=C.getLookaheadPathsForOptionalProd=C.getLookaheadPathsForOr=C.lookAheadSequenceFromAlternatives=C.buildSingleAlternativeLookaheadFunction=C.buildAlternativesLookAheadFunc=C.buildLookaheadFuncForOptionalProd=C.buildLookaheadFuncForOr=C.getProdType=C.PROD_TYPE=void 0;var D=k(),gi=Tt(),Jo=Gt(),Kt=Xe(),We=ne(),es=$e(),z;(function(t){t[t.OPTION=0]=\"OPTION\",t[t.REPETITION=1]=\"REPETITION\",t[t.REPETITION_MANDATORY=2]=\"REPETITION_MANDATORY\",t[t.REPETITION_MANDATORY_WITH_SEPARATOR=3]=\"REPETITION_MANDATORY_WITH_SEPARATOR\",t[t.REPETITION_WITH_SEPARATOR=4]=\"REPETITION_WITH_SEPARATOR\",t[t.ALTERNATION=5]=\"ALTERNATION\"})(z=C.PROD_TYPE||(C.PROD_TYPE={}));function ts(t){if(t instanceof We.Option)return z.OPTION;if(t instanceof We.Repetition)return z.REPETITION;if(t instanceof We.RepetitionMandatory)return z.REPETITION_MANDATORY;if(t instanceof We.RepetitionMandatoryWithSeparator)return z.REPETITION_MANDATORY_WITH_SEPARATOR;if(t instanceof We.RepetitionWithSeparator)return z.REPETITION_WITH_SEPARATOR;if(t instanceof We.Alternation)return z.ALTERNATION;throw Error(\"non exhaustive match\")}C.getProdType=ts;function rs(t,e,r,n,i,a){var o=Ai(t,e,r),s=Fr(o)?Kt.tokenStructuredMatcherNoCategories:Kt.tokenStructuredMatcher;return a(o,n,s,i)}C.buildLookaheadFuncForOr=rs;function ns(t,e,r,n,i,a){var o=Ri(t,e,i,r),s=Fr(o)?Kt.tokenStructuredMatcherNoCategories:Kt.tokenStructuredMatcher;return a(o[0],s,n)}C.buildLookaheadFuncForOptionalProd=ns;function is(t,e,r,n){var i=t.length,a=D.every(t,function(c){return D.every(c,function(f){return f.length===1})});if(e)return function(c){for(var f=D.map(c,function(y){return y.GATE}),p=0;p<i;p++){var l=t[p],m=l.length,v=f[p];if(v!==void 0&&v.call(this)===!1)continue;e:for(var u=0;u<m;u++){for(var d=l[u],A=d.length,_=0;_<A;_++){var g=this.LA(_+1);if(r(g,d[_])===!1)continue e}return p}}};if(a&&!n){var o=D.map(t,function(c){return D.flatten(c)}),s=D.reduce(o,function(c,f,p){return D.forEach(f,function(l){D.has(c,l.tokenTypeIdx)||(c[l.tokenTypeIdx]=p),D.forEach(l.categoryMatches,function(m){D.has(c,m)||(c[m]=p)})}),c},[]);return function(){var c=this.LA(1);return s[c.tokenTypeIdx]}}else return function(){for(var c=0;c<i;c++){var f=t[c],p=f.length;e:for(var l=0;l<p;l++){for(var m=f[l],v=m.length,u=0;u<v;u++){var d=this.LA(u+1);if(r(d,m[u])===!1)continue e}return c}}}}C.buildAlternativesLookAheadFunc=is;function as(t,e,r){var n=D.every(t,function(f){return f.length===1}),i=t.length;if(n&&!r){var a=D.flatten(t);if(a.length===1&&D.isEmpty(a[0].categoryMatches)){var o=a[0],s=o.tokenTypeIdx;return function(){return this.LA(1).tokenTypeIdx===s}}else{var c=D.reduce(a,function(f,p,l){return f[p.tokenTypeIdx]=!0,D.forEach(p.categoryMatches,function(m){f[m]=!0}),f},[]);return function(){var f=this.LA(1);return c[f.tokenTypeIdx]===!0}}}else return function(){e:for(var f=0;f<i;f++){for(var p=t[f],l=p.length,m=0;m<l;m++){var v=this.LA(m+1);if(e(v,p[m])===!1)continue e}return!0}return!1}}C.buildSingleAlternativeLookaheadFunction=as;var os=function(t){_i(e,t);function e(r,n,i){var a=t.call(this)||this;return a.topProd=r,a.targetOccurrence=n,a.targetProdType=i,a}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.restDef},e.prototype.checkIsTarget=function(r,n,i,a){return r.idx===this.targetOccurrence&&this.targetProdType===n?(this.restDef=i.concat(a),!0):!1},e.prototype.walkOption=function(r,n,i){this.checkIsTarget(r,z.OPTION,n,i)||t.prototype.walkOption.call(this,r,n,i)},e.prototype.walkAtLeastOne=function(r,n,i){this.checkIsTarget(r,z.REPETITION_MANDATORY,n,i)||t.prototype.walkOption.call(this,r,n,i)},e.prototype.walkAtLeastOneSep=function(r,n,i){this.checkIsTarget(r,z.REPETITION_MANDATORY_WITH_SEPARATOR,n,i)||t.prototype.walkOption.call(this,r,n,i)},e.prototype.walkMany=function(r,n,i){this.checkIsTarget(r,z.REPETITION,n,i)||t.prototype.walkOption.call(this,r,n,i)},e.prototype.walkManySep=function(r,n,i){this.checkIsTarget(r,z.REPETITION_WITH_SEPARATOR,n,i)||t.prototype.walkOption.call(this,r,n,i)},e}(Jo.RestWalker),Oi=function(t){_i(e,t);function e(r,n,i){var a=t.call(this)||this;return a.targetOccurrence=r,a.targetProdType=n,a.targetRef=i,a.result=[],a}return e.prototype.checkIsTarget=function(r,n){r.idx===this.targetOccurrence&&this.targetProdType===n&&(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(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}function wr(t){for(var e=[\"\"],r=0;r<t.length;r++){for(var n=t[r],i=[],a=0;a<e.length;a++){var o=e[a];i.push(o+\"_\"+n.tokenTypeIdx);for(var s=0;s<n.categoryMatches.length;s++){var c=\"_\"+n.categoryMatches[s];i.push(o+c)}}e=i}return e}function ss(t,e,r){for(var n=0;n<t.length;n++)if(n!==r)for(var i=t[n],a=0;a<e.length;a++){var o=e[a];if(i[o]===!0)return!1}return!0}function Dr(t,e){for(var r=D.map(t,function(p){return gi.possiblePathsFrom([p],1)}),n=Ni(r.length),i=D.map(r,function(p){var l={};return D.forEach(p,function(m){var v=wr(m.partialPath);D.forEach(v,function(u){l[u]=!0})}),l}),a=r,o=1;o<=e;o++){var s=a;a=Ni(s.length);for(var c=function(p){for(var l=s[p],m=0;m<l.length;m++){var v=l[m].partialPath,u=l[m].suffixDef,d=wr(v),A=ss(i,d,p);if(A||D.isEmpty(u)||v.length===e){var _=n[p];if(Ii(_,v)===!1){_.push(v);for(var g=0;g<d.length;g++){var y=d[g];i[p][y]=!0}}}else{var b=gi.possiblePathsFrom(u,o+1,v);a[p]=a[p].concat(b),D.forEach(b,function(L){var se=wr(L.partialPath);D.forEach(se,function(fe){i[p][fe]=!0})})}}},f=0;f<s.length;f++)c(f)}return n}C.lookAheadSequenceFromAlternatives=Dr;function Ai(t,e,r,n){var i=new Oi(t,z.ALTERNATION,n);return e.accept(i),Dr(i.result,r)}C.getLookaheadPathsForOr=Ai;function Ri(t,e,r,n){var i=new Oi(t,r);e.accept(i);var a=i.result,o=new os(e,t,r),s=o.startWalking(),c=new We.Alternative({definition:a}),f=new We.Alternative({definition:s});return Dr([c,f],n)}C.getLookaheadPathsForOptionalProd=Ri;function Ii(t,e){e:for(var r=0;r<t.length;r++){var n=t[r];if(n.length===e.length){for(var i=0;i<n.length;i++){var a=e[i],o=n[i],s=a===o||o.categoryMatchesMap[a.tokenTypeIdx]!==void 0;if(s===!1)continue e}return!0}}return!1}C.containsPath=Ii;function us(t,e){return t.length<e.length&&D.every(t,function(r,n){var i=e[n];return r===i||i.categoryMatchesMap[r.tokenTypeIdx]})}C.isStrictPrefixOfPath=us;function Fr(t){return D.every(t,function(e){return D.every(e,function(r){return D.every(r,function(n){return D.isEmpty(n.categoryMatches)})})})}C.areTokenCategoriesNotUsed=Fr});var jr=R(x=>{\"use strict\";var Ur=x&&x.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(x,\"__esModule\",{value:!0});x.checkPrefixAlternativesAmbiguities=x.validateSomeNonEmptyLookaheadPath=x.validateTooManyAlts=x.RepetionCollector=x.validateAmbiguousAlternationAlternatives=x.validateEmptyOrAlternative=x.getFirstNoneTerminal=x.validateNoLeftRecursion=x.validateRuleIsOverridden=x.validateRuleDoesNotAlreadyExist=x.OccurrenceValidationCollector=x.identifyProductionForDuplicates=x.validateGrammar=void 0;var M=k(),B=k(),Ie=ce(),Gr=vt(),Qe=yt(),cs=Tt(),_e=ne(),Wr=$e();function ps(t,e,r,n,i){var a=M.map(t,function(v){return ls(v,n)}),o=M.map(t,function(v){return Br(v,v,n)}),s=[],c=[],f=[];B.every(o,B.isEmpty)&&(s=B.map(t,function(v){return Pi(v,n)}),c=B.map(t,function(v){return Si(v,e,n)}),f=Ci(t,e,n));var p=fs(t,r,n),l=B.map(t,function(v){return xi(v,n)}),m=B.map(t,function(v){return ki(v,t,i,n)});return M.flatten(a.concat(f,o,s,c,p,l,m))}x.validateGrammar=ps;function ls(t,e){var r=new bi;t.accept(r);var n=r.allProductions,i=M.groupBy(n,Li),a=M.pick(i,function(s){return s.length>1}),o=M.map(M.values(a),function(s){var c=M.first(s),f=e.buildDuplicateFoundError(t,s),p=Gr.getProductionDslName(c),l={message:f,type:Ie.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:t.name,dslName:p,occurrence:c.idx},m=Mi(c);return m&&(l.parameter=m),l});return o}function Li(t){return Gr.getProductionDslName(t)+\"_#_\"+t.idx+\"_#_\"+Mi(t)}x.identifyProductionForDuplicates=Li;function Mi(t){return t instanceof _e.Terminal?t.terminalType.name:t instanceof _e.NonTerminal?t.nonTerminalName:\"\"}var bi=function(t){Ur(e,t);function e(){var r=t!==null&&t.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);x.OccurrenceValidationCollector=bi;function ki(t,e,r,n){var i=[],a=B.reduce(e,function(s,c){return c.name===t.name?s+1:s},0);if(a>1){var o=n.buildDuplicateRuleNameError({topLevelRule:t,grammarName:r});i.push({message:o,type:Ie.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:t.name})}return i}x.validateRuleDoesNotAlreadyExist=ki;function hs(t,e,r){var n=[],i;return M.contains(e,t)||(i=\"Invalid rule override, rule: ->\"+t+\"<- cannot be overridden in the grammar: ->\"+r+\"<-as it is not defined in any of the super grammars \",n.push({message:i,type:Ie.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:t})),n}x.validateRuleIsOverridden=hs;function Br(t,e,r,n){n===void 0&&(n=[]);var i=[],a=_t(e.definition);if(M.isEmpty(a))return[];var o=t.name,s=M.contains(a,t);s&&i.push({message:r.buildLeftRecursionError({topLevelRule:t,leftRecursionPath:n}),type:Ie.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var c=M.difference(a,n.concat([t])),f=M.map(c,function(p){var l=M.cloneArr(n);return l.push(p),Br(t,p,r,l)});return i.concat(M.flatten(f))}x.validateNoLeftRecursion=Br;function _t(t){var e=[];if(M.isEmpty(t))return e;var r=M.first(t);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 n=Gr.isOptionalProd(r),i=t.length>1;if(n&&i){var a=M.drop(t);return e.concat(_t(a))}else return e}x.getFirstNoneTerminal=_t;var qr=function(t){Ur(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.alternations=[],r}return e.prototype.visitAlternation=function(r){this.alternations.push(r)},e}(Wr.GAstVisitor);function Pi(t,e){var r=new qr;t.accept(r);var n=r.alternations,i=M.reduce(n,function(a,o){var s=M.dropRight(o.definition),c=M.map(s,function(f,p){var l=cs.nextPossibleTokensAfter([f],[],null,1);return M.isEmpty(l)?{message:e.buildEmptyAlternationError({topLevelRule:t,alternation:o,emptyChoiceIdx:p}),type:Ie.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:t.name,occurrence:o.idx,alternative:p+1}:null});return a.concat(M.compact(c))},[]);return i}x.validateEmptyOrAlternative=Pi;function Si(t,e,r){var n=new qr;t.accept(n);var i=n.alternations;i=B.reject(i,function(o){return o.ignoreAmbiguities===!0});var a=M.reduce(i,function(o,s){var c=s.idx,f=s.maxLookahead||e,p=Qe.getLookaheadPathsForOr(c,t,f,s),l=ds(p,s,t,r),m=Fi(p,s,t,r);return o.concat(l,m)},[]);return a}x.validateAmbiguousAlternationAlternatives=Si;var wi=function(t){Ur(e,t);function e(){var r=t!==null&&t.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);x.RepetionCollector=wi;function xi(t,e){var r=new qr;t.accept(r);var n=r.alternations,i=M.reduce(n,function(a,o){return o.definition.length>255&&a.push({message:e.buildTooManyAlternativesError({topLevelRule:t,alternation:o}),type:Ie.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:t.name,occurrence:o.idx}),a},[]);return i}x.validateTooManyAlts=xi;function Ci(t,e,r){var n=[];return B.forEach(t,function(i){var a=new wi;i.accept(a);var o=a.allProductions;B.forEach(o,function(s){var c=Qe.getProdType(s),f=s.maxLookahead||e,p=s.idx,l=Qe.getLookaheadPathsForOptionalProd(p,i,c,f),m=l[0];if(B.isEmpty(B.flatten(m))){var v=r.buildEmptyRepetitionError({topLevelRule:i,repetition:s});n.push({message:v,type:Ie.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:i.name})}})}),n}x.validateSomeNonEmptyLookaheadPath=Ci;function ds(t,e,r,n){var i=[],a=B.reduce(t,function(s,c,f){return e.definition[f].ignoreAmbiguities===!0||B.forEach(c,function(p){var l=[f];B.forEach(t,function(m,v){f!==v&&Qe.containsPath(m,p)&&e.definition[v].ignoreAmbiguities!==!0&&l.push(v)}),l.length>1&&!Qe.containsPath(i,p)&&(i.push(p),s.push({alts:l,path:p}))}),s},[]),o=M.map(a,function(s){var c=B.map(s.alts,function(p){return p+1}),f=n.buildAlternationAmbiguityError({topLevelRule:r,alternation:e,ambiguityIndices:c,prefixPath:s.path});return{message:f,type:Ie.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:r.name,occurrence:e.idx,alternatives:[s.alts]}});return o}function Fi(t,e,r,n){var i=[],a=B.reduce(t,function(o,s,c){var f=B.map(s,function(p){return{idx:c,path:p}});return o.concat(f)},[]);return B.forEach(a,function(o){var s=e.definition[o.idx];if(s.ignoreAmbiguities!==!0){var c=o.idx,f=o.path,p=B.findAll(a,function(m){return e.definition[m.idx].ignoreAmbiguities!==!0&&m.idx<c&&Qe.isStrictPrefixOfPath(m.path,f)}),l=B.map(p,function(m){var v=[m.idx+1,c+1],u=e.idx===0?\"\":e.idx,d=n.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(l)}}),i}x.checkPrefixAlternativesAmbiguities=Fi;function fs(t,e,r){var n=[],i=B.map(e,function(a){return a.name});return B.forEach(t,function(a){var o=a.name;if(B.contains(i,o)){var s=r.buildNamespaceConflictError(a);n.push({message:s,type:Ie.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,ruleName:o})}}),n}});var Ui=R(Je=>{\"use strict\";Object.defineProperty(Je,\"__esModule\",{value:!0});Je.validateGrammar=Je.resolveGrammar=void 0;var Vr=k(),vs=mi(),ms=jr(),Di=mt();function Es(t){t=Vr.defaults(t,{errMsgProvider:Di.defaultGrammarResolverErrorProvider});var e={};return Vr.forEach(t.rules,function(r){e[r.name]=r}),vs.resolveGrammar(e,t.errMsgProvider)}Je.resolveGrammar=Es;function Ts(t){return t=Vr.defaults(t,{errMsgProvider:Di.defaultGrammarValidatorErrorProvider}),ms.validateGrammar(t.rules,t.maxLookahead,t.tokenTypes,t.errMsgProvider,t.grammarName)}Je.validateGrammar=Ts});var et=R(ae=>{\"use strict\";var gt=ae&&ae.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(ae,\"__esModule\",{value:!0});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(t){return ys.contains(ji,t.name)}ae.isRecognitionException=_s;var zt=function(t){gt(e,t);function e(r,n){var i=this.constructor,a=t.call(this,r)||this;return a.token=n,a.resyncedTokens=[],Object.setPrototypeOf(a,i.prototype),Error.captureStackTrace&&Error.captureStackTrace(a,a.constructor),a}return e}(Error),gs=function(t){gt(e,t);function e(r,n,i){var a=t.call(this,r,n)||this;return a.previousToken=i,a.name=Gi,a}return e}(zt);ae.MismatchedTokenException=gs;var As=function(t){gt(e,t);function e(r,n,i){var a=t.call(this,r,n)||this;return a.previousToken=i,a.name=Wi,a}return e}(zt);ae.NoViableAltException=As;var Rs=function(t){gt(e,t);function e(r,n){var i=t.call(this,r,n)||this;return i.name=qi,i}return e}(zt);ae.NotAllInputParsedException=Rs;var Os=function(t){gt(e,t);function e(r,n,i){var a=t.call(this,r,n)||this;return a.previousToken=i,a.name=Bi,a}return e}(zt);ae.EarlyExitException=Os});var zr=R($=>{\"use strict\";Object.defineProperty($,\"__esModule\",{value:!0});$.attemptInRepetitionRecovery=$.Recoverable=$.InRuleRecoveryException=$.IN_RULE_RECOVERY_EXCEPTION=$.EOF_FOLLOW_KEY=void 0;var Ht=Ue(),de=k(),Ns=et(),Is=Mr(),ks=ce();$.EOF_FOLLOW_KEY={};$.IN_RULE_RECOVERY_EXCEPTION=\"InRuleRecoveryException\";function Kr(t){this.name=$.IN_RULE_RECOVERY_EXCEPTION,this.message=t}$.InRuleRecoveryException=Kr;Kr.prototype=Error.prototype;var Ps=function(){function t(){}return t.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=de.has(e,\"recoveryEnabled\")?e.recoveryEnabled:ks.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=Vi)},t.prototype.getTokenToInsert=function(e){var r=Ht.createTokenInstance(e,\"\",NaN,NaN,NaN,NaN,NaN,NaN);return r.isInsertedInRecovery=!0,r},t.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},t.prototype.tryInRepetitionRecovery=function(e,r,n,i){for(var a=this,o=this.findReSyncTokenType(),s=this.exportLexerState(),c=[],f=!1,p=this.LA(1),l=this.LA(1),m=function(){var v=a.LA(0),u=a.errorMessageProvider.buildMismatchTokenMessage({expected:i,actual:p,previous:v,ruleName:a.getCurrRuleFullName()}),d=new Ns.MismatchedTokenException(u,p,a.LA(0));d.resyncedTokens=de.dropRight(c),a.SAVE_ERROR(d)};!f;)if(this.tokenMatcher(l,i)){m();return}else if(n.call(this)){m(),e.apply(this,r);return}else this.tokenMatcher(l,o)?f=!0:(l=this.SKIP_TOKEN(),this.addToResyncTokens(l,c));this.importLexerState(s)},t.prototype.shouldInRepetitionRecoveryBeTried=function(e,r,n){return!(n===!1||e===void 0||r===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,r)))},t.prototype.getFollowsForInRuleRecovery=function(e,r){var n=this.getCurrentGrammarPath(e,r),i=this.getNextPossibleTokenTypes(n);return i},t.prototype.tryInRuleRecovery=function(e,r){if(this.canRecoverWithSingleTokenInsertion(e,r)){var n=this.getTokenToInsert(e);return n}if(this.canRecoverWithSingleTokenDeletion(e)){var i=this.SKIP_TOKEN();return this.consumeToken(),i}throw new Kr(\"sad sad panda\")},t.prototype.canPerformInRuleRecovery=function(e,r){return this.canRecoverWithSingleTokenInsertion(e,r)||this.canRecoverWithSingleTokenDeletion(e)},t.prototype.canRecoverWithSingleTokenInsertion=function(e,r){var n=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||de.isEmpty(r))return!1;var i=this.LA(1),a=de.find(r,function(o){return n.tokenMatcher(i,o)})!==void 0;return a},t.prototype.canRecoverWithSingleTokenDeletion=function(e){var r=this.tokenMatcher(this.LA(2),e);return r},t.prototype.isInCurrentRuleReSyncSet=function(e){var r=this.getCurrFollowKey(),n=this.getFollowSetFromFollowKey(r);return de.contains(n,e)},t.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),r=this.LA(1),n=2;;){var i=r.tokenType;if(de.contains(e,i))return i;r=this.LA(n),n++}},t.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return $.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),r=this.getLastExplicitRuleOccurrenceIndex(),n=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:r,inRule:this.shortRuleNameToFullName(n)}},t.prototype.buildFullFollowKeyStack=function(){var e=this,r=this.RULE_STACK,n=this.RULE_OCCURRENCE_STACK;return de.map(r,function(i,a){return a===0?$.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(i),idxInCallingRule:n[a],inRule:e.shortRuleNameToFullName(r[a-1])}})},t.prototype.flattenFollowSet=function(){var e=this,r=de.map(this.buildFullFollowKeyStack(),function(n){return e.getFollowSetFromFollowKey(n)});return de.flatten(r)},t.prototype.getFollowSetFromFollowKey=function(e){if(e===$.EOF_FOLLOW_KEY)return[Ht.EOF];var r=e.ruleName+e.idxInCallingRule+Is.IN+e.inRule;return this.resyncFollows[r]},t.prototype.addToResyncTokens=function(e,r){return this.tokenMatcher(e,Ht.EOF)||r.push(e),r},t.prototype.reSyncTo=function(e){for(var r=[],n=this.LA(1);this.tokenMatcher(n,e)===!1;)n=this.SKIP_TOKEN(),this.addToResyncTokens(n,r);return de.dropRight(r)},t.prototype.attemptInRepetitionRecovery=function(e,r,n,i,a,o,s){},t.prototype.getCurrentGrammarPath=function(e,r){var n=this.getHumanReadableRuleStack(),i=de.cloneArr(this.RULE_OCCURRENCE_STACK),a={ruleStack:n,occurrenceStack:i,lastTok:e,lastTokOccurrence:r};return a},t.prototype.getHumanReadableRuleStack=function(){var e=this;return de.map(this.RULE_STACK,function(r){return e.shortRuleNameToFullName(r)})},t}();$.Recoverable=Ps;function Vi(t,e,r,n,i,a,o){var s=this.getKeyForAutomaticLookahead(n,i),c=this.firstAfterRepMap[s];if(c===void 0){var f=this.getCurrRuleFullName(),p=this.getGAstProductions()[f],l=new a(p,i);c=l.startWalking(),this.firstAfterRepMap[s]=c}var m=c.token,v=c.occurrence,u=c.isEndOfRule;this.RULE_STACK.length===1&&u&&m===void 0&&(m=Ht.EOF,v=1),this.shouldInRepetitionRecoveryBeTried(m,v,o)&&this.tryInRepetitionRecovery(t,e,r,m)}$.attemptInRepetitionRecovery=Vi});var Yt=R(P=>{\"use strict\";Object.defineProperty(P,\"__esModule\",{value:!0});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(t,e,r){return r|e|t}P.getKeyForAutomaticLookahead=Ss;var ic=32-P.BITS_FOR_ALT_IDX});var zi=R(Xt=>{\"use strict\";Object.defineProperty(Xt,\"__esModule\",{value:!0});Xt.LooksAhead=void 0;var be=yt(),ge=k(),Ki=ce(),Fe=Yt(),Ve=vt(),xs=function(){function t(){}return t.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()?new Map:[],ge.isES2015MapSupported()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},t.prototype.preComputeLookaheadFunctions=function(e){var r=this;ge.forEach(e,function(n){r.TRACE_INIT(n.name+\" Rule Lookahead\",function(){var i=Ve.collectMethods(n),a=i.alternation,o=i.repetition,s=i.option,c=i.repetitionMandatory,f=i.repetitionMandatoryWithSeparator,p=i.repetitionWithSeparator;ge.forEach(a,function(l){var m=l.idx===0?\"\":l.idx;r.TRACE_INIT(\"\"+Ve.getProductionDslName(l)+m,function(){var v=be.buildLookaheadFuncForOr(l.idx,n,l.maxLookahead||r.maxLookahead,l.hasPredicates,r.dynamicTokensEnabled,r.lookAheadBuilderForAlternatives),u=Fe.getKeyForAutomaticLookahead(r.fullRuleNameToShort[n.name],Fe.OR_IDX,l.idx);r.setLaFuncCache(u,v)})}),ge.forEach(o,function(l){r.computeLookaheadFunc(n,l.idx,Fe.MANY_IDX,be.PROD_TYPE.REPETITION,l.maxLookahead,Ve.getProductionDslName(l))}),ge.forEach(s,function(l){r.computeLookaheadFunc(n,l.idx,Fe.OPTION_IDX,be.PROD_TYPE.OPTION,l.maxLookahead,Ve.getProductionDslName(l))}),ge.forEach(c,function(l){r.computeLookaheadFunc(n,l.idx,Fe.AT_LEAST_ONE_IDX,be.PROD_TYPE.REPETITION_MANDATORY,l.maxLookahead,Ve.getProductionDslName(l))}),ge.forEach(f,function(l){r.computeLookaheadFunc(n,l.idx,Fe.AT_LEAST_ONE_SEP_IDX,be.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,l.maxLookahead,Ve.getProductionDslName(l))}),ge.forEach(p,function(l){r.computeLookaheadFunc(n,l.idx,Fe.MANY_SEP_IDX,be.PROD_TYPE.REPETITION_WITH_SEPARATOR,l.maxLookahead,Ve.getProductionDslName(l))})})})},t.prototype.computeLookaheadFunc=function(e,r,n,i,a,o){var s=this;this.TRACE_INIT(\"\"+o+(r===0?\"\":r),function(){var c=be.buildLookaheadFuncForOptionalProd(r,e,a||s.maxLookahead,s.dynamicTokensEnabled,i,s.lookAheadBuilderForOptional),f=Fe.getKeyForAutomaticLookahead(s.fullRuleNameToShort[e.name],n,r);s.setLaFuncCache(f,c)})},t.prototype.lookAheadBuilderForOptional=function(e,r,n){return be.buildSingleAlternativeLookaheadFunction(e,r,n)},t.prototype.lookAheadBuilderForAlternatives=function(e,r,n,i){return be.buildAlternativesLookAheadFunc(e,r,n,i)},t.prototype.getKeyForAutomaticLookahead=function(e,r){var n=this.getLastExplicitRuleShortName();return Fe.getKeyForAutomaticLookahead(n,e,r)},t.prototype.getLaFuncFromCache=function(e){},t.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},t.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},t.prototype.setLaFuncCache=function(e,r){},t.prototype.setLaFuncCacheUsingMap=function(e,r){this.lookAheadFuncsCache.set(e,r)},t.prototype.setLaFuncUsingObj=function(e,r){this.lookAheadFuncsCache[e]=r},t}();Xt.LooksAhead=xs});var Hi=R(ke=>{\"use strict\";Object.defineProperty(ke,\"__esModule\",{value:!0});ke.addNoneTerminalToCst=ke.addTerminalToCst=ke.setNodeLocationFull=ke.setNodeLocationOnlyOffset=void 0;function Cs(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.endOffset=e.endOffset):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset)}ke.setNodeLocationOnlyOffset=Cs;function Ls(t,e){isNaN(t.startOffset)===!0?(t.startOffset=e.startOffset,t.startColumn=e.startColumn,t.startLine=e.startLine,t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine):t.endOffset<e.endOffset&&(t.endOffset=e.endOffset,t.endColumn=e.endColumn,t.endLine=e.endLine)}ke.setNodeLocationFull=Ls;function Ms(t,e,r){t.children[r]===void 0?t.children[r]=[e]:t.children[r].push(e)}ke.addTerminalToCst=Ms;function bs(t,e,r){t.children[e]===void 0?t.children[e]=[r]:t.children[e].push(r)}ke.addNoneTerminalToCst=bs});var Hr=R(Be=>{\"use strict\";Object.defineProperty(Be,\"__esModule\",{value:!0});Be.defineNameProp=Be.functionName=Be.classNameFromInstance=void 0;var Fs=k();function ws(t){return Yi(t.constructor)}Be.classNameFromInstance=ws;var Xi=\"name\";function Yi(t){var e=t.name;return e||\"anonymous\"}Be.functionName=Yi;function Ds(t,e){var r=Object.getOwnPropertyDescriptor(t,Xi);return Fs.isUndefined(r)||r.configurable?(Object.defineProperty(t,Xi,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}Be.defineNameProp=Ds});var ea=R(Y=>{\"use strict\";Object.defineProperty(Y,\"__esModule\",{value:!0});Y.validateRedundantMethods=Y.validateMissingCstMethods=Y.validateVisitor=Y.CstVisitorDefinitionError=Y.createBaseVisitorConstructorWithDefaults=Y.createBaseSemanticVisitorConstructor=Y.defaultVisit=void 0;var ve=k(),At=Hr();function $i(t,e){for(var r=ve.keys(t),n=r.length,i=0;i<n;i++)for(var a=r[i],o=t[a],s=o.length,c=0;c<s;c++){var f=o[c];f.tokenTypeIdx===void 0&&this[f.name](f.children,e)}}Y.defaultVisit=$i;function Us(t,e){var r=function(){};At.defineNameProp(r,t+\"BaseSemantics\");var n={visit:function(i,a){if(ve.isArray(i)&&(i=i[0]),!ve.isUndefined(i))return this[i.name](i.children,a)},validateVisitor:function(){var i=Zi(this,e);if(!ve.isEmpty(i)){var a=ve.map(i,function(o){return o.msg});throw Error(\"Errors Detected in CST Visitor <\"+At.functionName(this.constructor)+`>:\n\t`+(\"\"+a.join(`\n\n`).replace(/\\n/g,`\n\t`)))}}};return r.prototype=n,r.prototype.constructor=r,r._RULE_NAMES=e,r}Y.createBaseSemanticVisitorConstructor=Us;function Gs(t,e,r){var n=function(){};At.defineNameProp(n,t+\"BaseSemanticsWithDefaults\");var i=Object.create(r.prototype);return ve.forEach(e,function(a){i[a]=$i}),n.prototype=i,n.prototype.constructor=n,n}Y.createBaseVisitorConstructorWithDefaults=Gs;var Yr;(function(t){t[t.REDUNDANT_METHOD=0]=\"REDUNDANT_METHOD\",t[t.MISSING_METHOD=1]=\"MISSING_METHOD\"})(Yr=Y.CstVisitorDefinitionError||(Y.CstVisitorDefinitionError={}));function Zi(t,e){var r=Qi(t,e),n=Ji(t,e);return r.concat(n)}Y.validateVisitor=Zi;function Qi(t,e){var r=ve.map(e,function(n){if(!ve.isFunction(t[n]))return{msg:\"Missing visitor method: <\"+n+\"> on \"+At.functionName(t.constructor)+\" CST Visitor.\",type:Yr.MISSING_METHOD,methodName:n}});return ve.compact(r)}Y.validateMissingCstMethods=Qi;var Ws=[\"constructor\",\"visit\",\"validateVisitor\"];function Ji(t,e){var r=[];for(var n in t)ve.isFunction(t[n])&&!ve.contains(Ws,n)&&!ve.contains(e,n)&&r.push({msg:\"Redundant visitor method: <\"+n+\"> on \"+At.functionName(t.constructor)+` CST Visitor\nThere is no Grammar Rule corresponding to this method's name.\n`,type:Yr.REDUNDANT_METHOD,methodName:n});return r}Y.validateRedundantMethods=Ji});var ra=R($t=>{\"use strict\";Object.defineProperty($t,\"__esModule\",{value:!0});$t.TreeBuilder=void 0;var tt=Hi(),K=k(),ta=ea(),Bs=ce(),qs=function(){function t(){}return t.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 <nodeLocationTracking> config option: \"'+e.nodeLocationTracking+'\"')},t.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},t.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},t.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},t.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}},t.prototype.cstInvocationStateUpdate=function(e,r){var n={name:e,children:{}};this.setInitialNodeLocation(n),this.CST_STACK.push(n)},t.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},t.prototype.cstPostRuleFull=function(e){var r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?(n.endOffset=r.endOffset,n.endLine=r.endLine,n.endColumn=r.endColumn):(n.startOffset=NaN,n.startLine=NaN,n.startColumn=NaN)},t.prototype.cstPostRuleOnlyOffset=function(e){var r=this.LA(0),n=e.location;n.startOffset<=r.startOffset?n.endOffset=r.endOffset:n.startOffset=NaN},t.prototype.cstPostTerminal=function(e,r){var n=this.CST_STACK[this.CST_STACK.length-1];tt.addTerminalToCst(n,r,e),this.setNodeLocationFromToken(n.location,r)},t.prototype.cstPostNonTerminal=function(e,r){var n=this.CST_STACK[this.CST_STACK.length-1];tt.addNoneTerminalToCst(n,r,e),this.setNodeLocationFromNode(n.location,e.location)},t.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},t.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},t.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},t.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},t.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},t}();$t.TreeBuilder=qs});var ia=R(Zt=>{\"use strict\";Object.defineProperty(Zt,\"__esModule\",{value:!0});Zt.LexerAdapter=void 0;var na=ce(),js=function(){function t(){}return t.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(t.prototype,\"input\",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),t.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):na.END_OF_FILE},t.prototype.LA=function(e){var r=this.currIdx+e;return r<0||this.tokVectorLength<=r?na.END_OF_FILE:this.tokVector[r]},t.prototype.consumeToken=function(){this.currIdx++},t.prototype.exportLexerState=function(){return this.currIdx},t.prototype.importLexerState=function(e){this.currIdx=e},t.prototype.resetLexerState=function(){this.currIdx=-1},t.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},t.prototype.getLexerPosition=function(){return this.exportLexerState()},t}();Zt.LexerAdapter=js});var oa=R(Qt=>{\"use strict\";Object.defineProperty(Qt,\"__esModule\",{value:!0});Qt.RecognizerApi=void 0;var aa=k(),Vs=et(),Xr=ce(),Ks=mt(),zs=jr(),Hs=ne(),Ys=function(){function t(){}return t.prototype.ACTION=function(e){return e.call(this)},t.prototype.consume=function(e,r,n){return this.consumeInternal(r,e,n)},t.prototype.subrule=function(e,r,n){return this.subruleInternal(r,e,n)},t.prototype.option=function(e,r){return this.optionInternal(r,e)},t.prototype.or=function(e,r){return this.orInternal(r,e)},t.prototype.many=function(e,r){return this.manyInternal(e,r)},t.prototype.atLeastOne=function(e,r){return this.atLeastOneInternal(e,r)},t.prototype.CONSUME=function(e,r){return this.consumeInternal(e,0,r)},t.prototype.CONSUME1=function(e,r){return this.consumeInternal(e,1,r)},t.prototype.CONSUME2=function(e,r){return this.consumeInternal(e,2,r)},t.prototype.CONSUME3=function(e,r){return this.consumeInternal(e,3,r)},t.prototype.CONSUME4=function(e,r){return this.consumeInternal(e,4,r)},t.prototype.CONSUME5=function(e,r){return this.consumeInternal(e,5,r)},t.prototype.CONSUME6=function(e,r){return this.consumeInternal(e,6,r)},t.prototype.CONSUME7=function(e,r){return this.consumeInternal(e,7,r)},t.prototype.CONSUME8=function(e,r){return this.consumeInternal(e,8,r)},t.prototype.CONSUME9=function(e,r){return this.consumeInternal(e,9,r)},t.prototype.SUBRULE=function(e,r){return this.subruleInternal(e,0,r)},t.prototype.SUBRULE1=function(e,r){return this.subruleInternal(e,1,r)},t.prototype.SUBRULE2=function(e,r){return this.subruleInternal(e,2,r)},t.prototype.SUBRULE3=function(e,r){return this.subruleInternal(e,3,r)},t.prototype.SUBRULE4=function(e,r){return this.subruleInternal(e,4,r)},t.prototype.SUBRULE5=function(e,r){return this.subruleInternal(e,5,r)},t.prototype.SUBRULE6=function(e,r){return this.subruleInternal(e,6,r)},t.prototype.SUBRULE7=function(e,r){return this.subruleInternal(e,7,r)},t.prototype.SUBRULE8=function(e,r){return this.subruleInternal(e,8,r)},t.prototype.SUBRULE9=function(e,r){return this.subruleInternal(e,9,r)},t.prototype.OPTION=function(e){return this.optionInternal(e,0)},t.prototype.OPTION1=function(e){return this.optionInternal(e,1)},t.prototype.OPTION2=function(e){return this.optionInternal(e,2)},t.prototype.OPTION3=function(e){return this.optionInternal(e,3)},t.prototype.OPTION4=function(e){return this.optionInternal(e,4)},t.prototype.OPTION5=function(e){return this.optionInternal(e,5)},t.prototype.OPTION6=function(e){return this.optionInternal(e,6)},t.prototype.OPTION7=function(e){return this.optionInternal(e,7)},t.prototype.OPTION8=function(e){return this.optionInternal(e,8)},t.prototype.OPTION9=function(e){return this.optionInternal(e,9)},t.prototype.OR=function(e){return this.orInternal(e,0)},t.prototype.OR1=function(e){return this.orInternal(e,1)},t.prototype.OR2=function(e){return this.orInternal(e,2)},t.prototype.OR3=function(e){return this.orInternal(e,3)},t.prototype.OR4=function(e){return this.orInternal(e,4)},t.prototype.OR5=function(e){return this.orInternal(e,5)},t.prototype.OR6=function(e){return this.orInternal(e,6)},t.prototype.OR7=function(e){return this.orInternal(e,7)},t.prototype.OR8=function(e){return this.orInternal(e,8)},t.prototype.OR9=function(e){return this.orInternal(e,9)},t.prototype.MANY=function(e){this.manyInternal(0,e)},t.prototype.MANY1=function(e){this.manyInternal(1,e)},t.prototype.MANY2=function(e){this.manyInternal(2,e)},t.prototype.MANY3=function(e){this.manyInternal(3,e)},t.prototype.MANY4=function(e){this.manyInternal(4,e)},t.prototype.MANY5=function(e){this.manyInternal(5,e)},t.prototype.MANY6=function(e){this.manyInternal(6,e)},t.prototype.MANY7=function(e){this.manyInternal(7,e)},t.prototype.MANY8=function(e){this.manyInternal(8,e)},t.prototype.MANY9=function(e){this.manyInternal(9,e)},t.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},t.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},t.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},t.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},t.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},t.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},t.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},t.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},t.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},t.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},t.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},t.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},t.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},t.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},t.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},t.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},t.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},t.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},t.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},t.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},t.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},t.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},t.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},t.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},t.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},t.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},t.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},t.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},t.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},t.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},t.prototype.RULE=function(e,r,n){if(n===void 0&&(n=Xr.DEFAULT_RULE_CONFIG),aa.contains(this.definedRulesNames,e)){var i=Ks.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),a={message:i,type:Xr.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(a)}this.definedRulesNames.push(e);var o=this.defineRule(e,r,n);return this[e]=o,o},t.prototype.OVERRIDE_RULE=function(e,r,n){n===void 0&&(n=Xr.DEFAULT_RULE_CONFIG);var i=[];i=i.concat(zs.validateRuleIsOverridden(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(i);var a=this.defineRule(e,r,n);return this[e]=a,a},t.prototype.BACKTRACK=function(e,r){return function(){this.isBackTrackingStack.push(1);var n=this.saveRecogState();try{return e.apply(this,r),!0}catch(i){if(Vs.isRecognitionException(i))return!1;throw i}finally{this.reloadRecogState(n),this.isBackTrackingStack.pop()}}},t.prototype.getGAstProductions=function(){return this.gastProductionsCache},t.prototype.getSerializedGastProductions=function(){return Hs.serializeGrammar(aa.values(this.gastProductionsCache))},t}();Qt.RecognizerApi=Ys});var la=R(Jt=>{\"use strict\";Object.defineProperty(Jt,\"__esModule\",{value:!0});Jt.RecognizerEngine=void 0;var q=k(),le=Yt(),er=et(),sa=yt(),rt=Tt(),ua=ce(),Xs=zr(),ca=Ue(),Rt=Xe(),$s=Hr(),Zs=function(){function t(){}return t.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={},q.has(r,\"serializedGrammar\"))throw Error(`The Parser's configuration can no longer contain a <serializedGrammar> property.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n\tFor Further details.`);if(q.isArray(e)){if(q.isEmpty(e))throw Error(`A Token Vocabulary cannot be empty.\n\tNote that the first argument for the parser constructor\n\tis 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.\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n\tFor Further details.`)}if(q.isArray(e))this.tokensMap=q.reduce(e,function(o,s){return o[s.name]=s,o},{});else if(q.has(e,\"modes\")&&q.every(q.flatten(q.values(e.modes)),Rt.isTokenType)){var n=q.flatten(q.values(e.modes)),i=q.uniq(n);this.tokensMap=q.reduce(i,function(o,s){return o[s.name]=s,o},{})}else if(q.isObject(e))this.tokensMap=q.cloneObj(e);else throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\");this.tokensMap.EOF=ca.EOF;var a=q.every(q.values(e),function(o){return q.isEmpty(o.categoryMatches)});this.tokenMatcher=a?Rt.tokenStructuredMatcherNoCategories:Rt.tokenStructuredMatcher,Rt.augmentTokenTypes(q.values(this.tokensMap))},t.prototype.defineRule=function(e,r,n){if(this.selfAnalysisDone)throw Error(\"Grammar rule <\"+e+`> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var i=q.has(n,\"resyncEnabled\")?n.resyncEnabled:ua.DEFAULT_RULE_CONFIG.resyncEnabled,a=q.has(n,\"recoveryValueFunc\")?n.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(p){try{if(this.outputCst===!0){r.apply(this,p);var l=this.CST_STACK[this.CST_STACK.length-1];return this.cstPostRule(l),l}else return r.apply(this,p)}catch(m){return this.invokeRuleCatch(m,i,a)}finally{this.ruleFinallyStateUpdate()}}var c=function(p,l){return p===void 0&&(p=0),this.ruleInvocationStateUpdate(o,e,p),s.call(this,l)},f=\"ruleName\";return c[f]=e,c.originalGrammarAction=r,c},t.prototype.invokeRuleCatch=function(e,r,n){var i=this.RULE_STACK.length===1,a=r&&!this.isBackTracking()&&this.recoveryEnabled;if(er.isRecognitionException(e)){var o=e;if(a){var s=this.findReSyncTokenType();if(this.isInCurrentRuleReSyncSet(s))if(o.resyncedTokens=this.reSyncTo(s),this.outputCst){var c=this.CST_STACK[this.CST_STACK.length-1];return c.recoveredNode=!0,c}else return n();else{if(this.outputCst){var c=this.CST_STACK[this.CST_STACK.length-1];c.recoveredNode=!0,o.partialCstResult=c}throw o}}else{if(i)return this.moveToTerminatedState(),n();throw o}}else throw e},t.prototype.optionInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.OPTION_IDX,r);return this.optionInternalLogic(e,r,n)},t.prototype.optionInternalLogic=function(e,r,n){var i=this,a=this.getLaFuncFromCache(n),o,s;if(e.DEF!==void 0){if(o=e.DEF,s=e.GATE,s!==void 0){var c=a;a=function(){return s.call(i)&&c.call(i)}}}else o=e;if(a.call(this)===!0)return o.call(this)},t.prototype.atLeastOneInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_IDX,e);return this.atLeastOneInternalLogic(e,r,n)},t.prototype.atLeastOneInternalLogic=function(e,r,n){var i=this,a=this.getLaFuncFromCache(n),o,s;if(r.DEF!==void 0){if(o=r.DEF,s=r.GATE,s!==void 0){var c=a;a=function(){return s.call(i)&&c.call(i)}}}else o=r;if(a.call(this)===!0)for(var f=this.doSingleRepetition(o);a.call(this)===!0&&f===!0;)f=this.doSingleRepetition(o);else throw this.raiseEarlyExitException(e,sa.PROD_TYPE.REPETITION_MANDATORY,r.ERR_MSG);this.attemptInRepetitionRecovery(this.atLeastOneInternal,[e,r],a,le.AT_LEAST_ONE_IDX,e,rt.NextTerminalAfterAtLeastOneWalker)},t.prototype.atLeastOneSepFirstInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.AT_LEAST_ONE_SEP_IDX,e);this.atLeastOneSepFirstInternalLogic(e,r,n)},t.prototype.atLeastOneSepFirstInternalLogic=function(e,r,n){var i=this,a=r.DEF,o=r.SEP,s=this.getLaFuncFromCache(n);if(s.call(this)===!0){a.call(this);for(var c=function(){return i.tokenMatcher(i.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),a.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,c,a,rt.NextTerminalAfterAtLeastOneSepWalker],c,le.AT_LEAST_ONE_SEP_IDX,e,rt.NextTerminalAfterAtLeastOneSepWalker)}else throw this.raiseEarlyExitException(e,sa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,r.ERR_MSG)},t.prototype.manyInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.MANY_IDX,e);return this.manyInternalLogic(e,r,n)},t.prototype.manyInternalLogic=function(e,r,n){var i=this,a=this.getLaFuncFromCache(n),o,s;if(r.DEF!==void 0){if(o=r.DEF,s=r.GATE,s!==void 0){var c=a;a=function(){return s.call(i)&&c.call(i)}}}else o=r;for(var f=!0;a.call(this)===!0&&f===!0;)f=this.doSingleRepetition(o);this.attemptInRepetitionRecovery(this.manyInternal,[e,r],a,le.MANY_IDX,e,rt.NextTerminalAfterManyWalker,f)},t.prototype.manySepFirstInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.MANY_SEP_IDX,e);this.manySepFirstInternalLogic(e,r,n)},t.prototype.manySepFirstInternalLogic=function(e,r,n){var i=this,a=r.DEF,o=r.SEP,s=this.getLaFuncFromCache(n);if(s.call(this)===!0){a.call(this);for(var c=function(){return i.tokenMatcher(i.LA(1),o)};this.tokenMatcher(this.LA(1),o)===!0;)this.CONSUME(o),a.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,o,c,a,rt.NextTerminalAfterManySepWalker],c,le.MANY_SEP_IDX,e,rt.NextTerminalAfterManySepWalker)}},t.prototype.repetitionSepSecondInternal=function(e,r,n,i,a){for(;n();)this.CONSUME(r),i.call(this);this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal,[e,r,n,i,a],n,le.AT_LEAST_ONE_SEP_IDX,e,a)},t.prototype.doSingleRepetition=function(e){var r=this.getLexerPosition();e.call(this);var n=this.getLexerPosition();return n>r},t.prototype.orInternal=function(e,r){var n=this.getKeyForAutomaticLookahead(le.OR_IDX,r),i=q.isArray(e)?e:e.DEF,a=this.getLaFuncFromCache(n),o=a.call(this,i);if(o!==void 0){var s=i[o];return s.ALT.call(this)}this.raiseNoAltException(r,e.ERR_MSG)},t.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),r=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new er.NotAllInputParsedException(r,e))}},t.prototype.subruleInternal=function(e,r,n){var i;try{var a=n!==void 0?n.ARGS:void 0;return i=e.call(this,r,a),this.cstPostNonTerminal(i,n!==void 0&&n.LABEL!==void 0?n.LABEL:e.ruleName),i}catch(o){this.subruleInternalError(o,n,e.ruleName)}},t.prototype.subruleInternalError=function(e,r,n){throw er.isRecognitionException(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,r!==void 0&&r.LABEL!==void 0?r.LABEL:n),delete e.partialCstResult),e},t.prototype.consumeInternal=function(e,r,n){var i;try{var a=this.LA(1);this.tokenMatcher(a,e)===!0?(this.consumeToken(),i=a):this.consumeInternalError(e,a,n)}catch(o){i=this.consumeInternalRecovery(e,r,o)}return this.cstPostTerminal(n!==void 0&&n.LABEL!==void 0?n.LABEL:e.name,i),i},t.prototype.consumeInternalError=function(e,r,n){var i,a=this.LA(0);throw n!==void 0&&n.ERR_MSG?i=n.ERR_MSG:i=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:r,previous:a,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new er.MismatchedTokenException(i,r,a))},t.prototype.consumeInternalRecovery=function(e,r,n){if(this.recoveryEnabled&&n.name===\"MismatchedTokenException\"&&!this.isBackTracking()){var i=this.getFollowsForInRuleRecovery(e,r);try{return this.tryInRuleRecovery(e,i)}catch(a){throw a.name===Xs.IN_RULE_RECOVERY_EXCEPTION?n:a}}else throw n},t.prototype.saveRecogState=function(){var e=this.errors,r=q.cloneArr(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:r,CST_STACK:this.CST_STACK}},t.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},t.prototype.ruleInvocationStateUpdate=function(e,r,n){this.RULE_OCCURRENCE_STACK.push(n),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(r,e)},t.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},t.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},t.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},t.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),ca.EOF)},t.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},t}();Jt.RecognizerEngine=Zs});var pa=R(tr=>{\"use strict\";Object.defineProperty(tr,\"__esModule\",{value:!0});tr.ErrorHandler=void 0;var $r=et(),Zr=k(),fa=yt(),Qs=ce(),Js=function(){function t(){}return t.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=Zr.has(e,\"errorMessageProvider\")?e.errorMessageProvider:Qs.DEFAULT_PARSER_CONFIG.errorMessageProvider},t.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(t.prototype,\"errors\",{get:function(){return Zr.cloneArr(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),t.prototype.raiseEarlyExitException=function(e,r,n){for(var i=this.getCurrRuleFullName(),a=this.getGAstProductions()[i],o=fa.getLookaheadPathsForOptionalProd(e,a,r,this.maxLookahead),s=o[0],c=[],f=1;f<=this.maxLookahead;f++)c.push(this.LA(f));var p=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:s,actual:c,previous:this.LA(0),customUserDescription:n,ruleName:i});throw this.SAVE_ERROR(new $r.EarlyExitException(p,this.LA(1),this.LA(0)))},t.prototype.raiseNoAltException=function(e,r){for(var n=this.getCurrRuleFullName(),i=this.getGAstProductions()[n],a=fa.getLookaheadPathsForOr(e,i,this.maxLookahead),o=[],s=1;s<=this.maxLookahead;s++)o.push(this.LA(s));var c=this.LA(0),f=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:a,actual:o,previous:c,customUserDescription:r,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new $r.NoViableAltException(f,this.LA(1),c))},t}();tr.ErrorHandler=Js});var va=R(rr=>{\"use strict\";Object.defineProperty(rr,\"__esModule\",{value:!0});rr.ContentAssist=void 0;var ha=Tt(),da=k(),eu=function(){function t(){}return t.prototype.initContentAssist=function(){},t.prototype.computeContentAssist=function(e,r){var n=this.gastProductionsCache[e];if(da.isUndefined(n))throw Error(\"Rule ->\"+e+\"<- does not exist in this grammar.\");return ha.nextPossibleTokensAfter([n],r,this.tokenMatcher,this.maxLookahead)},t.prototype.getNextPossibleTokenTypes=function(e){var r=da.first(e.ruleStack),n=this.getGAstProductions(),i=n[r],a=new ha.NextAfterTokenWalker(i,e).startWalking();return a},t}();rr.ContentAssist=eu});var Ra=R(nr=>{\"use strict\";Object.defineProperty(nr,\"__esModule\",{value:!0});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=!0,ya=Math.pow(2,nu.BITS_FOR_OCCURRENCE_IDX)-1,_a=Ea.createToken({name:\"RECORDING_PHASE_TOKEN\",pattern:tu.Lexer.NA});ma.augmentTokenTypes([_a]);var ga=Ea.createTokenInstance(_a,`This IToken indicates the Parser is in Recording Phase\n\tSee: 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\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},ou=function(){function t(){}return t.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},t.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT(\"Enable Recording\",function(){for(var r=function(i){var a=i>0?i:\"\";e[\"CONSUME\"+a]=function(o,s){return this.consumeInternalRecord(o,i,s)},e[\"SUBRULE\"+a]=function(o,s){return this.subruleInternalRecord(o,i,s)},e[\"OPTION\"+a]=function(o){return this.optionInternalRecord(o,i)},e[\"OR\"+a]=function(o){return this.orInternalRecord(o,i)},e[\"MANY\"+a]=function(o){this.manyInternalRecord(i,o)},e[\"MANY_SEP\"+a]=function(o){this.manySepFirstInternalRecord(i,o)},e[\"AT_LEAST_ONE\"+a]=function(o){this.atLeastOneInternalRecord(i,o)},e[\"AT_LEAST_ONE_SEP\"+a]=function(o){this.atLeastOneSepFirstInternalRecord(i,o)}},n=0;n<10;n++)r(n);e.consume=function(i,a,o){return this.consumeInternalRecord(a,i,o)},e.subrule=function(i,a,o){return this.subruleInternalRecord(a,i,o)},e.option=function(i,a){return this.optionInternalRecord(a,i)},e.or=function(i,a){return this.orInternalRecord(a,i)},e.many=function(i,a){this.manyInternalRecord(i,a)},e.atLeastOne=function(i,a){this.atLeastOneInternalRecord(i,a)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},t.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT(\"Deleting Recording methods\",function(){for(var r=0;r<10;r++){var n=r>0?r:\"\";delete e[\"CONSUME\"+n],delete e[\"SUBRULE\"+n],delete e[\"OPTION\"+n],delete e[\"OR\"+n],delete e[\"MANY\"+n],delete e[\"MANY_SEP\"+n],delete e[\"AT_LEAST_ONE\"+n],delete e[\"AT_LEAST_ONE_SEP\"+n]}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})},t.prototype.ACTION_RECORD=function(e){},t.prototype.BACKTRACK_RECORD=function(e,r){return function(){return!0}},t.prototype.LA_RECORD=function(e){return ru.END_OF_FILE},t.prototype.topLevelRuleRecord=function(e,r){try{var n=new Pe.Rule({definition:[],name:e});return n.name=e,this.recordingProdStack.push(n),r.call(this),this.recordingProdStack.pop(),n}catch(i){if(i.KNOWN_RECORDER_ERROR!==!0)try{i.message=i.message+`\n\t This error was thrown during the \"grammar recording phase\" For more info see:\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch(a){throw i}throw i}},t.prototype.optionInternalRecord=function(e,r){return Ot.call(this,Pe.Option,e,r)},t.prototype.atLeastOneInternalRecord=function(e,r){Ot.call(this,Pe.RepetitionMandatory,r,e)},t.prototype.atLeastOneSepFirstInternalRecord=function(e,r){Ot.call(this,Pe.RepetitionMandatoryWithSeparator,r,e,Ta)},t.prototype.manyInternalRecord=function(e,r){Ot.call(this,Pe.Repetition,r,e)},t.prototype.manySepFirstInternalRecord=function(e,r){Ot.call(this,Pe.RepetitionWithSeparator,r,e,Ta)},t.prototype.orInternalRecord=function(e,r){return au.call(this,e,r)},t.prototype.subruleInternalRecord=function(e,r,n){if(ar(r),!e||oe.has(e,\"ruleName\")===!1){var i=new Error(\"<SUBRULE\"+Aa(r)+\"> argument is invalid\"+(\" expecting a Parser method reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw i.KNOWN_RECORDER_ERROR=!0,i}var a=oe.peek(this.recordingProdStack),o=e.ruleName,s=new Pe.NonTerminal({idx:r,nonTerminalName:o,referencedRule:void 0});return a.definition.push(s),this.outputCst?iu:ir},t.prototype.consumeInternalRecord=function(e,r,n){if(ar(r),!ma.hasShortKeyProperty(e)){var i=new Error(\"<CONSUME\"+Aa(r)+\"> argument is invalid\"+(\" expecting a TokenType reference but got: <\"+JSON.stringify(e)+\">\")+(`\n inside top level rule: <`+this.recordingProdStack[0].name+\">\"));throw i.KNOWN_RECORDER_ERROR=!0,i}var a=oe.peek(this.recordingProdStack),o=new Pe.Terminal({idx:r,terminalType:e});return a.definition.push(o),ga},t}();nr.GastRecorder=ou;function Ot(t,e,r,n){n===void 0&&(n=!1),ar(r);var i=oe.peek(this.recordingProdStack),a=oe.isFunction(e)?e:e.DEF,o=new t({definition:[],idx:r});return n&&(o.separator=e.SEP),oe.has(e,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),a.call(this),i.definition.push(o),this.recordingProdStack.pop(),ir}function au(t,e){var r=this;ar(e);var n=oe.peek(this.recordingProdStack),i=oe.isArray(t)===!1,a=i===!1?t:t.DEF,o=new Pe.Alternation({definition:[],idx:e,ignoreAmbiguities:i&&t.IGNORE_AMBIGUITIES===!0});oe.has(t,\"MAX_LOOKAHEAD\")&&(o.maxLookahead=t.MAX_LOOKAHEAD);var s=oe.some(a,function(c){return oe.isFunction(c.GATE)});return o.hasPredicates=s,n.definition.push(o),oe.forEach(a,function(c){var f=new Pe.Alternative({definition:[]});o.definition.push(f),oe.has(c,\"IGNORE_AMBIGUITIES\")?f.ignoreAmbiguities=c.IGNORE_AMBIGUITIES:oe.has(c,\"GATE\")&&(f.ignoreAmbiguities=!0),r.recordingProdStack.push(f),c.ALT.call(r),r.recordingProdStack.pop()}),ir}function Aa(t){return t===0?\"\":\"\"+t}function ar(t){if(t<0||t>ya){var e=new Error(\"Invalid DSL Method idx value: <\"+t+`>\n\t`+(\"Idx value must be a none negative value smaller than \"+(ya+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var Na=R(or=>{\"use strict\";Object.defineProperty(or,\"__esModule\",{value:!0});or.PerformanceTracer=void 0;var Oa=k(),su=ce(),uu=function(){function t(){}return t.prototype.initPerformanceTracer=function(e){if(Oa.has(e,\"traceInitPerf\")){var r=e.traceInitPerf,n=typeof r==\"number\";this.traceInitMaxIdent=n?r:Infinity,this.traceInitPerf=n?r>0:r}else this.traceInitMaxIdent=0,this.traceInitPerf=su.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},t.prototype.TRACE_INIT=function(e,r){if(this.traceInitPerf===!0){this.traceInitIndent++;var n=new Array(this.traceInitIndent+1).join(\"\t\");this.traceInitIndent<this.traceInitMaxIdent&&console.log(n+\"--> <\"+e+\">\");var i=Oa.timer(r),a=i.time,o=i.value,s=a>10?console.warn:console.log;return this.traceInitIndent<this.traceInitMaxIdent&&s(n+\"<-- <\"+e+\"> time: \"+a+\"ms\"),this.traceInitIndent--,o}else return r()},t}();or.PerformanceTracer=uu});var Ia=R(sr=>{\"use strict\";Object.defineProperty(sr,\"__esModule\",{value:!0});sr.applyMixins=void 0;function cu(t,e){e.forEach(function(r){var n=r.prototype;Object.getOwnPropertyNames(n).forEach(function(i){if(i!==\"constructor\"){var a=Object.getOwnPropertyDescriptor(n,i);a&&(a.get||a.set)?Object.defineProperty(t.prototype,i,a):t.prototype[i]=r.prototype[i]}})})}sr.applyMixins=cu});var ce=R(U=>{\"use strict\";var ka=U&&U.__extends||function(){var t=function(e,r){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])},t(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\");t(e,r);function n(){this.constructor=e}e.prototype=r===null?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(U,\"__esModule\",{value:!0});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=zi(),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:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:Sa.defaultParserErrorProvider,nodeLocationTracking:\"none\",traceInitPerf:!1,skipValidations:!1});U.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var Au;(function(t){t[t.INVALID_RULE_NAME=0]=\"INVALID_RULE_NAME\",t[t.DUPLICATE_RULE_NAME=1]=\"DUPLICATE_RULE_NAME\",t[t.INVALID_RULE_OVERRIDE=2]=\"INVALID_RULE_OVERRIDE\",t[t.DUPLICATE_PRODUCTIONS=3]=\"DUPLICATE_PRODUCTIONS\",t[t.UNRESOLVED_SUBRULE_REF=4]=\"UNRESOLVED_SUBRULE_REF\",t[t.LEFT_RECURSION=5]=\"LEFT_RECURSION\",t[t.NONE_LAST_EMPTY_ALT=6]=\"NONE_LAST_EMPTY_ALT\",t[t.AMBIGUOUS_ALTS=7]=\"AMBIGUOUS_ALTS\",t[t.CONFLICT_TOKENS_RULES_NAMESPACE=8]=\"CONFLICT_TOKENS_RULES_NAMESPACE\",t[t.INVALID_TOKEN_NAME=9]=\"INVALID_TOKEN_NAME\",t[t.NO_NON_EMPTY_LOOKAHEAD=10]=\"NO_NON_EMPTY_LOOKAHEAD\",t[t.AMBIGUOUS_PREFIX_ALTS=11]=\"AMBIGUOUS_PREFIX_ALTS\",t[t.TOO_MANY_ALTS=12]=\"TOO_MANY_ALTS\"})(Au=U.ParserDefinitionErrorType||(U.ParserDefinitionErrorType={}));function Ru(t){return t===void 0&&(t=void 0),function(){return t}}U.EMPTY_ALT=Ru;var ur=function(){function t(e,r){this.definitionErrors=[],this.selfAnalysisDone=!1;var n=this;if(n.initErrorHandler(r),n.initLexerAdapter(),n.initLooksAhead(r),n.initRecognizerEngine(e,r),n.initRecoverable(r),n.initTreeBuilder(r),n.initContentAssist(),n.initGastRecorder(r),n.initPerformanceTracer(r),ee.has(r,\"ignoredIssues\"))throw new Error(`The <ignoredIssues> IParserConfig property has been deprecated.\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\tFor further details.`);this.skipValidations=ee.has(r,\"skipValidations\")?r.skipValidations:U.DEFAULT_PARSER_CONFIG.skipValidations}return t.performSelfAnalysis=function(e){throw Error(\"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\")},t.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT(\"performSelfAnalysis\",function(){var r;e.selfAnalysisDone=!0;var n=e.className;e.TRACE_INIT(\"toFastProps\",function(){ee.toFastProperties(e)}),e.TRACE_INIT(\"Grammar Recording\",function(){try{e.enableRecording(),ee.forEach(e.definedRulesNames,function(a){var o=e[a],s=o.originalGrammarAction,c=void 0;e.TRACE_INIT(a+\" Rule\",function(){c=e.topLevelRuleRecord(a,s)}),e.gastProductionsCache[a]=c})}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===!1){var a=xa.validateGrammar({rules:ee.values(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:ee.values(e.tokensMap),errMsgProvider:Sa.defaultGrammarValidatorErrorProvider,grammarName:n});e.definitionErrors=e.definitionErrors.concat(a)}}),ee.isEmpty(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT(\"computeAllProdsFollows\",function(){var a=lu.computeAllProdsFollows(ee.values(e.gastProductionsCache));e.resyncFollows=a}),e.TRACE_INIT(\"ComputeLookaheadFunctions\",function(){e.preComputeLookaheadFunctions(ee.values(e.gastProductionsCache))})),!t.DEFER_DEFINITION_ERRORS_HANDLING&&!ee.isEmpty(e.definitionErrors))throw r=ee.map(e.definitionErrors,function(a){return a.message}),new Error(`Parser Definition Errors detected:\n `+r.join(`\n-------------------------------\n`))})},t.DEFER_DEFINITION_ERRORS_HANDLING=!1,t}();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(t){ka(e,t);function e(r,n){n===void 0&&(n=U.DEFAULT_PARSER_CONFIG);var i=this,a=ee.cloneObj(n);return a.outputCst=!0,i=t.call(this,r,a)||this,i}return e}(ur);U.CstParser=Ou;var Nu=function(t){ka(e,t);function e(r,n){n===void 0&&(n=U.DEFAULT_PARSER_CONFIG);var i=this,a=ee.cloneObj(n);return a.outputCst=!1,i=t.call(this,r,a)||this,i}return e}(ur);U.EmbeddedActionsParser=Nu});var La=R(cr=>{\"use strict\";Object.defineProperty(cr,\"__esModule\",{value:!0});cr.createSyntaxDiagramsCode=void 0;var Ca=Er();function Iu(t,e){var r=e===void 0?{}:e,n=r.resourceBase,i=n===void 0?\"https://unpkg.com/chevrotain@\"+Ca.VERSION+\"/diagrams/\":n,a=r.css,o=a===void 0?\"https://unpkg.com/chevrotain@\"+Ca.VERSION+\"/diagrams/diagrams.css\":a,s=`\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n body {\n background-color: hsl(30, 20%, 95%)\n }\n</style>\n\n`,c=`\n<link rel='stylesheet' href='`+o+`'>\n`,f=`\n<script src='`+i+`vendor/railroad-diagrams.js'></script>\n<script src='`+i+`src/diagrams_builder.js'></script>\n<script src='`+i+`src/diagrams_behavior.js'></script>\n<script src='`+i+`src/main.js'></script>\n`,p=`\n<div id=\"diagrams\" align=\"center\"></div>\n`,l=`\n<script>\n window.serializedGrammar = `+JSON.stringify(t,null,\" \")+`;\n</script>\n`,m=`\n<script>\n var diagramsDiv = document.getElementById(\"diagrams\");\n main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n</script>\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\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\\x2d\\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 ] );\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\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( { color: 0x000000 } );\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( { color: 0xffffff } );\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( { color: 0xffffff } );\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( { color: 0x000000 } );\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\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\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.emissiveColor = new Color( fieldValues[ 0 ], fieldValues[ 1 ], fieldValues[ 2 ] );\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.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\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}\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}\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\t\t\tif ( color ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\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}\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\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 );\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\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMatrix4,\n\tMesh,\n\tMeshStandardMaterial,\n\tShaderMaterial,\n\tSRGBColorSpace,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector3,\n\tRay\n} from 'three';\n\n// Special surface finish tag types.\n// Note: \"MATERIAL\" tag (e.g. GLITTER, SPECKLE) is not implemented\nconst FINISH_TYPE_DEFAULT = 0;\nconst FINISH_TYPE_CHROME = 1;\nconst FINISH_TYPE_PEARLESCENT = 2;\nconst FINISH_TYPE_RUBBER = 3;\nconst FINISH_TYPE_MATTE_METALLIC = 4;\nconst FINISH_TYPE_METAL = 5;\n\n// State machine to search a subobject path.\n// The LDraw standard establishes these various possible subfolders.\nconst FILE_LOCATION_TRY_PARTS = 0;\nconst FILE_LOCATION_TRY_P = 1;\nconst FILE_LOCATION_TRY_MODELS = 2;\nconst FILE_LOCATION_AS_IS = 3;\nconst FILE_LOCATION_TRY_RELATIVE = 4;\nconst FILE_LOCATION_TRY_ABSOLUTE = 5;\nconst FILE_LOCATION_NOT_FOUND = 6;\n\nconst MAIN_COLOUR_CODE = '16';\nconst MAIN_EDGE_COLOUR_CODE = '24';\n\nconst COLOR_SPACE_LDRAW = SRGBColorSpace;\n\nconst _tempVec0 = new Vector3();\nconst _tempVec1 = new Vector3();\n\nclass LDrawConditionalLineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tdiffuse: {\n\t\t\t\t\t\tvalue: new Color()\n\t\t\t\t\t},\n\t\t\t\t\topacity: {\n\t\t\t\t\t\tvalue: 1.0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: /* glsl */`\n\t\t\t\tattribute vec3 control0;\n\t\t\t\tattribute vec3 control1;\n\t\t\t\tattribute vec3 direction;\n\t\t\t\tvarying float discardFlag;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <color_pars_vertex>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t#include <clipping_planes_pars_vertex>\n\t\t\t\tvoid main() {\n\t\t\t\t\t#include <color_vertex>\n\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t\t// Transform the line segment ends and control points into camera clip space\n\t\t\t\t\tvec4 c0 = projectionMatrix * modelViewMatrix * vec4( control0, 1.0 );\n\t\t\t\t\tvec4 c1 = projectionMatrix * modelViewMatrix * vec4( control1, 1.0 );\n\t\t\t\t\tvec4 p0 = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tvec4 p1 = projectionMatrix * modelViewMatrix * vec4( position + direction, 1.0 );\n\n\t\t\t\t\tc0.xy /= c0.w;\n\t\t\t\t\tc1.xy /= c1.w;\n\t\t\t\t\tp0.xy /= p0.w;\n\t\t\t\t\tp1.xy /= p1.w;\n\n\t\t\t\t\t// Get the direction of the segment and an orthogonal vector\n\t\t\t\t\tvec2 dir = p1.xy - p0.xy;\n\t\t\t\t\tvec2 norm = vec2( -dir.y, dir.x );\n\n\t\t\t\t\t// Get control point directions from the line\n\t\t\t\t\tvec2 c0dir = c0.xy - p1.xy;\n\t\t\t\t\tvec2 c1dir = c1.xy - p1.xy;\n\n\t\t\t\t\t// If the vectors to the controls points are pointed in different directions away\n\t\t\t\t\t// from the line segment then the line should not be drawn.\n\t\t\t\t\tfloat d0 = dot( normalize( norm ), normalize( c0dir ) );\n\t\t\t\t\tfloat d1 = dot( normalize( norm ), normalize( c1dir ) );\n\t\t\t\t\tdiscardFlag = float( sign( d0 ) != sign( d1 ) );\n\n\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t#include <clipping_planes_vertex>\n\t\t\t\t\t#include <fog_vertex>\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\t\t\tuniform vec3 diffuse;\n\t\t\tuniform float opacity;\n\t\t\tvarying float discardFlag;\n\n\t\t\t#include <common>\n\t\t\t#include <color_pars_fragment>\n\t\t\t#include <fog_pars_fragment>\n\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t#include <clipping_planes_pars_fragment>\n\t\t\tvoid main() {\n\n\t\t\t\tif ( discardFlag > 0.5 ) discard;\n\n\t\t\t\t#include <clipping_planes_fragment>\n\t\t\t\tvec3 outgoingLight = vec3( 0.0 );\n\t\t\t\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t#include <color_fragment>\n\t\t\t\toutgoingLight = diffuseColor.rgb; // simple shader\n\t\t\t\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t#include <encodings_fragment>\n\t\t\t\t#include <fog_fragment>\n\t\t\t\t#include <premultiplied_alpha_fragment>\n\t\t\t}\n\t\t\t`,\n\n\t\t} );\n\n\t\tObject.defineProperties( this, {\n\n\t\t\topacity: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.opacity.value;\n\n\t\t\t\t},\n\n\t\t\t\tset: function ( value ) {\n\n\t\t\t\t\tthis.uniforms.opacity.value = value;\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcolor: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\treturn this.uniforms.diffuse.value;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\t\tthis.setValues( parameters );\n\t\tthis.isLDrawConditionalLineMaterial = true;\n\n\t}\n\n}\n\nclass ConditionalLineSegments extends LineSegments {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\t\tthis.isConditionalLine = true;\n\n\t}\n\n}\n\nfunction generateFaceNormals( faces ) {\n\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst face = faces[ i ];\n\t\tconst vertices = face.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\tconst v2 = vertices[ 2 ];\n\n\t\t_tempVec0.subVectors( v1, v0 );\n\t\t_tempVec1.subVectors( v2, v1 );\n\t\tface.faceNormal = new Vector3()\n\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t.normalize();\n\n\t}\n\n}\n\nconst _ray = new Ray();\nfunction smoothNormals( faces, lineSegments, checkSubSegments = false ) {\n\n\t// NOTE: 1e2 is pretty coarse but was chosen to quantize the resulting value because\n\t// it allows edges to be smoothed as expected (see minifig arms).\n\t// --\n\t// And the vector values are initialize multiplied by 1 + 1e-10 to account for floating\n\t// point errors on vertices along quantization boundaries. Ie after matrix multiplication\n\t// vertices that should be merged might be set to \"1.7\" and \"1.6999...\" meaning they won't\n\t// get merged. This added epsilon attempts to push these error values to the same quantized\n\t// value for the sake of hashing. See \"AT-ST mini\" dishes. See mrdoob/three#23169.\n\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\n\t\treturn `${ x },${ y },${ z }`;\n\n\t}\n\n\tfunction hashEdge( v0, v1 ) {\n\n\t\treturn `${ hashVertex( v0 ) }_${ hashVertex( v1 ) }`;\n\n\t}\n\n\t// converts the two vertices to a ray with a normalized direction and origin of 0, 0, 0 projected\n\t// onto the original line.\n\tfunction toNormalizedRay( v0, v1, targetRay ) {\n\n\t\ttargetRay.direction.subVectors( v1, v0 ).normalize();\n\n\t\tconst scalar = v0.dot( targetRay.direction );\n\t\ttargetRay.origin.copy( v0 ).addScaledVector( targetRay.direction, - scalar );\n\n\t\treturn targetRay;\n\n\t}\n\n\tfunction hashRay( ray ) {\n\n\t\treturn hashEdge( ray.origin, ray.direction );\n\n\t}\n\n\tconst hardEdges = new Set();\n\tconst hardEdgeRays = new Map();\n\tconst halfEdgeList = {};\n\tconst normals = [];\n\n\t// Save the list of hard edges by hash\n\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\tconst ls = lineSegments[ i ];\n\t\tconst vertices = ls.vertices;\n\t\tconst v0 = vertices[ 0 ];\n\t\tconst v1 = vertices[ 1 ];\n\t\thardEdges.add( hashEdge( v0, v1 ) );\n\t\thardEdges.add( hashEdge( v1, v0 ) );\n\n\t\t// only generate the hard edge ray map if we're checking subsegments because it's more expensive to check\n\t\t// and requires more memory.\n\t\tif ( checkSubSegments ) {\n\n\t\t\t// add both ray directions to the map\n\t\t\tconst ray = toNormalizedRay( v0, v1, new Ray() );\n\t\t\tconst rh1 = hashRay( ray );\n\t\t\tif ( ! hardEdgeRays.has( rh1 ) ) {\n\n\t\t\t\ttoNormalizedRay( v1, v0, ray );\n\t\t\t\tconst rh2 = hashRay( ray );\n\n\t\t\t\tconst info = {\n\t\t\t\t\tray,\n\t\t\t\t\tdistances: [],\n\t\t\t\t};\n\n\t\t\t\thardEdgeRays.set( rh1, info );\n\t\t\t\thardEdgeRays.set( rh2, info );\n\n\t\t\t}\n\n\t\t\t// store both segments ends in min, max order in the distances array to check if a face edge is a\n\t\t\t// subsegment later.\n\t\t\tconst info = hardEdgeRays.get( rh1 );\n\t\t\tlet d0 = info.ray.direction.dot( v0 );\n\t\t\tlet d1 = info.ray.direction.dot( v1 );\n\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t}\n\n\t\t\tinfo.distances.push( d0, d1 );\n\n\t\t}\n\n\t}\n\n\t// track the half edges associated with each triangle\n\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\tconst tri = faces[ i ];\n\t\tconst vertices = tri.vertices;\n\t\tconst vertCount = vertices.length;\n\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\tconst index = i2;\n\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\tconst v0 = vertices[ index ];\n\t\t\tconst v1 = vertices[ next ];\n\t\t\tconst hash = hashEdge( v0, v1 );\n\n\t\t\t// don't add the triangle if the edge is supposed to be hard\n\t\t\tif ( hardEdges.has( hash ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// if checking subsegments then check to see if this edge lies on a hard edge ray and whether its within any ray bounds\n\t\t\tif ( checkSubSegments ) {\n\n\t\t\t\ttoNormalizedRay( v0, v1, _ray );\n\n\t\t\t\tconst rayHash = hashRay( _ray );\n\t\t\t\tif ( hardEdgeRays.has( rayHash ) ) {\n\n\t\t\t\t\tconst info = hardEdgeRays.get( rayHash );\n\t\t\t\t\tconst { ray, distances } = info;\n\t\t\t\t\tlet d0 = ray.direction.dot( v0 );\n\t\t\t\t\tlet d1 = ray.direction.dot( v1 );\n\n\t\t\t\t\tif ( d0 > d1 ) {\n\n\t\t\t\t\t\t[ d0, d1 ] = [ d1, d0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// return early if the face edge is found to be a subsegment of a line edge meaning the edge will have \"hard\" normals\n\t\t\t\t\tlet found = false;\n\t\t\t\t\tfor ( let i = 0, l = distances.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\tif ( d0 >= distances[ i ] && d1 <= distances[ i + 1 ] ) {\n\n\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( found ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst info = {\n\t\t\t\tindex: index,\n\t\t\t\ttri: tri\n\t\t\t};\n\t\t\thalfEdgeList[ hash ] = info;\n\n\t\t}\n\n\t}\n\n\t// Iterate until we've tried to connect all faces to share normals\n\twhile ( true ) {\n\n\t\t// Stop if there are no more faces left\n\t\tlet halfEdge = null;\n\t\tfor ( const key in halfEdgeList ) {\n\n\t\t\thalfEdge = halfEdgeList[ key ];\n\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( halfEdge === null ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t\t// Exhaustively find all connected faces\n\t\tconst queue = [ halfEdge ];\n\t\twhile ( queue.length > 0 ) {\n\n\t\t\t// initialize all vertex normals in this triangle\n\t\t\tconst tri = queue.pop().tri;\n\t\t\tconst vertices = tri.vertices;\n\t\t\tconst vertNormals = tri.normals;\n\t\t\tconst faceNormal = tri.faceNormal;\n\n\t\t\t// Check if any edge is connected to another triangle edge\n\t\t\tconst vertCount = vertices.length;\n\t\t\tfor ( let i2 = 0; i2 < vertCount; i2 ++ ) {\n\n\t\t\t\tconst index = i2;\n\t\t\t\tconst next = ( i2 + 1 ) % vertCount;\n\t\t\t\tconst v0 = vertices[ index ];\n\t\t\t\tconst v1 = vertices[ next ];\n\n\t\t\t\t// delete this triangle from the list so it won't be found again\n\t\t\t\tconst hash = hashEdge( v0, v1 );\n\t\t\t\tdelete halfEdgeList[ hash ];\n\n\t\t\t\tconst reverseHash = hashEdge( v1, v0 );\n\t\t\t\tconst otherInfo = halfEdgeList[ reverseHash ];\n\t\t\t\tif ( otherInfo ) {\n\n\t\t\t\t\tconst otherTri = otherInfo.tri;\n\t\t\t\t\tconst otherIndex = otherInfo.index;\n\t\t\t\t\tconst otherNormals = otherTri.normals;\n\t\t\t\t\tconst otherVertCount = otherNormals.length;\n\t\t\t\t\tconst otherFaceNormal = otherTri.faceNormal;\n\n\t\t\t\t\t// NOTE: If the angle between faces is > 67.5 degrees then assume it's\n\t\t\t\t\t// hard edge. There are some cases where the line segments do not line up exactly\n\t\t\t\t\t// with or span multiple triangle edges (see Lunar Vehicle wheels).\n\t\t\t\t\tif ( Math.abs( otherTri.faceNormal.dot( tri.faceNormal ) ) < 0.25 ) {\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if this triangle has already been traversed then it won't be in\n\t\t\t\t\t// the halfEdgeList. If it has not then add it to the queue and delete\n\t\t\t\t\t// it so it won't be found again.\n\t\t\t\t\tif ( reverseHash in halfEdgeList ) {\n\n\t\t\t\t\t\tqueue.push( otherInfo );\n\t\t\t\t\t\tdelete halfEdgeList[ reverseHash ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the first normal\n\t\t\t\t\tconst otherNext = ( otherIndex + 1 ) % otherVertCount;\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ index ] && otherNormals[ otherNext ] &&\n\t\t\t\t\t\tvertNormals[ index ] !== otherNormals[ otherNext ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherNext ].norm.add( vertNormals[ index ].norm );\n\t\t\t\t\t\tvertNormals[ index ].norm = otherNormals[ otherNext ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal1 = vertNormals[ index ] || otherNormals[ otherNext ];\n\t\t\t\t\tif ( sharedNormal1 === null ) {\n\n\t\t\t\t\t\t// it's possible to encounter an edge of a triangle that has already been traversed meaning\n\t\t\t\t\t\t// both edges already have different normals defined and shared. To work around this we create\n\t\t\t\t\t\t// a wrapper object so when those edges are merged the normals can be updated everywhere.\n\t\t\t\t\t\tsharedNormal1 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal1.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ index ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ index ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherNext ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherNext ] = sharedNormal1;\n\t\t\t\t\t\tsharedNormal1.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// share the second normal\n\t\t\t\t\tif (\n\t\t\t\t\t\tvertNormals[ next ] && otherNormals[ otherIndex ] &&\n\t\t\t\t\t\tvertNormals[ next ] !== otherNormals[ otherIndex ]\n\t\t\t\t\t) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ].norm.add( vertNormals[ next ].norm );\n\t\t\t\t\t\tvertNormals[ next ].norm = otherNormals[ otherIndex ].norm;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet sharedNormal2 = vertNormals[ next ] || otherNormals[ otherIndex ];\n\t\t\t\t\tif ( sharedNormal2 === null ) {\n\n\t\t\t\t\t\tsharedNormal2 = { norm: new Vector3() };\n\t\t\t\t\t\tnormals.push( sharedNormal2.norm );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( vertNormals[ next ] === null ) {\n\n\t\t\t\t\t\tvertNormals[ next ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( faceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( otherNormals[ otherIndex ] === null ) {\n\n\t\t\t\t\t\totherNormals[ otherIndex ] = sharedNormal2;\n\t\t\t\t\t\tsharedNormal2.norm.add( otherFaceNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// The normals of each face have been added up so now we average them by normalizing the vector.\n\tfor ( let i = 0, l = normals.length; i < l; i ++ ) {\n\n\t\tnormals[ i ].normalize();\n\n\t}\n\n}\n\nfunction isPartType( type ) {\n\n\treturn type === 'Part' || type === 'Unofficial_Part';\n\n}\n\nfunction isPrimitiveType( type ) {\n\n\treturn /primitive/i.test( type ) || type === 'Subpart';\n\n}\n\nclass LineParser {\n\n\tconstructor( line, lineNumber ) {\n\n\t\tthis.line = line;\n\t\tthis.lineLength = line.length;\n\t\tthis.currentCharIndex = 0;\n\t\tthis.currentChar = ' ';\n\t\tthis.lineNumber = lineNumber;\n\n\t}\n\n\tseekNonSpace() {\n\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar !== ' ' && this.currentChar !== '\\t' ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t}\n\n\tgetToken() {\n\n\t\tconst pos0 = this.currentCharIndex ++;\n\n\t\t// Seek space\n\t\twhile ( this.currentCharIndex < this.lineLength ) {\n\n\t\t\tthis.currentChar = this.line.charAt( this.currentCharIndex );\n\n\t\t\tif ( this.currentChar === ' ' || this.currentChar === '\\t' ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.currentCharIndex ++;\n\n\t\t}\n\n\t\tconst pos1 = this.currentCharIndex;\n\n\t\tthis.seekNonSpace();\n\n\t\treturn this.line.substring( pos0, pos1 );\n\n\t}\n\n\tgetVector() {\n\n\t\treturn new Vector3( parseFloat( this.getToken() ), parseFloat( this.getToken() ), parseFloat( this.getToken() ) );\n\n\t}\n\n\tgetRemainingString() {\n\n\t\treturn this.line.substring( this.currentCharIndex, this.lineLength );\n\n\t}\n\n\tisAtTheEnd() {\n\n\t\treturn this.currentCharIndex >= this.lineLength;\n\n\t}\n\n\tsetToEnd() {\n\n\t\tthis.currentCharIndex = this.lineLength;\n\n\t}\n\n\tgetLineNumberString() {\n\n\t\treturn this.lineNumber >= 0 ? ' at line ' + this.lineNumber : '';\n\n\t}\n\n}\n\n// Fetches and parses an intermediate representation of LDraw parts files.\nclass LDrawParsedCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis._cache = {};\n\n\t}\n\n\tcloneResult( original ) {\n\n\t\tconst result = {};\n\n\t\t// vertices are transformed and normals computed before being converted to geometry\n\t\t// so these pieces must be cloned.\n\t\tresult.faces = original.faces.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tnormals: face.normals.map( () => null ),\n\t\t\t\tfaceNormal: null\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.conditionalSegments = original.conditionalSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() ),\n\t\t\t\tcontrolPoints: face.controlPoints.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\tresult.lineSegments = original.lineSegments.map( face => {\n\n\t\t\treturn {\n\t\t\t\tcolorCode: face.colorCode,\n\t\t\t\tmaterial: face.material,\n\t\t\t\tvertices: face.vertices.map( v => v.clone() )\n\t\t\t};\n\n\t\t} );\n\n\t\t// none if this is subsequently modified\n\t\tresult.type = original.type;\n\t\tresult.category = original.category;\n\t\tresult.keywords = original.keywords;\n\t\tresult.author = original.author;\n\t\tresult.subobjects = original.subobjects;\n\t\tresult.fileName = original.fileName;\n\t\tresult.totalFaces = original.totalFaces;\n\t\tresult.startingBuildingStep = original.startingBuildingStep;\n\t\tresult.materials = original.materials;\n\t\tresult.group = null;\n\t\treturn result;\n\n\t}\n\n\tasync fetchData( fileName ) {\n\n\t\tlet triedLowerCase = false;\n\t\tlet locationState = FILE_LOCATION_TRY_PARTS;\n\t\twhile ( locationState !== FILE_LOCATION_NOT_FOUND ) {\n\n\t\t\tlet subobjectURL = fileName;\n\t\t\tswitch ( locationState ) {\n\n\t\t\t\tcase FILE_LOCATION_AS_IS:\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_PARTS:\n\t\t\t\t\tsubobjectURL = 'parts/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_P:\n\t\t\t\t\tsubobjectURL = 'p/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_MODELS:\n\t\t\t\t\tsubobjectURL = 'models/' + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_RELATIVE:\n\t\t\t\t\tsubobjectURL = fileName.substring( 0, fileName.lastIndexOf( '/' ) + 1 ) + subobjectURL;\n\t\t\t\t\tlocationState = locationState + 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase FILE_LOCATION_TRY_ABSOLUTE:\n\n\t\t\t\t\tif ( triedLowerCase ) {\n\n\t\t\t\t\t\t// Try absolute path\n\t\t\t\t\t\tlocationState = FILE_LOCATION_NOT_FOUND;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Next attempt is lower case\n\t\t\t\t\t\tfileName = fileName.toLowerCase();\n\t\t\t\t\t\tsubobjectURL = fileName;\n\t\t\t\t\t\ttriedLowerCase = true;\n\t\t\t\t\t\tlocationState = FILE_LOCATION_TRY_PARTS;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tconst loader = this.loader;\n\t\t\tconst fileLoader = new FileLoader( loader.manager );\n\t\t\tfileLoader.setPath( loader.partsLibraryPath );\n\t\t\tfileLoader.setRequestHeader( loader.requestHeader );\n\t\t\tfileLoader.setWithCredentials( loader.withCredentials );\n\n\t\t\ttry {\n\n\t\t\t\tconst text = await fileLoader.loadAsync( subobjectURL );\n\t\t\t\treturn text;\n\n\t\t\t} catch {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthrow new Error( 'LDrawLoader: Subobject \"' + fileName + '\" could not be loaded.' );\n\n\t}\n\n\tparse( text, fileName = null ) {\n\n\t\tconst loader = this.loader;\n\n\t\t// final results\n\t\tconst faces = [];\n\t\tconst lineSegments = [];\n\t\tconst conditionalSegments = [];\n\t\tconst subobjects = [];\n\t\tconst materials = {};\n\n\t\tconst getLocalMaterial = colorCode => {\n\n\t\t\treturn materials[ colorCode ] || null;\n\n\t\t};\n\n\t\tlet type = 'Model';\n\t\tlet category = null;\n\t\tlet keywords = null;\n\t\tlet author = null;\n\t\tlet totalFaces = 0;\n\n\t\t// split into lines\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tconst numLines = lines.length;\n\n\t\tlet parsingEmbeddedFiles = false;\n\t\tlet currentEmbeddedFileName = null;\n\t\tlet currentEmbeddedText = null;\n\n\t\tlet bfcCertified = false;\n\t\tlet bfcCCW = true;\n\t\tlet bfcInverted = false;\n\t\tlet bfcCull = true;\n\n\t\tlet startingBuildingStep = false;\n\n\t\t// Parse all line commands\n\t\tfor ( let lineIndex = 0; lineIndex < numLines; lineIndex ++ ) {\n\n\t\t\tconst line = lines[ lineIndex ];\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\t\tif ( line.startsWith( '0 FILE ' ) ) {\n\n\t\t\t\t\t// Save previous embedded file in the cache\n\t\t\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t\t\t\t// New embedded text file\n\t\t\t\t\tcurrentEmbeddedFileName = line.substring( 7 );\n\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentEmbeddedText += line + '\\n';\n\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst lp = new LineParser( line, lineIndex + 1 );\n\t\t\tlp.seekNonSpace();\n\n\t\t\tif ( lp.isAtTheEnd() ) {\n\n\t\t\t\t// Empty line\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// Parse the line type\n\t\t\tconst lineType = lp.getToken();\n\n\t\t\tlet material;\n\t\t\tlet colorCode;\n\t\t\tlet segment;\n\t\t\tlet ccw;\n\t\t\tlet doubleSided;\n\t\t\tlet v0, v1, v2, v3, c0, c1;\n\n\t\t\tswitch ( lineType ) {\n\n\t\t\t\t// Line type 0: Comment or META\n\t\t\t\tcase '0':\n\n\t\t\t\t\t// Parse meta directive\n\t\t\t\t\tconst meta = lp.getToken();\n\n\t\t\t\t\tif ( meta ) {\n\n\t\t\t\t\t\tswitch ( meta ) {\n\n\t\t\t\t\t\t\tcase '!LDRAW_ORG':\n\n\t\t\t\t\t\t\t\ttype = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!COLOUR':\n\n\t\t\t\t\t\t\t\tmaterial = loader.parseColorMetaDirective( lp );\n\t\t\t\t\t\t\t\tif ( material ) {\n\n\t\t\t\t\t\t\t\t\tmaterials[ material.userData.code ] = material;\n\n\t\t\t\t\t\t\t\t}\telse {\n\n\t\t\t\t\t\t\t\t\tconsole.warn( 'LDrawLoader: Error parsing material' + lp.getLineNumberString() );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!CATEGORY':\n\n\t\t\t\t\t\t\t\tcategory = lp.getToken();\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase '!KEYWORDS':\n\n\t\t\t\t\t\t\t\tconst newKeywords = lp.getRemainingString().split( ',' );\n\t\t\t\t\t\t\t\tif ( newKeywords.length > 0 ) {\n\n\t\t\t\t\t\t\t\t\tif ( ! keywords ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords = [];\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tnewKeywords.forEach( function ( keyword ) {\n\n\t\t\t\t\t\t\t\t\t\tkeywords.push( keyword.trim() );\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'FILE':\n\n\t\t\t\t\t\t\t\tif ( lineIndex > 0 ) {\n\n\t\t\t\t\t\t\t\t\t// Start embedded text files parsing\n\t\t\t\t\t\t\t\t\tparsingEmbeddedFiles = true;\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedFileName = lp.getRemainingString();\n\t\t\t\t\t\t\t\t\tcurrentEmbeddedText = '';\n\n\t\t\t\t\t\t\t\t\tbfcCertified = false;\n\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'BFC':\n\n\t\t\t\t\t\t\t\t// Changes to the backface culling state\n\t\t\t\t\t\t\t\twhile ( ! lp.isAtTheEnd() ) {\n\n\t\t\t\t\t\t\t\t\tconst token = lp.getToken();\n\n\t\t\t\t\t\t\t\t\tswitch ( token ) {\n\n\t\t\t\t\t\t\t\t\t\tcase 'CERTIFY':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCERTIFY':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCertified = token === 'CERTIFY';\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CW':\n\t\t\t\t\t\t\t\t\t\tcase 'CCW':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCCW = token === 'CCW';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'INVERTNEXT':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcInverted = true;\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tcase 'CLIP':\n\t\t\t\t\t\t\t\t\t\tcase 'NOCLIP':\n\n\t\t\t\t\t\t\t\t\t\t\tbfcCull = token === 'CLIP';\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.LDrawLoader: BFC directive \"' + token + '\" is unknown.' );\n\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'STEP':\n\n\t\t\t\t\t\t\t\tstartingBuildingStep = true;\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 'Author:':\n\n\t\t\t\t\t\t\t\tauthor = lp.getToken();\n\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t// Other meta directives are not implemented\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 1: Sub-object file\n\t\t\t\tcase '1':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\n\t\t\t\t\tconst posX = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posY = parseFloat( lp.getToken() );\n\t\t\t\t\tconst posZ = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m0 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m1 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m2 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m3 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m4 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m5 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m6 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m7 = parseFloat( lp.getToken() );\n\t\t\t\t\tconst m8 = parseFloat( lp.getToken() );\n\n\t\t\t\t\tconst matrix = new Matrix4().set(\n\t\t\t\t\t\tm0, m1, m2, posX,\n\t\t\t\t\t\tm3, m4, m5, posY,\n\t\t\t\t\t\tm6, m7, m8, posZ,\n\t\t\t\t\t\t0, 0, 0, 1\n\t\t\t\t\t);\n\n\t\t\t\t\tlet fileName = lp.getRemainingString().trim().replace( /\\\\/g, '/' );\n\n\t\t\t\t\tif ( loader.fileMap[ fileName ] ) {\n\n\t\t\t\t\t\t// Found the subobject path in the preloaded file path map\n\t\t\t\t\t\tfileName = loader.fileMap[ fileName ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Standardized subfolders\n\t\t\t\t\t\tif ( fileName.startsWith( 's/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'parts/' + fileName;\n\n\t\t\t\t\t\t} else if ( fileName.startsWith( '48/' ) ) {\n\n\t\t\t\t\t\t\tfileName = 'p/' + fileName;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tsubobjects.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tmatrix: matrix,\n\t\t\t\t\t\tfileName: fileName,\n\t\t\t\t\t\tinverted: bfcInverted,\n\t\t\t\t\t\tstartingBuildingStep: startingBuildingStep\n\t\t\t\t\t} );\n\n\t\t\t\t\tstartingBuildingStep = false;\n\t\t\t\t\tbfcInverted = false;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 2: Line segment\n\t\t\t\tcase '2':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tlineSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 5: Conditional Line segment\n\t\t\t\tcase '5':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\tc0 = lp.getVector();\n\t\t\t\t\tc1 = lp.getVector();\n\n\t\t\t\t\tsegment = {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tvertices: [ v0, v1 ],\n\t\t\t\t\t\tcontrolPoints: [ c0, c1 ],\n\t\t\t\t\t};\n\n\t\t\t\t\tconditionalSegments.push( segment );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 3: Triangle\n\t\t\t\tcase '3':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2 ],\n\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// Line type 4: Quadrilateral\n\t\t\t\tcase '4':\n\n\t\t\t\t\tcolorCode = lp.getToken();\n\t\t\t\t\tmaterial = getLocalMaterial( colorCode );\n\t\t\t\t\tccw = bfcCCW;\n\t\t\t\t\tdoubleSided = ! bfcCertified || ! bfcCull;\n\n\t\t\t\t\tif ( ccw === true ) {\n\n\t\t\t\t\t\tv0 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv3 = lp.getVector();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv3 = lp.getVector();\n\t\t\t\t\t\tv2 = lp.getVector();\n\t\t\t\t\t\tv1 = lp.getVector();\n\t\t\t\t\t\tv0 = lp.getVector();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// specifically place the triangle diagonal in the v0 and v1 slots so we can\n\t\t\t\t\t// account for the doubling of vertices later when smoothing normals.\n\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\tvertices: [ v0, v1, v2, v3 ],\n\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t} );\n\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\tif ( doubleSided === true ) {\n\n\t\t\t\t\t\tfaces.push( {\n\t\t\t\t\t\t\tmaterial: material,\n\t\t\t\t\t\t\tcolorCode: colorCode,\n\t\t\t\t\t\t\tfaceNormal: null,\n\t\t\t\t\t\t\tvertices: [ v3, v2, v1, v0 ],\n\t\t\t\t\t\t\tnormals: [ null, null, null, null ],\n\t\t\t\t\t\t} );\n\t\t\t\t\t\ttotalFaces += 2;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown line type \"' + lineType + '\"' + lp.getLineNumberString() + '.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parsingEmbeddedFiles ) {\n\n\t\t\tthis.setData( currentEmbeddedFileName, currentEmbeddedText );\n\n\t\t}\n\n\t\treturn {\n\t\t\tfaces,\n\t\t\tconditionalSegments,\n\t\t\tlineSegments,\n\t\t\ttype,\n\t\t\tcategory,\n\t\t\tkeywords,\n\t\t\tauthor,\n\t\t\tsubobjects,\n\t\t\ttotalFaces,\n\t\t\tstartingBuildingStep,\n\t\t\tmaterials,\n\t\t\tfileName,\n\t\t\tgroup: null\n\t\t};\n\n\t}\n\n\t// returns an (optionally cloned) instance of the data\n\tgetData( fileName, clone = true ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tconst result = this._cache[ key ];\n\t\tif ( result === null || result instanceof Promise ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( clone ) {\n\n\t\t\treturn this.cloneResult( result );\n\n\t\t} else {\n\n\t\t\treturn result;\n\n\t\t}\n\n\t}\n\n\t// kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when\n\t// the data is ready to use and can be retrieved synchronously with \"getData\".\n\tasync ensureDataLoaded( fileName ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( ! ( key in this._cache ) ) {\n\n\t\t\t// replace the promise with a copy of the parsed data for immediate processing\n\t\t\tthis._cache[ key ] = this.fetchData( fileName ).then( text => {\n\n\t\t\t\tconst info = this.parse( text, fileName );\n\t\t\t\tthis._cache[ key ] = info;\n\t\t\t\treturn info;\n\n\t\t\t} );\n\n\t\t}\n\n\t\tawait this._cache[ key ];\n\n\t}\n\n\t// sets the data in the cache from parsed data\n\tsetData( fileName, text ) {\n\n\t\tconst key = fileName.toLowerCase();\n\t\tthis._cache[ key ] = this.parse( text, fileName );\n\n\t}\n\n}\n\n// returns the material for an associated color code. If the color code is 16 for a face or 24 for\n// an edge then the passthroughColorCode is used.\nfunction getMaterialFromCode( colorCode, parentColorCode, materialHierarchy, forEdge ) {\n\n\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\tif ( isPassthrough ) {\n\n\t\tcolorCode = parentColorCode;\n\n\t}\n\n\treturn materialHierarchy[ colorCode ] || null;\n\n}\n\n// Class used to parse and build LDraw parts as three.js objects and cache them if they're a \"Part\" type.\nclass LDrawPartsGeometryCache {\n\n\tconstructor( loader ) {\n\n\t\tthis.loader = loader;\n\t\tthis.parseCache = new LDrawParsedCache( loader );\n\t\tthis._cache = {};\n\n\t}\n\n\t// Convert the given file information into a mesh by processing subobjects.\n\tasync processIntoMesh( info ) {\n\n\t\tconst loader = this.loader;\n\t\tconst parseCache = this.parseCache;\n\t\tconst faceMaterials = new Set();\n\n\t\t// Processes the part subobject information to load child parts and merge geometry onto part\n\t\t// piece object.\n\t\tconst processInfoSubobjects = async ( info, subobject = null ) => {\n\n\t\t\tconst subobjects = info.subobjects;\n\t\t\tconst promises = [];\n\n\t\t\t// Trigger load of all subobjects. If a subobject isn't a primitive then load it as a separate\n\t\t\t// group which lets instruction steps apply correctly.\n\t\t\tfor ( let i = 0, l = subobjects.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = subobjects[ i ];\n\t\t\t\tconst promise = parseCache.ensureDataLoaded( subobject.fileName ).then( () => {\n\n\t\t\t\t\tconst subobjectInfo = parseCache.getData( subobject.fileName, false );\n\t\t\t\t\tif ( ! isPrimitiveType( subobjectInfo.type ) ) {\n\n\t\t\t\t\t\treturn this.loadModel( subobject.fileName ).catch( error => {\n\n\t\t\t\t\t\t\tconsole.warn( error );\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn processInfoSubobjects( parseCache.getData( subobject.fileName ), subobject );\n\n\t\t\t\t} );\n\n\t\t\t\tpromises.push( promise );\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\t\t\tgroup.userData.category = info.category;\n\t\t\tgroup.userData.keywords = info.keywords;\n\t\t\tgroup.userData.author = info.author;\n\t\t\tgroup.userData.type = info.type;\n\t\t\tgroup.userData.fileName = info.fileName;\n\t\t\tinfo.group = group;\n\n\t\t\tconst subobjectInfos = await Promise.all( promises );\n\t\t\tfor ( let i = 0, l = subobjectInfos.length; i < l; i ++ ) {\n\n\t\t\t\tconst subobject = info.subobjects[ i ];\n\t\t\t\tconst subobjectInfo = subobjectInfos[ i ];\n\n\t\t\t\tif ( subobjectInfo === null ) {\n\n\t\t\t\t\t// the subobject failed to load\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// if the subobject was loaded as a separate group then apply the parent scopes materials\n\t\t\t\tif ( subobjectInfo.isGroup ) {\n\n\t\t\t\t\tconst subobjectGroup = subobjectInfo;\n\t\t\t\t\tsubobject.matrix.decompose( subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale );\n\t\t\t\t\tsubobjectGroup.userData.startingBuildingStep = subobject.startingBuildingStep;\n\t\t\t\t\tsubobjectGroup.name = subobject.fileName;\n\n\t\t\t\t\tloader.applyMaterialsToMesh( subobjectGroup, subobject.colorCode, info.materials );\n\t\t\t\t\tsubobjectGroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t\t\tgroup.add( subobjectGroup );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// add the subobject group if it has children in case it has both children and primitives\n\t\t\t\tif ( subobjectInfo.group.children.length ) {\n\n\t\t\t\t\tgroup.add( subobjectInfo.group );\n\n\t\t\t\t}\n\n\t\t\t\t// transform the primitives into the local space of the parent piece and append them to\n\t\t\t\t// to the parent primitives list.\n\t\t\t\tconst parentLineSegments = info.lineSegments;\n\t\t\t\tconst parentConditionalSegments = info.conditionalSegments;\n\t\t\t\tconst parentFaces = info.faces;\n\n\t\t\t\tconst lineSegments = subobjectInfo.lineSegments;\n\t\t\t\tconst conditionalSegments = subobjectInfo.conditionalSegments;\n\n\t\t\t\tconst faces = subobjectInfo.faces;\n\t\t\t\tconst matrix = subobject.matrix;\n\t\t\t\tconst inverted = subobject.inverted;\n\t\t\t\tconst matrixScaleInverted = matrix.determinant() < 0;\n\t\t\t\tconst colorCode = subobject.colorCode;\n\n\t\t\t\tconst lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;\n\t\t\t\tfor ( let i = 0, l = lineSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst ls = lineSegments[ i ];\n\t\t\t\t\tconst vertices = ls.vertices;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;\n\t\t\t\t\tls.material = ls.material || getMaterialFromCode( ls.colorCode, ls.colorCode, info.materials, true );\n\n\t\t\t\t\tparentLineSegments.push( ls );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = conditionalSegments.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst os = conditionalSegments[ i ];\n\t\t\t\t\tconst vertices = os.vertices;\n\t\t\t\t\tconst controlPoints = os.controlPoints;\n\t\t\t\t\tvertices[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tvertices[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 0 ].applyMatrix4( matrix );\n\t\t\t\t\tcontrolPoints[ 1 ].applyMatrix4( matrix );\n\t\t\t\t\tos.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;\n\t\t\t\t\tos.material = os.material || getMaterialFromCode( os.colorCode, os.colorCode, info.materials, true );\n\n\t\t\t\t\tparentConditionalSegments.push( os );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst tri = faces[ i ];\n\t\t\t\t\tconst vertices = tri.vertices;\n\t\t\t\t\tfor ( let i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvertices[ i ].applyMatrix4( matrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;\n\t\t\t\t\ttri.material = tri.material || getMaterialFromCode( tri.colorCode, colorCode, info.materials, false );\n\t\t\t\t\tfaceMaterials.add( tri.colorCode );\n\n\t\t\t\t\t// If the scale of the object is negated then the triangle winding order\n\t\t\t\t\t// needs to be flipped.\n\t\t\t\t\tif ( matrixScaleInverted !== inverted ) {\n\n\t\t\t\t\t\tvertices.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tparentFaces.push( tri );\n\n\t\t\t\t}\n\n\t\t\t\tinfo.totalFaces += subobjectInfo.totalFaces;\n\n\t\t\t}\n\n\t\t\t// Apply the parent subobjects pass through material code to this object. This is done several times due\n\t\t\t// to material scoping.\n\t\t\tif ( subobject ) {\n\n\t\t\t\tloader.applyMaterialsToMesh( group, subobject.colorCode, info.materials );\n\t\t\t\tgroup.userData.colorCode = subobject.colorCode;\n\n\t\t\t}\n\n\t\t\treturn info;\n\n\t\t};\n\n\t\t// Track material use to see if we need to use the normal smooth slow path for hard edges.\n\t\tfor ( let i = 0, l = info.faces; i < l; i ++ ) {\n\n\t\t\tfaceMaterials.add( info.faces[ i ].colorCode );\n\n\t\t}\n\n\t\tawait processInfoSubobjects( info );\n\n\t\tif ( loader.smoothNormals ) {\n\n\t\t\tconst checkSubSegments = faceMaterials.size > 1;\n\t\t\tgenerateFaceNormals( info.faces );\n\t\t\tsmoothNormals( info.faces, info.lineSegments, checkSubSegments );\n\n\t\t}\n\n\t\t// Add the primitive objects and metadata.\n\t\tconst group = info.group;\n\t\tif ( info.faces.length > 0 ) {\n\n\t\t\tgroup.add( createObject( info.faces, 3, false, info.totalFaces ) );\n\n\t\t}\n\n\t\tif ( info.lineSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( info.lineSegments, 2 ) );\n\n\t\t}\n\n\t\tif ( info.conditionalSegments.length > 0 ) {\n\n\t\t\tgroup.add( createObject( info.conditionalSegments, 2, true ) );\n\n\t\t}\n\n\t\treturn group;\n\n\t}\n\n\thasCachedModel( fileName ) {\n\n\t\treturn fileName !== null && fileName.toLowerCase() in this._cache;\n\n\t}\n\n\tasync getCachedModel( fileName ) {\n\n\t\tif ( fileName !== null && this.hasCachedModel( fileName ) ) {\n\n\t\t\tconst key = fileName.toLowerCase();\n\t\t\tconst group = await this._cache[ key ];\n\t\t\treturn group.clone();\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n\t// Loads and parses the model with the given file name. Returns a cached copy if available.\n\tasync loadModel( fileName ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst key = fileName.toLowerCase();\n\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t// Return cached model if available.\n\t\t\treturn this.getCachedModel( fileName );\n\n\t\t} else {\n\n\t\t\t// Otherwise parse a new model.\n\t\t\t// Ensure the file data is loaded and pre parsed.\n\t\t\tawait parseCache.ensureDataLoaded( fileName );\n\n\t\t\tconst info = parseCache.getData( fileName );\n\t\t\tconst promise = this.processIntoMesh( info );\n\n\t\t\t// Now that the file has loaded it's possible that another part parse has been waiting in parallel\n\t\t\t// so check the cache again to see if it's been added since the last async operation so we don't\n\t\t\t// do unnecessary work.\n\t\t\tif ( this.hasCachedModel( fileName ) ) {\n\n\t\t\t\treturn this.getCachedModel( fileName );\n\n\t\t\t}\n\n\t\t\t// Cache object if it's a part so it can be reused later.\n\t\t\tif ( isPartType( info.type ) ) {\n\n\t\t\t\tthis._cache[ key ] = promise;\n\n\t\t\t}\n\n\t\t\t// return a copy\n\t\t\tconst group = await promise;\n\t\t\treturn group.clone();\n\n\t\t}\n\n\t}\n\n\t// parses the given model text into a renderable object. Returns cached copy if available.\n\tasync parseModel( text ) {\n\n\t\tconst parseCache = this.parseCache;\n\t\tconst info = parseCache.parse( text );\n\t\tif ( isPartType( info.type ) && this.hasCachedModel( info.fileName ) ) {\n\n\t\t\treturn this.getCachedModel( info.fileName );\n\n\t\t}\n\n\t\treturn this.processIntoMesh( info );\n\n\t}\n\n}\n\nfunction sortByMaterial( a, b ) {\n\n\tif ( a.colorCode === b.colorCode ) {\n\n\t\treturn 0;\n\n\t}\n\n\tif ( a.colorCode < b.colorCode ) {\n\n\t\treturn - 1;\n\n\t}\n\n\treturn 1;\n\n}\n\nfunction createObject( elements, elementSize, isConditionalSegments = false, totalElements = null ) {\n\n\t// Creates a LineSegments (elementSize = 2) or a Mesh (elementSize = 3 )\n\t// With per face / segment material, implemented with mesh groups and materials array\n\n\t// Sort the faces or line segments by color code to make later the mesh groups\n\telements.sort( sortByMaterial );\n\n\tif ( totalElements === null ) {\n\n\t\ttotalElements = elements.length;\n\n\t}\n\n\tconst positions = new Float32Array( elementSize * totalElements * 3 );\n\tconst normals = elementSize === 3 ? new Float32Array( elementSize * totalElements * 3 ) : null;\n\tconst materials = [];\n\n\tconst quadArray = new Array( 6 );\n\tconst bufferGeometry = new BufferGeometry();\n\tlet prevMaterial = null;\n\tlet index0 = 0;\n\tlet numGroupVerts = 0;\n\tlet offset = 0;\n\n\tfor ( let iElem = 0, nElem = elements.length; iElem < nElem; iElem ++ ) {\n\n\t\tconst elem = elements[ iElem ];\n\t\tlet vertices = elem.vertices;\n\t\tif ( vertices.length === 4 ) {\n\n\t\t\tquadArray[ 0 ] = vertices[ 0 ];\n\t\t\tquadArray[ 1 ] = vertices[ 1 ];\n\t\t\tquadArray[ 2 ] = vertices[ 2 ];\n\t\t\tquadArray[ 3 ] = vertices[ 0 ];\n\t\t\tquadArray[ 4 ] = vertices[ 2 ];\n\t\t\tquadArray[ 5 ] = vertices[ 3 ];\n\t\t\tvertices = quadArray;\n\n\t\t}\n\n\t\tfor ( let j = 0, l = vertices.length; j < l; j ++ ) {\n\n\t\t\tconst v = vertices[ j ];\n\t\t\tconst index = offset + j * 3;\n\t\t\tpositions[ index + 0 ] = v.x;\n\t\t\tpositions[ index + 1 ] = v.y;\n\t\t\tpositions[ index + 2 ] = v.z;\n\n\t\t}\n\n\t\t// create the normals array if this is a set of faces\n\t\tif ( elementSize === 3 ) {\n\n\t\t\tif ( ! elem.faceNormal ) {\n\n\t\t\t\tconst v0 = vertices[ 0 ];\n\t\t\t\tconst v1 = vertices[ 1 ];\n\t\t\t\tconst v2 = vertices[ 2 ];\n\t\t\t\t_tempVec0.subVectors( v1, v0 );\n\t\t\t\t_tempVec1.subVectors( v2, v1 );\n\t\t\t\telem.faceNormal = new Vector3()\n\t\t\t\t\t.crossVectors( _tempVec0, _tempVec1 )\n\t\t\t\t\t.normalize();\n\n\t\t\t}\n\n\t\t\tlet elemNormals = elem.normals;\n\t\t\tif ( elemNormals.length === 4 ) {\n\n\t\t\t\tquadArray[ 0 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 1 ] = elemNormals[ 1 ];\n\t\t\t\tquadArray[ 2 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 3 ] = elemNormals[ 0 ];\n\t\t\t\tquadArray[ 4 ] = elemNormals[ 2 ];\n\t\t\t\tquadArray[ 5 ] = elemNormals[ 3 ];\n\t\t\t\telemNormals = quadArray;\n\n\t\t\t}\n\n\t\t\tfor ( let j = 0, l = elemNormals.length; j < l; j ++ ) {\n\n\t\t\t\t// use face normal if a vertex normal is not provided\n\t\t\t\tlet n = elem.faceNormal;\n\t\t\t\tif ( elemNormals[ j ] ) {\n\n\t\t\t\t\tn = elemNormals[ j ].norm;\n\n\t\t\t\t}\n\n\t\t\t\tconst index = offset + j * 3;\n\t\t\t\tnormals[ index + 0 ] = n.x;\n\t\t\t\tnormals[ index + 1 ] = n.y;\n\t\t\t\tnormals[ index + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( prevMaterial !== elem.colorCode ) {\n\n\t\t\tif ( prevMaterial !== null ) {\n\n\t\t\t\tbufferGeometry.addGroup( index0, numGroupVerts, materials.length - 1 );\n\n\t\t\t}\n\n\t\t\tconst material = elem.material;\n\n\t\t\tif ( material !== null ) {\n\n\t\t\t\tif ( elementSize === 3 ) {\n\n\t\t\t\t\tmaterials.push( material );\n\n\t\t\t\t} else if ( elementSize === 2 ) {\n\n\t\t\t\t\tif ( isConditionalSegments ) {\n\n\t\t\t\t\t\tmaterials.push( material.userData.edgeMaterial.userData.conditionalEdgeMaterial );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials.push( material.userData.edgeMaterial );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a material has not been made available yet then keep the color code string in the material array\n\t\t\t\t// to save the spot for the material once a parent scopes materials are being applied to the object.\n\t\t\t\tmaterials.push( elem.colorCode );\n\n\t\t\t}\n\n\t\t\tprevMaterial = elem.colorCode;\n\t\t\tindex0 = offset / 3;\n\t\t\tnumGroupVerts = vertices.length;\n\n\t\t} else {\n\n\t\t\tnumGroupVerts += vertices.length;\n\n\t\t}\n\n\t\toffset += 3 * vertices.length;\n\n\t}\n\n\tif ( numGroupVerts > 0 ) {\n\n\t\tbufferGeometry.addGroup( index0, Infinity, materials.length - 1 );\n\n\t}\n\n\tbufferGeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\tif ( normals !== null ) {\n\n\t\tbufferGeometry.setAttribute( 'normal', new BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tlet object3d = null;\n\n\tif ( elementSize === 2 ) {\n\n\t\tif ( isConditionalSegments ) {\n\n\t\t\tobject3d = new ConditionalLineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t} else {\n\n\t\t\tobject3d = new LineSegments( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t\t}\n\n\t} else if ( elementSize === 3 ) {\n\n\t\tobject3d = new Mesh( bufferGeometry, materials.length === 1 ? materials[ 0 ] : materials );\n\n\t}\n\n\tif ( isConditionalSegments ) {\n\n\t\tobject3d.isConditionalLine = true;\n\n\t\tconst controlArray0 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst controlArray1 = new Float32Array( elements.length * 3 * 2 );\n\t\tconst directionArray = new Float32Array( elements.length * 3 * 2 );\n\t\tfor ( let i = 0, l = elements.length; i < l; i ++ ) {\n\n\t\t\tconst os = elements[ i ];\n\t\t\tconst vertices = os.vertices;\n\t\t\tconst controlPoints = os.controlPoints;\n\t\t\tconst c0 = controlPoints[ 0 ];\n\t\t\tconst c1 = controlPoints[ 1 ];\n\t\t\tconst v0 = vertices[ 0 ];\n\t\t\tconst v1 = vertices[ 1 ];\n\t\t\tconst index = i * 3 * 2;\n\t\t\tcontrolArray0[ index + 0 ] = c0.x;\n\t\t\tcontrolArray0[ index + 1 ] = c0.y;\n\t\t\tcontrolArray0[ index + 2 ] = c0.z;\n\t\t\tcontrolArray0[ index + 3 ] = c0.x;\n\t\t\tcontrolArray0[ index + 4 ] = c0.y;\n\t\t\tcontrolArray0[ index + 5 ] = c0.z;\n\n\t\t\tcontrolArray1[ index + 0 ] = c1.x;\n\t\t\tcontrolArray1[ index + 1 ] = c1.y;\n\t\t\tcontrolArray1[ index + 2 ] = c1.z;\n\t\t\tcontrolArray1[ index + 3 ] = c1.x;\n\t\t\tcontrolArray1[ index + 4 ] = c1.y;\n\t\t\tcontrolArray1[ index + 5 ] = c1.z;\n\n\t\t\tdirectionArray[ index + 0 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 1 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 2 ] = v1.z - v0.z;\n\t\t\tdirectionArray[ index + 3 ] = v1.x - v0.x;\n\t\t\tdirectionArray[ index + 4 ] = v1.y - v0.y;\n\t\t\tdirectionArray[ index + 5 ] = v1.z - v0.z;\n\n\t\t}\n\n\t\tbufferGeometry.setAttribute( 'control0', new BufferAttribute( controlArray0, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'control1', new BufferAttribute( controlArray1, 3, false ) );\n\t\tbufferGeometry.setAttribute( 'direction', new BufferAttribute( directionArray, 3, false ) );\n\n\t}\n\n\treturn object3d;\n\n}\n\n//\n\nclass LDrawLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t// Array of THREE.Material\n\t\tthis.materials = [];\n\t\tthis.materialLibrary = {};\n\n\t\t// This also allows to handle the embedded text files (\"0 FILE\" lines)\n\t\tthis.partsCache = new LDrawPartsGeometryCache( this );\n\n\t\t// This object is a map from file names to paths. It agilizes the paths search. If it is not set then files will be searched by trial and error.\n\t\tthis.fileMap = {};\n\n\t\t// Initializes the materials library with default materials\n\t\tthis.setMaterials( [] );\n\n\t\t// If this flag is set to true the vertex normals will be smoothed.\n\t\tthis.smoothNormals = true;\n\n\t\t// The path to load parts from the LDraw parts library from.\n\t\tthis.partsLibraryPath = '';\n\n\t\t// Material assigned to not available colors for meshes and edges\n\t\tthis.missingColorMaterial = new MeshStandardMaterial( { color: 0xFF00FF, roughness: 0.3, metalness: 0 } );\n\t\tthis.missingColorMaterial.name = 'Missing material';\n\t\tthis.missingEdgeColorMaterial = new LineBasicMaterial( { color: 0xFF00FF } );\n\t\tthis.missingEdgeColorMaterial.name = 'Missing material - Edge';\n\t\tthis.missingConditionalEdgeColorMaterial = new LDrawConditionalLineMaterial( { fog: true, color: 0xFF00FF } );\n\t\tthis.missingConditionalEdgeColorMaterial.name = 'Missing material - Conditional Edge';\n\t\tthis.missingColorMaterial.userData.edgeMaterial = this.missingEdgeColorMaterial;\n\t\tthis.missingEdgeColorMaterial.userData.conditionalEdgeMaterial = this.missingConditionalEdgeColorMaterial;\n\n\t}\n\n\tsetPartsLibraryPath( path ) {\n\n\t\tthis.partsLibraryPath = path;\n\t\treturn this;\n\n\t}\n\n\tasync preloadMaterials( url ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await fileLoader.loadAsync( url );\n\t\tconst colorLineRegex = /^0 !COLOUR/;\n\t\tconst lines = text.split( /[\\n\\r]/g );\n\t\tconst materials = [];\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ];\n\t\t\tif ( colorLineRegex.test( line ) ) {\n\n\t\t\t\tconst directive = line.replace( colorLineRegex, '' );\n\t\t\t\tconst material = this.parseColorMetaDirective( new LineParser( directive ) );\n\t\t\t\tmaterials.push( material );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setMaterials( materials );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst fileLoader = new FileLoader( this.manager );\n\t\tfileLoader.setPath( this.path );\n\t\tfileLoader.setRequestHeader( this.requestHeader );\n\t\tfileLoader.setWithCredentials( this.withCredentials );\n\t\tfileLoader.load( url, text => {\n\n\t\t\tthis.partsCache\n\t\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t\t.then( group => {\n\n\t\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\t\tgroup.userData.fileName = url;\n\t\t\t\t\tonLoad( group );\n\n\t\t\t\t} )\n\t\t\t\t.catch( onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( text, onLoad ) {\n\n\t\tthis.partsCache\n\t\t\t.parseModel( text, this.materialLibrary )\n\t\t\t.then( group => {\n\n\t\t\t\tthis.applyMaterialsToMesh( group, MAIN_COLOUR_CODE, this.materialLibrary, true );\n\t\t\t\tthis.computeBuildingSteps( group );\n\t\t\t\tgroup.userData.fileName = '';\n\t\t\t\tonLoad( group );\n\n\t\t\t} );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materialLibrary = {};\n\t\tthis.materials = [];\n\t\tfor ( let i = 0, l = materials.length; i < l; i ++ ) {\n\n\t\t\tthis.addMaterial( materials[ i ] );\n\n\t\t}\n\n\t\t// Add default main triangle and line edge materials (used in pieces that can be colored with a main color)\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Main_Colour CODE 16 VALUE #FF8080 EDGE #333333' ) ) );\n\t\tthis.addMaterial( this.parseColorMetaDirective( new LineParser( 'Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333' ) ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFileMap( fileMap ) {\n\n\t\tthis.fileMap = fileMap;\n\n\t\treturn this;\n\n\t}\n\n\taddMaterial( material ) {\n\n\t\t// Adds a material to the material library which is on top of the parse scopes stack. And also to the materials array\n\n\t\tconst matLib = this.materialLibrary;\n\t\tif ( ! matLib[ material.userData.code ] ) {\n\n\t\t\tthis.materials.push( material );\n\t\t\tmatLib[ material.userData.code ] = material;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetMaterial( colorCode ) {\n\n\t\tif ( colorCode.startsWith( '0x2' ) ) {\n\n\t\t\t// Special 'direct' material value (RGB color)\n\t\t\tconst color = colorCode.substring( 3 );\n\n\t\t\treturn this.parseColorMetaDirective( new LineParser( 'Direct_Color_' + color + ' CODE -1 VALUE #' + color + ' EDGE #' + color + '' ) );\n\n\t\t}\n\n\t\treturn this.materialLibrary[ colorCode ] || null;\n\n\t}\n\n\t// Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present\n\t// in the material array if they need to be filled in.\n\tapplyMaterialsToMesh( group, parentColorCode, materialHierarchy, finalMaterialPass = false ) {\n\n\t\t// find any missing materials as indicated by a color code string and replace it with a material from the current material lib\n\t\tconst loader = this;\n\t\tconst parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;\n\t\tgroup.traverse( c => {\n\n\t\t\tif ( c.isMesh || c.isLineSegments ) {\n\n\t\t\t\tif ( Array.isArray( c.material ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = c.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( ! c.material[ i ].isMaterial ) {\n\n\t\t\t\t\t\t\tc.material[ i ] = getMaterial( c, c.material[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( ! c.material.isMaterial ) {\n\n\t\t\t\t\tc.material = getMaterial( c, c.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\n\t\t// Returns the appropriate material for the object (line or face) given color code. If the code is \"pass through\"\n\t\t// (24 for lines, 16 for edges) then the pass through color code is used. If that is also pass through then it's\n\t\t// simply returned for the subsequent material application.\n\t\tfunction getMaterial( c, colorCode ) {\n\n\t\t\t// if our parent is a passthrough color code and we don't have the current material color available then\n\t\t\t// return early.\n\t\t\tif ( parentIsPassthrough && ! ( colorCode in materialHierarchy ) && ! finalMaterialPass ) {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tconst forEdge = c.isLineSegments || c.isConditionalLine;\n\t\t\tconst isPassthrough = ! forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n\t\t\tif ( isPassthrough ) {\n\n\t\t\t\tcolorCode = parentColorCode;\n\n\t\t\t}\n\n\t\t\tlet material = null;\n\t\t\tif ( colorCode in materialHierarchy ) {\n\n\t\t\t\tmaterial = materialHierarchy[ colorCode ];\n\n\t\t\t} else if ( finalMaterialPass ) {\n\n\t\t\t\t// see if we can get the final material from from the \"getMaterial\" function which will attempt to\n\t\t\t\t// parse the \"direct\" colors\n\t\t\t\tmaterial = loader.getMaterial( colorCode );\n\t\t\t\tif ( material === null ) {\n\n\t\t\t\t\t// otherwise throw a warning if this is final opportunity to set the material\n\t\t\t\t\tconsole.warn( `LDrawLoader: Material properties for code ${ colorCode } not available.` );\n\n\t\t\t\t\t// And return the 'missing color' material\n\t\t\t\t\tmaterial = loader.missingColorMaterial;\n\n\t\t\t\t}\n\n\n\t\t\t} else {\n\n\t\t\t\treturn colorCode;\n\n\t\t\t}\n\n\t\t\tif ( c.isLineSegments ) {\n\n\t\t\t\tmaterial = material.userData.edgeMaterial;\n\n\t\t\t\tif ( c.isConditionalLine ) {\n\n\t\t\t\t\tmaterial = material.userData.conditionalEdgeMaterial;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn material;\n\n\t\t}\n\n\t}\n\n\tgetMainMaterial() {\n\n\t\treturn this.getMaterial( MAIN_COLOUR_CODE );\n\n\t}\n\n\tgetMainEdgeMaterial() {\n\n\t\tconst mat = this.getMaterial( MAIN_EDGE_COLOUR_CODE );\n\t\treturn mat ? mat.userData.edgeMaterial : null;\n\n\t}\n\n\tparseColorMetaDirective( lineParser ) {\n\n\t\t// Parses a color definition and returns a THREE.Material\n\n\t\tlet code = null;\n\n\t\t// Triangle and line colors\n\t\tlet fillColor = '#FF00FF';\n\t\tlet edgeColor = '#FF00FF';\n\n\t\t// Transparency\n\t\tlet alpha = 1;\n\t\tlet isTransparent = false;\n\t\t// Self-illumination:\n\t\tlet luminance = 0;\n\n\t\tlet finishType = FINISH_TYPE_DEFAULT;\n\n\t\tlet edgeMaterial = null;\n\n\t\tconst name = lineParser.getToken();\n\t\tif ( ! name ) {\n\n\t\t\tthrow new Error( 'LDrawLoader: Material name was expected after \"!COLOUR tag' + lineParser.getLineNumberString() + '.' );\n\n\t\t}\n\n\t\t// Parse tag tokens and their parameters\n\t\tlet token = null;\n\t\twhile ( true ) {\n\n\t\t\ttoken = lineParser.getToken();\n\n\t\t\tif ( ! token ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( ! parseLuminance( token ) ) {\n\n\t\t\t\tswitch ( token.toUpperCase() ) {\n\n\t\t\t\t\tcase 'CODE':\n\n\t\t\t\t\t\tcode = lineParser.getToken();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'VALUE':\n\n\t\t\t\t\t\tfillColor = lineParser.getToken();\n\t\t\t\t\t\tif ( fillColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tfillColor = '#' + fillColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! fillColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EDGE':\n\n\t\t\t\t\t\tedgeColor = lineParser.getToken();\n\t\t\t\t\t\tif ( edgeColor.startsWith( '0x' ) ) {\n\n\t\t\t\t\t\t\tedgeColor = '#' + edgeColor.substring( 2 );\n\n\t\t\t\t\t\t} else if ( ! edgeColor.startsWith( '#' ) ) {\n\n\t\t\t\t\t\t\t// Try to see if edge color is a color code\n\t\t\t\t\t\t\tedgeMaterial = this.getMaterial( edgeColor );\n\t\t\t\t\t\t\tif ( ! edgeMaterial ) {\n\n\t\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid edge color while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Get the edge material for this triangle material\n\t\t\t\t\t\t\tedgeMaterial = edgeMaterial.userData.edgeMaterial;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ALPHA':\n\n\t\t\t\t\t\talpha = parseInt( lineParser.getToken() );\n\n\t\t\t\t\t\tif ( isNaN( alpha ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid alpha value in material definition' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\talpha = Math.max( 0, Math.min( 1, alpha / 255 ) );\n\n\t\t\t\t\t\tif ( alpha < 1 ) {\n\n\t\t\t\t\t\t\tisTransparent = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LUMINANCE':\n\n\t\t\t\t\t\tif ( ! parseLuminance( lineParser.getToken() ) ) {\n\n\t\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Invalid luminance value in material definition' + LineParser.getLineNumberString() + '.' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CHROME':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_CHROME;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PEARLESCENT':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_PEARLESCENT;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RUBBER':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_RUBBER;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATTE_METALLIC':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_MATTE_METALLIC;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'METAL':\n\t\t\t\t\t\tfinishType = FINISH_TYPE_METAL;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'MATERIAL':\n\t\t\t\t\t\t// Not implemented\n\t\t\t\t\t\tlineParser.setToEnd();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error( 'LDrawLoader: Unknown token \"' + token + '\" while parsing material' + lineParser.getLineNumberString() + '.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet material = null;\n\n\t\tswitch ( finishType ) {\n\n\t\t\tcase FINISH_TYPE_DEFAULT:\n\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_PEARLESCENT:\n\n\t\t\t\t// Try to imitate pearlescency by making the surface glossy\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.3, metalness: 0.25 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_CHROME:\n\n\t\t\t\t// Mirror finish surface\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0, metalness: 1 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_RUBBER:\n\n\t\t\t\t// Rubber finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.9, metalness: 0 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_MATTE_METALLIC:\n\n\t\t\t\t// Brushed metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.8, metalness: 0.4 } );\n\t\t\t\tbreak;\n\n\t\t\tcase FINISH_TYPE_METAL:\n\n\t\t\t\t// Average metal finish\n\t\t\t\tmaterial = new MeshStandardMaterial( { roughness: 0.2, metalness: 0.85 } );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// Should not happen\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.color.setStyle( fillColor, COLOR_SPACE_LDRAW );\n\t\tmaterial.transparent = isTransparent;\n\t\tmaterial.premultipliedAlpha = true;\n\t\tmaterial.opacity = alpha;\n\t\tmaterial.depthWrite = ! isTransparent;\n\n\t\tmaterial.polygonOffset = true;\n\t\tmaterial.polygonOffsetFactor = 1;\n\n\t\tif ( luminance !== 0 ) {\n\n\t\t\tmaterial.emissive.setStyle( fillColor, COLOR_SPACE_LDRAW ).multiplyScalar( luminance );\n\n\t\t}\n\n\t\tif ( ! edgeMaterial ) {\n\n\t\t\t// This is the material used for edges\n\t\t\tedgeMaterial = new LineBasicMaterial( {\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\topacity: alpha,\n\t\t\t\tdepthWrite: ! isTransparent\n\t\t\t} );\n\t\t\tedgeMaterial.color;\n\t\t\tedgeMaterial.userData.code = code;\n\t\t\tedgeMaterial.name = name + ' - Edge';\n\n\t\t\t// This is the material used for conditional edges\n\t\t\tedgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial( {\n\n\t\t\t\tfog: true,\n\t\t\t\ttransparent: isTransparent,\n\t\t\t\tdepthWrite: ! isTransparent,\n\t\t\t\tcolor: new Color().setStyle( edgeColor, COLOR_SPACE_LDRAW ),\n\t\t\t\topacity: alpha,\n\n\t\t\t} );\n\t\t\tedgeMaterial.userData.conditionalEdgeMaterial.userData.code = code;\n\t\t\tedgeMaterial.userData.conditionalEdgeMaterial.name = name + ' - Conditional Edge';\n\n\t\t}\n\n\t\tmaterial.userData.code = code;\n\t\tmaterial.name = name;\n\n\t\tmaterial.userData.edgeMaterial = edgeMaterial;\n\n\t\tthis.addMaterial( material );\n\n\t\treturn material;\n\n\t\tfunction parseLuminance( token ) {\n\n\t\t\t// Returns success\n\n\t\t\tlet lum;\n\n\t\t\tif ( token.startsWith( 'LUMINANCE' ) ) {\n\n\t\t\t\tlum = parseInt( token.substring( 9 ) );\n\n\t\t\t} else {\n\n\t\t\t\tlum = parseInt( token );\n\n\t\t\t}\n\n\t\t\tif ( isNaN( lum ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tluminance = Math.max( 0, Math.min( 1, lum / 255 ) );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\tcomputeBuildingSteps( model ) {\n\n\t\t// Sets userdata.buildingStep number in Group objects and userData.numBuildingSteps number in the root Group object.\n\n\t\tlet stepNumber = 0;\n\n\t\tmodel.traverse( c => {\n\n\t\t\tif ( c.isGroup ) {\n\n\t\t\t\tif ( c.userData.startingBuildingStep ) {\n\n\t\t\t\t\tstepNumber ++;\n\n\t\t\t\t}\n\n\t\t\t\tc.userData.buildingStep = stepNumber;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tmodel.userData.numBuildingSteps = stepNumber + 1;\n\n\t}\n\n}\n\nexport { LDrawLoader };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\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 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\t\t\t\t\t\t\tcolors.push( r, g, 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\tnewColors.push( r, g, b );\n\t\t\t\t\t\tnewColors.push( r, g, b );\n\t\t\t\t\t\tnewColors.push( r, g, 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\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 !== '' ) obj[ nodeName ] = tmp;\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 !== '' ) obj[ nodeName ].push( tmp );\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.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\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\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\tcolors.push( parseFloat( lineValues[ 3 ] ) / 255 );\n\t\t\t\tcolors.push( parseFloat( lineValues[ 4 ] ) / 255 );\n\t\t\t\tcolors.push( parseFloat( lineValues[ 5 ] ) / 255 );\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",null],"names":["TDSLoader","Loader","constructor","manager","super","this","debug","group","materials","meshes","load","url","onLoad","onProgress","onError","scope","path","LoaderUtils","extractUrlBase","loader","FileLoader","setPath","setResponseType","setRequestHeader","requestHeader","setWithCredentials","withCredentials","data","parse","e","console","error","itemError","arraybuffer","Group","readFile","i","length","add","DataView","chunk","Chunk","debugMessage","id","MLIBMAGIC","CMAGIC","M3DMAGIC","next","readChunk","M3D_VERSION","version","readDWord","MDATA","readMeshData","hexId","MESH_VERSION","MASTER_SCALE","scale","readFloat","set","NAMED_OBJECT","readNamedObject","MAT_ENTRY","readMaterialEntry","name","readString","N_TRI_OBJECT","mesh","readMesh","push","material","MeshPhongMaterial","MAT_NAME","MAT_WIRE","wireframe","MAT_WIRE_SIZE","value","readByte","wireframeLinewidth","MAT_TWO_SIDE","side","DoubleSide","MAT_ADDITIVE","blending","AdditiveBlending","MAT_DIFFUSE","color","readColor","MAT_SPECULAR","specular","MAT_AMBIENT","MAT_SHININESS","shininess","readPercentage","MAT_TRANSPARENCY","transparency","opacity","transparent","MAT_TEXMAP","map","readMap","MAT_BUMPMAP","bumpMap","MAT_OPACMAP","alphaMap","MAT_SPECMAP","specularMap","geometry","BufferGeometry","Mesh","POINT_ARRAY","points","readWord","vertices","setAttribute","Float32BufferAttribute","FACE_ARRAY","readFaceArray","TEX_VERTS","texels","uvs","MESH_MATRIX","values","matrix","Matrix4","elements","transpose","inverse","copy","invert","applyMatrix4","decompose","position","quaternion","computeVertexNormals","faces","index","setIndex","materialIndex","start","endOfChunk","subchunk","MSH_MAT_GROUP","readMaterialGroup","count","addGroup","Array","isArray","undefined","texture","TextureLoader","resourcePath","setCrossOrigin","crossOrigin","MAT_MAPNAME","MAT_MAP_UOFFSET","offset","x","MAT_MAP_VOFFSET","y","MAT_MAP_USCALE","repeat","MAT_MAP_VSCALE","numFaces","subChunk","Color","COLOR_24","LIN_COLOR_24","r","g","b","setRGB","COLOR_F","LIN_COLOR_F","INT_PERCENTAGE","readShort","FLOAT_PERCENTAGE","message","log","Function","size","end","byteLength","toString","v","getUint8","getFloat32","readInt","getInt32","getInt16","getUint32","getUint16","s","c","String","fromCharCode","durl","URL","createObjectURL","Blob","type","revokeObjectURL","encodeURI","u8","Uint8Array","u16","Uint16Array","u32","Uint32Array","fleb","fdeb","clim","freb","eb","j","_a","fl","revfl","fd","rev","hMap","cd","mb","l","co","le","rvb","sv","r_1","m","flt","fdt","flrm","fdrm","max","a","bits","d","p","o","bits16","slc","n","subarray","inflt","dat","buf","st","sl","noBuf","noSt","cbuf","bl","nbuf","Math","final","f","pos","bt","lm","dm","lbt","dbt","tbts","t","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","lpos","sym","dsym","et","b2","b4","b8","inflateSync","out","unzlibSync","zlv","td","TextDecoder","decode","stream","strFromU8","latin1","apply","dutf8","slzh","zh","z","fnl","fn","es","bs","z64e","sc","su","off","unzipSync","files","c_2","no","COLOR_SPACE_3MF","SRGBColorSpace","ThreeMFLoader","availableExtensions","buffer","textureLoader","parseRelsXml","relsFileText","relationships","relsNodes","DOMParser","parseFromString","querySelectorAll","relsNode","relationship","target","getAttribute","parseBasematerialsNode","basematerialsNode","basematerialsData","basematerials","basematerialNodes","basematerialData","parseBasematerialNode","parseTextures2DGroupNode","texture2DGroupNode","texture2DGroupData","texid","displaypropertiesid","tex2coordNodes","tex2coordNode","u","parseFloat","Float32Array","parseColorGroupNode","colorGroupNode","colorGroupData","colorNodes","colors","colorObject","setStyle","substring","parseMetallicDisplaypropertiesNode","metallicDisplaypropetiesNode","metallicDisplaypropertiesData","metallicNodes","metallicData","metallicNode","metallicness","roughness","basematerialNode","parseComponentNode","componentNode","componentData","transform","parseTransform","split","forEach","parseObjectNode","objectNode","objectData","pid","pindex","thumbnail","partnumber","meshNode","querySelector","meshData","vertexNodes","vertexNode","triangleProperties","triangles","triangleNodes","triangleNode","v1","v2","v3","p1","p2","p3","triangleProperty","parseInt","Object","keys","parseMeshNode","componentsNode","components","componentNodes","parseComponentsNode","parseModelNode","modelNode","modelData","unit","metadataNodes","metadataData","metadataNode","indexOf","textContent","parseMetadataNodes","resourcesNode","resourcesData","basematerialsNodes","textures2DNodes","texture2DData","texture2DNode","contenttype","tilestyleu","tilestylev","filter","colorGroupNodes","pbmetallicdisplaypropertiesNodes","pbmetallicdisplaypropertiesData","textures2DGroupNodes","textures2DGroupData","objectNodes","parseResourcesNode","buildNode","buildData","itemNodes","itemNode","buildItem","objectId","parseBuildNode","buildTexture","texture2dgroup","objects","textureData","texture2d","resources","blob","sourceURI","colorSpace","wrapS","RepeatWrapping","MirroredRepeatWrapping","ClampToEdgeWrapping","wrapT","magFilter","LinearFilter","minFilter","LinearMipmapLinearFilter","NearestFilter","buildBasematerialsMeshes","objectPindex","materialMap","trianglePropertiesProps","getBuild","buildBasematerial","positionData","jl","buildTexturedMesh","uvData","flatShading","buildVertexColorMesh","colorgroup","colorData","vertexColors","buildDefaultMesh","BufferAttribute","getResourceType","buildGroup","resourceMap","objectPid","analyzeObject","il","resourceId","newMeshes","buildMeshes","builder","build","materialData","pbmetallicdisplayproperties","MeshStandardMaterial","metalness","displaycolor","charAt","buildComposite","compositeData","composite","component","buildObject","object3D","clone","extensions","modelXml","ns","extension","applyExtensions","data3mf","relsName","modelRelsName","zip","file","modelPartNames","texturesPartNames","modelRels","modelParts","texturesParts","textDecoder","fflate.unzipSync","ReferenceError","match","relsView","rels","modelPart","view","fileText","xmlData","documentElement","nodeName","toLowerCase","attributes","attr","RegExp","$1","texturesPartName","model","printTicket","loadDocument","modelsData","modelsKeys","modelRel","textureKey","objectIds","buildObjects","rel","pop","fetch3DModelPart","addExtension","TGALoader","DataTextureLoader","TGA_TYPE_NO_DATA","TGA_TYPE_INDEXED","TGA_TYPE_RGB","TGA_TYPE_GREY","TGA_TYPE_RLE_INDEXED","TGA_TYPE_RLE_RGB","TGA_TYPE_RLE_GREY","TGA_ORIGIN_MASK","TGA_ORIGIN_SHIFT","TGA_ORIGIN_BL","TGA_ORIGIN_BR","TGA_ORIGIN_UL","TGA_ORIGIN_UR","content","header","id_length","colormap_type","image_type","colormap_index","colormap_length","colormap_size","origin","width","height","pixel_size","flags","tgaCheckHeader","use_rle","use_pal","use_grey","imageData","result","pixel_data","palettes","pixel_total","shift","pixels","tgaParse","image","palette","x_start","y_start","x_step","y_step","x_end","y_end","tgaGetImageDataGrey8bits","tgaGetImageDataGrey16bits","colormap","tgaGetImageData8bits","tgaGetImageData16bits","tgaGetImageData24bits","tgaGetImageData32bits","getTgaRGBA","flipY","generateMipmaps","ColladaLoader","text","getElementsByTagName","xml","array","childNodes","child","parseStrings","parts","trim","parseFloats","parseInts","parseId","isEmpty","object","parseAssetUnit","hasAttribute","parseAssetUpAxis","parseLibrary","libraryName","parser","library","buildLibrary","parseAnimationSampler","inputs","nodeType","semantic","parseAnimationChannel","sid","arraySyntax","memberSyntax","member","indices","replace","sampler","buildAnimation","tracks","channels","samplers","sources","hasOwnProperty","channel","inputId","INPUT","outputId","OUTPUT","createKeyframeTracks","buildAnimationChannel","getAnimation","animations","inputSource","outputSource","node","nodes","getNode","transforms","defaultMatrix","time","stride","warn","keyframes","sort","ascending","transformAnimationData","prepareAnimationData","uuid","Vector3","Quaternion","animation","times","quaternionData","scaleData","keyframe","fromArray","w","VectorKeyframeTrack","QuaternionKeyframeTrack","property","defaultValue","empty","prev","getPrev","getNext","interpolate","createMissingKeyframes","key","buildAnimationClip","duration","animationTracks","AnimationClip","getAnimationClip","clips","parseSkin","bindShapeMatrix","parseSource","joints","parseJoints","vertexWeights","parseVertexWeights","vcount","buildController","geometries","skin","BONE_LIMIT","weights","jointOffset","JOINT","weightOffset","WEIGHT","jointSource","inverseSource","INV_BIND_MATRIX","jointCount","vertexSkinData","skinIndex","skinWeight","weight","descending","bindMatrix","identity","boneInverse","buildSkin","skinIndices","skinWeights","buildImage","init_from","getImage","images","parseEffectProfileCOMMON","surfaces","parseEffectNewparam","technique","parseEffectTechnique","extra","parseEffectExtra","parseEffectSurface","parseEffectSampler","source","parameters","parseEffectParameters","parseEffectParameter","opaque","parseEffectParameterTexture","parseEffectParameterTextureExtra","parseEffectParameterTextureExtraTechnique","toUpperCase","parseEffectExtraTechniqueBump","parseEffectExtraTechnique","texcoord","buildEffect","buildMaterial","effect","effects","profile","MeshLambertMaterial","MeshBasicMaterial","getTexture","textureObject","slice","lastIndexOf","tgaLoader","getTextureLoader","wrapU","wrapV","offsetU","offsetV","repeatU","repeatV","parameter","normalMap","lightMap","float","emissive","emissiveMap","convertSRGBToLinear","techniques","k","FrontSide","normalScale","Vector2","getMaterial","parseCameraOptics","parseCameraTechnique","parseCameraParameters","buildCamera","camera","optics","PerspectiveCamera","yfov","aspect_ratio","znear","zfar","ymag","xmag","aspectRatio","OrthographicCamera","getCamera","cameras","parseLightTechnique","parseLightParameters","falloffAngle","distance","sqrt","buildLight","light","DirectionalLight","PointLight","SpotLight","AmbientLight","getLight","lights","accessor","parseGeometryVertices","parseGeometryPrimitive","primitive","hasUV","inputname","checkUVCoordinates","primitives","uvsNeedsFix","buildGeometry","groupedPrimitives","groupPrimitives","primitiveType","buildGeometryType","normal","uv","uv1","materialKeys","vc","input","prevLength","buildGeometryData","isColor","pushVector","sourceStride","sourceArray","startIndex","tempColor","kl","getGeometry","buildKinematicsModel","parseKinematicsTechniqueCommon","parseKinematicsJoint","links","parseKinematicsLink","parseKinematicsJointParameter","axis","limits","min","static","zeroPosition","middlePosition","attachments","parseKinematicsAttachment","parseKinematicsTransform","joint","obj","angle","MathUtils","degToRad","parsePhysicsRigidBody","parsePhysicsTechniqueCommon","inertia","mass","parseKinematicsBindJointAxis","param","tmpJointIndex","jointIndex","buildKinematicsScene","buildTransformList","collada","vector","parseNode","instanceCameras","instanceControllers","instanceLights","instanceGeometries","instanceNodes","parseNodeInstance","multiply","makeTranslation","makeRotationAxis","hasNode","skeletons","instances","instance","symbol","buildSkeleton","boneData","sortedBoneData","skeleton","root","buildBoneHierarchy","visualScenes","children","bone","processed","bones","boneInverses","Skeleton","traverse","isBone","instanceCamera","controller","controllers","newObjects","isSkinnedMesh","bind","normalizeSkinWeights","instanceLight","Bone","fallbackMaterial","resolveMaterialBinding","instanceMaterials","LineBasicMaterial","isMeshPhongMaterial","isMeshLambertMaterial","lineMaterial","skinning","LineSegments","Line","SkinnedMesh","buildVisualScene","getVisualScene","scene","Scene","parserError","errorElement","errorText","stack","Node","TEXT_NODE","parserErrorToText","asset","upAxis","parseAsset","kinematics","kinematicsModels","physicsModels","kinematicsScenes","parseAnimation","hasChildren","generateUUID","element","prepareNodes","rigidBodies","bindJointAxis","setupAnimations","kinematicsModelId","kinematicsSceneId","visualSceneId","kinematicsModel","kinematicsScene","getKinematicsScene","visualScene","jointMap","targetElement","parentVisualElement","parentElement","connect","visualElement","visualElementName","m0","getJointValue","jointData","setJointValue","setupKinematics","parseScene","rotation","PI","multiplyScalar","AMFLoader","loadMaterials","matName","matId","loadedMaterial","matChildEl","loadColor","matColor","loadMeshVolume","volume","materialid","currVolumeNode","firstElementChild","materialId","nodeValue","nextElementSibling","loadMeshVertices","vertArray","normalArray","currVerticesNode","vNode","nx","ny","nz","normals","loadObject","objId","loadedObject","currColor","currObjNode","currMeshNode","volumes","loadedVertices","concat","amfName","amfAuthor","amfScale","scaleUnits","millimeter","inch","feet","meter","micron","loadDocumentScale","amfMaterials","amfObjects","sceneObject","defaultMaterial","userData","author","part","newObject","objDefaultMaterial","newGeometry","GCodeLoader","splitLayer","state","extruding","relative","layers","currentLayer","pathMaterial","extrudingMaterial","newLayer","line","vertex","pathVertex","delta","absolute","lines","tokens","cmd","args","splice","token","addObject","segments","layer","layerVertex","layerPathVertex","BVHLoader","animateBonePositions","animateBoneRotations","readFrameData","frameTime","frames","quat","vx","vy","vz","setFromAxisAngle","readNode","firstline","list","nextLine","isNaN","numChannels","numFrames","readBvh","threeBones","toTHREEBone","threeClip","positions","rotations","frame","toTHREEAnimation","clip","VOXLoader","DEFAULT_PALETTE","chunks","chunkSize","numVoxels","VOXMesh","px","py","pz","_color","tile","offsety","offsetz","hasColors","hex","MDDLoader","totalFrames","totalPoints","fill","track","NumberKeyframeTrack","morphTargets","morphTarget","attribute","PCDLoader","littleEndian","textData","PCDheader","result1","search","result2","exec","headerLen","str","fields","viewpoint","sizeSum","rowSize","parseHeader","intensity","label","rgb","rgb_field_index","findIndex","field","rgb_type","farr","Int32Array","normal_x","normal_y","normal_z","sizes","compressedSize","decompressedSize","decompressed","inData","outLength","inLength","outData","ctrl","len","ref","inPtr","outPtr","Error","decompressLZF","dataview","xIndex","yIndex","zIndex","rgbIndex","intensityIndex","labelIndex","row","Int32BufferAttribute","computeBoundingSphere","PointsMaterial","Points","TiltLoader","metadata","JSON","fflate.strFromU8","num_strokes","brushes","brush_index","brush_color","brush_size","stroke_mask","controlpoint_mask","offset_stroke_mask","offset_controlpoint_mask","byte","num_control_points","quaternions","StrokeGeometry","BrushIndex","strokes","prevPosition","prevQuaternion","vector1","vector2","vector3","vector4","stroke","rgba","alpha","applyQuaternion","BRUSH_LIST_ARRAY","common","BloomColor","LinearToSrgb","hsv","SrgbToLinear","shaders","GUID","RawShaderMaterial","Light","uniforms","mainTex","alphaTest","emission_gain","vertexShader","fragmentShader","depthFunc","depthWrite","depthTest","blendDst","blendDstAlpha","blendEquation","blendEquationAlpha","blendSrc","blendSrcAlpha","getShaders","R","exports","Er","Pt","defineProperty","VERSION","module","__spreadArray","call","isObject","reject","has","contains","find","cloneArr","cloneObj","prototype","reduce","assignNoOverwrite","arguments","toFastProperties","timer","peek","isES2015MapSupported","PRINT_WARNING","PRINT_ERROR","packArray","IDENTITY","NOOP","merge","groupBy","defaults","assign","zipObject","sortBy","some","difference","every","isRegExp","partial","uniq","compact","findAll","pick","dropRight","drop","isFunction","isUndefined","isString","last","first","flatten","mapValues","Map","Date","getTime","toBecomeFast","FakeConstructor","fakeInstance","fakeAccess","bar","xt","sn","St","self","saveState","idx","groupIdx","restoreState","pattern","consumeChar","disjunction","A","loc","begin","global","ignoreCase","multiLine","unicode","sticky","isRegExpFlag","popChar","alternative","peekChar","isTerm","term","isAssertion","assertion","atom","quantifier","atLeast","atMost","Infinity","_","integerIncludingZero","isDigit","greedy","dotAll","atomEscape","characterClass","isPatternCharacter","patternCharacter","isQuantifier","complement","decimalEscapeAtom","characterClassEscape","controlEscapeAtom","controlLetterEscapeAtom","nulCharacterAtom","hexEscapeSequenceAtom","regExpUnicodeEscapeSequenceAtom","identityEscapeAtom","positiveInteger","test","charCodeAt","parseHexDigits","classPatternCharacterAtom","isClassAtom","classAtom","isRangeDash","from","to","classEscape","capturing","isAtom","visitChildren","visit","visitPattern","visitFlags","visitDisjunction","visitAlternative","visitStartAnchor","visitEndAnchor","visitWordBoundary","visitNonWordBoundary","visitLookahead","visitNegativeLookahead","visitCharacter","visitSet","visitGroup","visitGroupBackReference","visitQuantifier","RegExpParser","BaseRegExpVisitor","define","amd","regexpToAst","Lt","He","clearRegExpParserCache","getRegExpAst","Ga","Ct","Wa","pn","re","ja","__extends","setPrototypeOf","__proto__","TypeError","create","canMatchCharCode","firstCharOptimizedIndices","getOptimizedStartCodesIndices","failedOptimizationPrefixMsg","un","pe","cn","Ce","Tr","ln","Mt","minOptimizationVal","charCodeToOptimizedIndex","yr","Ka","za","targetCharCodes","found","T","hn","buildLineBreakIssueMessage","LineTerminatorOptimizedTester","isShortPattern","isCustomPattern","cloneEmptyGroups","performWarningRuntimeChecks","performRuntimeChecks","addStickyFlag","addStartOfInput","findUnreachablePatterns","findModesThatDoNotExist","findInvalidGroupType","findDuplicatePatterns","findUnsupportedFlags","findStartOfInputAnchor","findEmptyMatchRegExps","findEndOfInputAnchor","findInvalidPatterns","findMissingPatterns","validatePatterns","analyzeTokenTypes","enableSticky","disableSticky","SUPPORT_STICKY","MODES","DEFAULT_MODE","dn","F","ft","h","Ye","vn","Ae","yn","LexerDefinitionErrorType","MISSING_PATTERN","tokenTypes","errors","valid","_n","INVALID_PATTERN","useSticky","safeMode","positionTracking","lineTerminatorCharacters","tracer","Ft","$a","Lexer","NA","gr","_r","L","se","tokenTypeIdx","GROUP","SKIPPED","LONGER_ALT","PUSH_MODE","Tn","LINE_BREAKS","En","PATTERN","Ar","mn","longerAlt","canLineTerminator","isCustom","short","tokenType","Or","Rr","START_CHARS_HINT","fe","ue","te","ensureOptimizations","Z","emptyGroups","patternIdxToConfig","charCodeToPatternIdxToConfig","hasCustom","canBeOptimized","On","In","kn","Pn","Nn","Qa","gn","An","Rn","eo","EOI_ANCHOR_FOUND","EMPTY_MATCH_PATTERN","SOI_ANCHOR_FOUND","multiline","UNSUPPORTED_FLAGS_FOUND","join","DUPLICATE_PATTERNS_FOUND","INVALID_GROUP_TYPE_FOUND","PUSH_MODE_DOES_NOT_EXIST","ro","UNREACHABLE_PATTERN","issue","IDENTIFY_TERMINATOR","errMsg","CUSTOM_LINE_BREAK","Sn","MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE","MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY","modes","defaultMode","MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST","LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED","NO_LINE_BREAKS_FLAGS","lastIndex","Xe","N","isTokenType","hasExtendingTokensTypesMapProperty","hasExtendingTokensTypesProperty","hasCategoriesProperty","hasShortKeyProperty","singleAssignCategoriesToksMap","assignCategoriesMapProp","assignCategoriesTokensProp","assignTokenDefaultProps","expandCategories","augmentTokenTypes","tokenIdxToClass","tokenShortNameIdx","tokenStructuredMatcherNoCategories","tokenStructuredMatcher","V","xn","CATEGORIES","Cn","bn","Nr","Fn","categoryMatches","wn","categoryMatchesMap","Ln","Mn","Ir","isParent","kr","wt","defaultLexerErrorProvider","buildUnableToPopLexerModeMessage","buildUnexpectedCharactersMessage","qe","Ee","fo","po","ho","pt","deferDefinitionErrorsHandling","lineTerminatorsPattern","errorMessageProvider","traceInitPerf","skipValidations","freeze","mo","lexerDefinition","lexerDefinitionErrors","lexerDefinitionWarning","config","trackStartLines","trackEndLines","canModeBeOptimized","traceInitMaxIdent","traceInitIndent","TRACE_INIT","chopInput","matchWithTest","updateLastIndex","matchWithExec","handleModes","computeNewColumn","updateTokenEndLineColumnLocation","createTokenInstance","createFullToken","createStartOnlyToken","createOffsetOnlyToken","addToken","addTokenUsingPush","handlePayload","handlePayloadWithCustom","addTokenUsingMemberAccess","handlePayloadNoCustom","tokenize","tokenizeInternal","floor","Q","xe","it","at","Ke","we","ot","It","Qr","Jr","en","J","ze","me","wa","startOffset","startLine","column","startColumn","Ua","tn","rn","nn","Da","De","ut","payload","fr","pr","kt","hr","dr","vr","an","on","ct","mr","groups","endLine","endColumn","endOffset","Ue","H","tokenMatcher","EOF","createToken","hasTokenLabel","tokenName","tokenLabel","Te","Eo","Pr","Dn","LABEL","_o","Un","Gn","Wn","Bn","qn","jn","Vn","Kn","zn","POP_MODE","go","ne","S","Le","serializeProduction","serializeGrammar","Terminal","Alternation","RepetitionWithSeparator","Repetition","RepetitionMandatoryWithSeparator","RepetitionMandatory","Option","Alternative","Rule","NonTerminal","AbstractProduction","G","Oo","Re","_definition","get","enumerable","configurable","accept","definition","Hn","referencedRule","Yn","orgText","Xn","ignoreAmbiguities","$n","Zn","Qn","Jn","ei","ti","hasPredicates","Dt","ht","nonTerminalName","separator","terminalType","Gt","Ut","RestWalker","Sr","ie","Io","walk","walkProdRef","walkTerminal","walkFlat","walkOption","walkAtLeastOne","walkAtLeastOneSep","walkManySep","walkMany","walkOr","ri","$e","Wt","GAstVisitor","Oe","ko","visitNonTerminal","visitOption","visitRepetitionMandatory","visitRepetitionMandatoryWithSeparator","visitRepetitionWithSeparator","visitRepetition","visitAlternation","visitTerminal","visitRule","vt","X","Po","collectMethods","DslMethodsCollectorVisitor","getProductionDslName","isBranchingProd","isOptionalProd","isSequenceProd","W","So","xr","ni","dslMethods","option","alternation","repetition","repetitionWithSeparator","repetitionMandatory","repetitionMandatoryWithSeparator","reset","Bt","Lr","Ne","firstForTerminal","firstForBranching","firstForSequence","qt","ii","Cr","jt","si","ai","oi","Mr","Vt","IN","pi","he","bo","buildInProdFollowPrefix","buildBetweenProdsFollowPrefix","computeAllProdsFollows","ResyncFollowsWalker","Fo","wo","ui","ci","Do","fi","topProd","follows","startWalking","li","mt","Me","defaultGrammarValidatorErrorProvider","defaultGrammarResolverErrorProvider","defaultParserErrorProvider","Ze","Wo","ye","br","hi","buildMismatchTokenMessage","expected","actual","previous","ruleName","buildNotAllInputParsedMessage","firstRedundant","buildNoViableAltMessage","expectedPathsPerAlt","customUserDescription","buildEarlyExitMessage","expectedIterationPaths","buildRuleNotFoundError","buildDuplicateFoundError","buildNamespaceConflictError","buildAlternationPrefixAmbiguityError","prefixPath","ambiguityIndices","topLevelRule","buildAlternationAmbiguityError","buildEmptyRepetitionError","buildTokenNameError","buildEmptyAlternationError","emptyChoiceIdx","buildTooManyAlternativesError","buildLeftRecursionError","leftRecursionPath","buildInvalidRuleNameError","buildDuplicateRuleNameError","grammarName","mi","Ge","Bo","GastRefResolverVisitor","resolveGrammar","qo","ce","di","jo","vi","resolveRefs","nameToTopRule","errMsgProvider","currTopLevel","ParserDefinitionErrorType","UNRESOLVED_SUBRULE_REF","unresolvedRefName","Tt","je","nextPossibleTokensAfter","possiblePathsFrom","NextTerminalAfterAtLeastOneSepWalker","NextTerminalAfterAtLeastOneWalker","NextTerminalAfterManySepWalker","NextTerminalAfterManyWalker","AbstractNextTerminalAfterProductionWalker","NextAfterTokenWalker","AbstractNextPossibleTokensWalker","Ei","I","Ko","O","Ti","possibleTokTypes","nextProductionName","nextProductionOccurrence","isAtEndOfPath","ruleStack","reverse","occurrenceStack","updateExpectedNext","zo","nextTerminalName","nextTerminalOccurrence","lastTok","lastTokOccurrence","Et","topRule","occurrence","isEndOfRule","Ho","Yo","Xo","$o","Zo","def","yi","partialPath","suffixDef","nextTokenType","nextTokenOccurrence","yt","C","_i","areTokenCategoriesNotUsed","isStrictPrefixOfPath","containsPath","getLookaheadPathsForOptionalProd","getLookaheadPathsForOr","lookAheadSequenceFromAlternatives","buildSingleAlternativeLookaheadFunction","buildAlternativesLookAheadFunc","buildLookaheadFuncForOptionalProd","buildLookaheadFuncForOr","getProdType","PROD_TYPE","D","gi","Jo","Kt","We","OPTION","REPETITION","REPETITION_MANDATORY","REPETITION_MANDATORY_WITH_SEPARATOR","REPETITION_WITH_SEPARATOR","ALTERNATION","Ai","Fr","Ri","GATE","LA","os","targetOccurrence","targetProdType","restDef","checkIsTarget","Oi","targetRef","Ni","wr","ss","Dr","Ii","jr","Ur","checkPrefixAlternativesAmbiguities","validateSomeNonEmptyLookaheadPath","validateTooManyAlts","RepetionCollector","validateAmbiguousAlternationAlternatives","validateEmptyOrAlternative","getFirstNoneTerminal","validateNoLeftRecursion","validateRuleIsOverridden","validateRuleDoesNotAlreadyExist","OccurrenceValidationCollector","identifyProductionForDuplicates","validateGrammar","M","B","Ie","Gr","Qe","cs","_e","Wr","Li","Mi","bi","allProductions","DUPLICATE_PRODUCTIONS","dslName","ls","Br","Pi","Si","Ci","CONFLICT_TOKENS_RULES_NAMESPACE","fs","xi","ki","DUPLICATE_RULE_NAME","_t","LEFT_RECURSION","INVALID_RULE_OVERRIDE","qr","alternations","NONE_LAST_EMPTY_ALT","maxLookahead","alts","AMBIGUOUS_ALTS","alternatives","ds","Fi","wi","TOO_MANY_ALTS","NO_NON_EMPTY_LOOKAHEAD","AMBIGUOUS_PREFIX_ALTS","Ui","Je","Vr","vs","ms","Di","rules","ae","gt","EarlyExitException","NotAllInputParsedException","NoViableAltException","MismatchedTokenException","isRecognitionException","ys","Gi","Wi","Bi","qi","ji","zt","resyncedTokens","captureStackTrace","gs","previousToken","As","Rs","Os","zr","$","attemptInRepetitionRecovery","Recoverable","InRuleRecoveryException","IN_RULE_RECOVERY_EXCEPTION","EOF_FOLLOW_KEY","Ht","de","Ns","Is","ks","Kr","Ps","initRecoverable","firstAfterRepMap","resyncFollows","recoveryEnabled","DEFAULT_PARSER_CONFIG","Vi","getTokenToInsert","NaN","isInsertedInRecovery","canTokenTypeBeInsertedInRecovery","tryInRepetitionRecovery","findReSyncTokenType","exportLexerState","getCurrRuleFullName","SAVE_ERROR","SKIP_TOKEN","addToResyncTokens","importLexerState","shouldInRepetitionRecoveryBeTried","isBackTracking","canPerformInRuleRecovery","getFollowsForInRuleRecovery","getCurrentGrammarPath","getNextPossibleTokenTypes","tryInRuleRecovery","canRecoverWithSingleTokenInsertion","canRecoverWithSingleTokenDeletion","consumeToken","isInCurrentRuleReSyncSet","getCurrFollowKey","getFollowSetFromFollowKey","flattenFollowSet","RULE_STACK","getLastExplicitRuleShortName","getLastExplicitRuleOccurrenceIndex","getPreviousExplicitRuleShortName","shortRuleNameToFullName","idxInCallingRule","inRule","buildFullFollowKeyStack","RULE_OCCURRENCE_STACK","reSyncTo","getHumanReadableRuleStack","getKeyForAutomaticLookahead","getGAstProductions","Yt","P","AT_LEAST_ONE_SEP_IDX","MANY_SEP_IDX","AT_LEAST_ONE_IDX","MANY_IDX","OPTION_IDX","OR_IDX","BITS_FOR_ALT_IDX","BITS_FOR_RULE_IDX","BITS_FOR_OCCURRENCE_IDX","BITS_FOR_METHOD_TYPE","zi","Xt","LooksAhead","be","ge","Ki","Fe","Ve","xs","initLooksAhead","dynamicTokensEnabled","lookAheadFuncsCache","getLaFuncFromCache","getLaFuncFromMap","setLaFuncCache","setLaFuncCacheUsingMap","getLaFuncFromObj","setLaFuncUsingObj","preComputeLookaheadFunctions","lookAheadBuilderForAlternatives","fullRuleNameToShort","computeLookaheadFunc","lookAheadBuilderForOptional","Hi","ke","addNoneTerminalToCst","addTerminalToCst","setNodeLocationFull","setNodeLocationOnlyOffset","Hr","Be","defineNameProp","functionName","classNameFromInstance","Fs","Yi","Xi","getOwnPropertyDescriptor","writable","ea","Y","validateRedundantMethods","validateMissingCstMethods","validateVisitor","CstVisitorDefinitionError","createBaseVisitorConstructorWithDefaults","createBaseSemanticVisitorConstructor","defaultVisit","Yr","ve","At","$i","Zi","Qi","Ji","msg","MISSING_METHOD","methodName","_RULE_NAMES","REDUNDANT_METHOD","Ws","ra","$t","TreeBuilder","tt","K","ta","Bs","qs","initTreeBuilder","CST_STACK","outputCst","nodeLocationTracking","setNodeLocationFromToken","setNodeLocationFromNode","cstPostRule","setInitialNodeLocation","setInitialNodeLocationFullRecovery","cstPostRuleFull","setInitialNodeLocationFullRegular","setInitialNodeLocationOnlyOffsetRecovery","cstPostRuleOnlyOffset","setInitialNodeLocationOnlyOffsetRegular","cstInvocationStateUpdate","cstFinallyStateUpdate","cstPostTerminal","cstPostNonTerminal","location","getBaseCstVisitorConstructor","baseCstVisitorConstructor","className","gastProductionsCache","getBaseCstVisitorConstructorWithDefaults","baseCstVisitorWithDefaultsConstructor","ia","Zt","LexerAdapter","na","js","initLexerAdapter","tokVector","tokVectorLength","currIdx","selfAnalysisDone","END_OF_FILE","resetLexerState","moveToTerminatedState","getLexerPosition","oa","Qt","RecognizerApi","aa","Vs","Xr","Ks","zs","Hs","Ys","ACTION","consume","consumeInternal","subrule","subruleInternal","optionInternal","or","orInternal","many","manyInternal","atLeastOne","atLeastOneInternal","CONSUME","CONSUME1","CONSUME2","CONSUME3","CONSUME4","CONSUME5","CONSUME6","CONSUME7","CONSUME8","CONSUME9","SUBRULE","SUBRULE1","SUBRULE2","SUBRULE3","SUBRULE4","SUBRULE5","SUBRULE6","SUBRULE7","SUBRULE8","SUBRULE9","OPTION1","OPTION2","OPTION3","OPTION4","OPTION5","OPTION6","OPTION7","OPTION8","OPTION9","OR","OR1","OR2","OR3","OR4","OR5","OR6","OR7","OR8","OR9","MANY","MANY1","MANY2","MANY3","MANY4","MANY5","MANY6","MANY7","MANY8","MANY9","MANY_SEP","manySepFirstInternal","MANY_SEP1","MANY_SEP2","MANY_SEP3","MANY_SEP4","MANY_SEP5","MANY_SEP6","MANY_SEP7","MANY_SEP8","MANY_SEP9","AT_LEAST_ONE","AT_LEAST_ONE1","AT_LEAST_ONE2","AT_LEAST_ONE3","AT_LEAST_ONE4","AT_LEAST_ONE5","AT_LEAST_ONE6","AT_LEAST_ONE7","AT_LEAST_ONE8","AT_LEAST_ONE9","AT_LEAST_ONE_SEP","atLeastOneSepFirstInternal","AT_LEAST_ONE_SEP1","AT_LEAST_ONE_SEP2","AT_LEAST_ONE_SEP3","AT_LEAST_ONE_SEP4","AT_LEAST_ONE_SEP5","AT_LEAST_ONE_SEP6","AT_LEAST_ONE_SEP7","AT_LEAST_ONE_SEP8","AT_LEAST_ONE_SEP9","RULE","DEFAULT_RULE_CONFIG","definedRulesNames","definitionErrors","defineRule","OVERRIDE_RULE","BACKTRACK","isBackTrackingStack","saveRecogState","reloadRecogState","getSerializedGastProductions","la","Jt","RecognizerEngine","q","er","sa","rt","ua","Xs","ca","Rt","$s","Zs","initRecognizerEngine","shortRuleNameToFull","ruleShortNameIdx","tokensMap","resyncEnabled","recoveryValueFunc","invokeRuleCatch","ruleFinallyStateUpdate","ruleInvocationStateUpdate","originalGrammarAction","recoveredNode","partialCstResult","optionInternalLogic","DEF","atLeastOneInternalLogic","raiseEarlyExitException","ERR_MSG","doSingleRepetition","atLeastOneSepFirstInternalLogic","SEP","repetitionSepSecondInternal","manyInternalLogic","manySepFirstInternalLogic","ALT","raiseNoAltException","isAtEndOfInput","ARGS","subruleInternalError","consumeInternalError","consumeInternalRecovery","lexerState","pa","tr","ErrorHandler","$r","Zr","fa","Qs","Js","initErrorHandler","_errors","context","ruleOccurrenceStack","va","rr","ContentAssist","ha","da","eu","initContentAssist","computeContentAssist","Ra","nr","GastRecorder","oe","Pe","tu","ma","Ea","ru","nu","ir","description","ya","pow","ga","iu","ou","initGastRecorder","recordingProdStack","RECORDING_PHASE","enableRecording","consumeInternalRecord","subruleInternalRecord","optionInternalRecord","orInternalRecord","manyInternalRecord","manySepFirstInternalRecord","atLeastOneInternalRecord","atLeastOneSepFirstInternalRecord","ACTION_RECORD","BACKTRACK_RECORD","LA_RECORD","disableRecording","topLevelRuleRecord","KNOWN_RECORDER_ERROR","Ot","au","ar","Aa","stringify","MAX_LOOKAHEAD","IGNORE_AMBIGUITIES","Na","PerformanceTracer","Oa","uu","initPerformanceTracer","Ia","sr","applyMixins","getOwnPropertyNames","U","ka","EmbeddedActionsParser","CstParser","Parser","EMPTY_ALT","ee","lu","Pa","Sa","xa","fu","pu","hu","du","vu","mu","Eu","Tu","yu","_u","gu","INVALID_RULE_NAME","INVALID_TOKEN_NAME","ur","performSelfAnalysis","DEFER_DEFINITION_ERRORS_HANDLING","Ou","Nu","La","cr","createSyntaxDiagramsCode","Ca","resourceBase","css","chevrotain","E","clearCache","ku","lr","Ma","nt","Pu","Nt","Su","Se","ba","xu","Lu","Mu","Fa","VRMLLoader","nodeMap","buildNodeMap","fieldValues","USE","identifier","isObject3D","isMaterial","resolveUSE","fieldName","parseFieldChildren","buildGroupingNode","groundAngle","groundColor","skyAngle","skyColor","radius","skyGeometry","SphereGeometry","skyMaterial","fog","BackSide","paintFaces","toColorArray","sky","groundGeometry","groundMaterial","ground","renderOrder","buildBackgroundNode","_type","pointsMaterial","_solid","Object3D","visible","buildShapeNode","transformData","diffuseColor","emissiveColor","specularColor","textureNode","__type","TEXTURE_TYPE","INTENSITY_ALPHA","RGB","RGBA","center","translation","buildAppearanceNode","buildMaterialNode","buildImageTextureNode","textureType","getTextureType","parseHexColor","DataTexture","needsUpdate","buildPixelTextureNode","buildTextureTransformNode","coord","texCoord","colorIndex","coordIndex","normalIndex","texCoordIndex","ccw","solid","creaseAngle","colorPerVertex","normalPerVertex","colorNode","coordNode","normalNode","texCoordNode","triangulatedCoordIndex","triangulateFaceIndex","colorAttribute","normalAttribute","uvAttribute","computeAttributeFromIndexedData","toNonIndexedAttribute","computeAttributeFromFaceData","triangulateFaceData","flattenData","computeNormalAttribute","positionAttribute","buildIndexedFaceSetNode","expandedLineIndex","expandLineIndex","computeAttributeFromLineData","expandLineData","buildIndexedLineSetNode","buildPointSetNode","BoxGeometry","buildBoxNode","openEnded","ConeGeometry","buildConeNode","CylinderGeometry","buildCylinderNode","buildSphereNode","xDimension","zDimension","xSpacing","zSpacing","buildElevationGridNode","orientation","crossSection","spine","beginCap","endCap","crossSectionClosed","spineVector","scaling","spineCount","crossSectionCount","contour","ShapeUtils","triangulateShape","capIndices","face","indexOffset","buildExtrusionNode","buildGeometricNode","worldInfo","title","info","buildWorldInfoNode","INTENSITY","num_components","owner","i1","i2","i3","triangulatedData","vA","vB","vC","uvA","uvB","uvC","itemSize","faceData","lineData","array2","index2","ab","cb","vertexNormals","Face","subVectors","cross","normalize","nA","weightedNormal","nB","nC","angleTo","angles","topDown","thresholds","startAngle","point","setFromSphericalCoords","getX","thresholdIndexA","thresholdIndexB","fromBufferAttribute","thresholdA","thresholdB","abs","colorA","colorB","lerp","setXYZ","tree","tokenData","RouteIdentifier","Identifier","longer_alt","nodeTypes","Version","NodeName","ROUTE","TO","StringLiteral","HexLiteral","NumberLiteral","TrueLiteral","FalseLiteral","NullLiteral","LSquare","RSquare","LCurly","RCurly","Comment","tokenVocabulary","createTokens","lexer","VRMLLexer","VRMLParser","visitor","BaseVRMLVisitor","VRMLToASTVisitor","vrml","ctx","routes","route","singleFieldValue","multiFieldValue","use","processField","FROM","stringLiteral","numberLiteral","hexLiteral","createVisitor","lexingResult","lex","cstOutput","generateVRMLTree","parseTree","inputText","MAIN_COLOUR_CODE","MAIN_EDGE_COLOUR_CODE","COLOR_SPACE_LDRAW","_tempVec0","_tempVec1","LDrawConditionalLineMaterial","ShaderMaterial","UniformsUtils","UniformsLib","diffuse","defineProperties","setValues","isLDrawConditionalLineMaterial","ConditionalLineSegments","isConditionalLine","_ray","Ray","isPartType","LineParser","lineNumber","lineLength","currentCharIndex","currentChar","seekNonSpace","getToken","pos0","pos1","getVector","getRemainingString","isAtTheEnd","setToEnd","getLineNumberString","LDrawParsedCache","_cache","cloneResult","original","colorCode","faceNormal","conditionalSegments","controlPoints","lineSegments","category","keywords","subobjects","fileName","totalFaces","startingBuildingStep","async","triedLowerCase","locationState","subobjectURL","fileLoader","partsLibraryPath","loadAsync","getLocalMaterial","numLines","parsingEmbeddedFiles","currentEmbeddedFileName","currentEmbeddedText","bfcCertified","bfcCCW","bfcInverted","bfcCull","lineIndex","startsWith","setData","lp","lineType","segment","doubleSided","v0","c0","c1","meta","parseColorMetaDirective","code","newKeywords","keyword","posX","posY","posZ","m1","m2","m3","m4","m5","m6","m7","m8","fileMap","inverted","getData","Promise","fetchData","then","getMaterialFromCode","parentColorCode","materialHierarchy","forEdge","LDrawPartsGeometryCache","parseCache","faceMaterials","Set","processInfoSubobjects","subobject","promises","promise","ensureDataLoaded","subobjectInfo","loadModel","catch","subobjectInfos","all","isGroup","subobjectGroup","applyMaterialsToMesh","parentLineSegments","parentConditionalSegments","parentFaces","matrixScaleInverted","determinant","lineColorCode","tri","smoothNormals","checkSubSegments","crossVectors","generateFaceNormals","hashMultiplier","hashVertex","hashEdge","toNormalizedRay","targetRay","direction","scalar","dot","addScaledVector","hashRay","ray","hardEdges","hardEdgeRays","halfEdgeList","rh1","rh2","distances","d0","d1","vertCount","hash","rayHash","halfEdge","queue","vertNormals","reverseHash","otherInfo","otherTri","otherIndex","otherNormals","otherVertCount","otherFaceNormal","otherNext","norm","sharedNormal1","sharedNormal2","createObject","hasCachedModel","getCachedModel","processIntoMesh","sortByMaterial","elementSize","isConditionalSegments","totalElements","quadArray","bufferGeometry","prevMaterial","index0","numGroupVerts","iElem","nElem","elem","elemNormals","edgeMaterial","conditionalEdgeMaterial","object3d","controlArray0","controlArray1","directionArray","LDrawLoader","materialLibrary","partsCache","setMaterials","missingColorMaterial","missingEdgeColorMaterial","missingConditionalEdgeColorMaterial","setPartsLibraryPath","colorLineRegex","directive","parseModel","computeBuildingSteps","addMaterial","setFileMap","matLib","finalMaterialPass","parentIsPassthrough","isLineSegments","isMesh","getMainMaterial","getMainEdgeMaterial","mat","lineParser","fillColor","edgeColor","isTransparent","luminance","finishType","parseLuminance","premultipliedAlpha","polygonOffset","polygonOffsetFactor","lum","stepNumber","buildingStep","numBuildingSteps","VTKLoader","Float32Concat","second","firstLength","Int32Concat","stringFile","Base64toByteArray","b64","Arr","revLookup","placeHolders","arr","tmp","parseDataArray","ele","compressed","txt","numBytes","json","header_type","format","textNode","byteData","dataPointSize","blocks","headerSize","dataOffsets","currentOffset","cSizeStart","currentBlockSize","fflate.unzlibSync","el","xmlToJson","item","hasChildNodes","old","PolyData","piece","Piece","sections","sectionIndex","numberOfSections","section","DataArray","dataArrayIndex","numberOfDataArrays","numberOfPoints","NumberOfPoints","normalsName","Normals","Name","NumberOfComponents","numberOfStrips","NumberOfStrips","connectivity","indicesIndex","strip","len1","len0","numberOfPolys","NumberOfPolys","connectivityIndex","poly","parseXML","includes","patWord","pat3Floats","patConnectivity","patPOINTS","patPOLYGONS","patTRIANGLE_STRIPS","patPOINT_DATA","patCELL_DATA","patCOLOR_SCALARS","patNORMALS","inPointsSection","inPolygonsSection","inTriangleStripSection","inPointDataSection","inCellDataSection","inColorSection","inNormalsSection","dataset","numVertices","inds","i0","toNonIndexed","numTriangles","newColors","parseASCII","dataView","findString","parsedString","pointIndex","indexCount","parseBinary","XYZLoader","lineValues","TDSLoadPlugin","BaseImporterPlugin","_importer","Importer","PluginType","ThreeMFLoadPlugin","ColladaLoadPlugin","res","AMFLoadPlugin","GCodeLoadPlugin","BVHLoadPlugin","helper","SkeletonHelper","VOXLoadPlugin","setScalar","MDDLoadPlugin","morphAttributes","PhysicalMaterial","PCDLoadPlugin","options","autoCenter","rotateX","TiltLoadPlugin","VRMLLoadPlugin","LDrawLoadPlugin","VTKLoadPlugin","XYZLoadPlugin","extraImportPlugins"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}