diff --git a/site/chat/index.html b/site/chat/index.html new file mode 100644 index 0000000..b3843e4 --- /dev/null +++ b/site/chat/index.html @@ -0,0 +1,33 @@ + + + + + + Chat + + + + + + + + +
+

CHAT

+
+
+
+

Chat

+
+

X

+
+
+
+

Private

+

Game

+
+
+
+
+ + \ No newline at end of file diff --git a/site/chat/main.js b/site/chat/main.js new file mode 100644 index 0000000..390f00c --- /dev/null +++ b/site/chat/main.js @@ -0,0 +1,155 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/30 13:50:35 by edbernar #+# #+# */ +/* Updated: 2024/07/30 19:55:40 by edbernar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +document.addEventListener('DOMContentLoaded', () => { + liveChat(); +}); + +function liveChat() { + const chatButton = document.getElementById("chatButton"); + const chatDiv = document.getElementById("chatDiv"); + const topChatHomeCross = document.getElementById("topChatCross"); + const privateButtonChatHome = document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[0]; + const gameButtonChatHome= document.getElementById("buttonTypeChatHome").getElementsByTagName("h2")[1]; + let userList = [ + { + name: "Nessundorma", + status: "online", + pfp: "https://wallpapers-clan.com/wp-content/uploads/2023/05/cool-pfp-02.jpg" + }, + { + name: "Succotash", + status: "offline", + pfp: "https://i.pinimg.com/200x/28/75/96/287596f98304bf1adc2c411619ae8fef.jpg" + }, + { + name: "Astropower", + status: "online", + pfp: "https://ashisheditz.com/wp-content/uploads/2024/03/cool-anime-pfp-demon-slayer-HD.jpg" + }, + { + name: "Assaultive", + status: "offline", + pfp: "https://i1.sndcdn.com/artworks-1Li0JIJrQGlojD3y-AEiNkw-t500x500.jpg" + }, + { + name: "Redshock", + status: "offline", + pfp: "https://cdn.pfps.gg/pfps/7094-boy-pfp.png" + }, + { + name: "Parley", + status: "offline", + pfp: "https://pbs.twimg.com/media/EscE6ckU0AA-Uhe.png" + }, + ]; //Remplace temporairement la requete qui devra ĂȘtre de la meme forme + + chatButton.addEventListener("click", () => { + chatDiv.style.display = "flex"; + }); + topChatHomeCross.addEventListener("click", () => { + chatDiv.style.display = "none"; + }); + + // showListUserMessage(userList); + console.warn("Retirer showActualGameMessage() et remettre showListUserMessage()") + showActualGameMessage(); + privateButtonChatHome.addEventListener("click", () => { + gameButtonChatHome.removeAttribute("id"); + privateButtonChatHome.setAttribute("id", "selected"); + showListUserMessage(userList); + }); + gameButtonChatHome.addEventListener("click", () => { + privateButtonChatHome.removeAttribute("id"); + gameButtonChatHome.setAttribute("id", "selected"); + showActualGameMessage(); + }); +} + +function showListUserMessage(userList) { + const divMessageListChatHome = document.getElementById("messageListChatHome"); + + divMessageListChatHome.innerHTML = ''; + userList.forEach(element => { + divMessageListChatHome.innerHTML += ` +
+
+ +
+

${element.name}

+
+ `; + }); +} + +function showActualGameMessage() { + const divMessageListChatHome = document.getElementById("messageListChatHome"); + let me = "Kumita"; + let request = { + isInGame: true, + opponent: { + name: "Astropower", + pfp: "https://ashisheditz.com/wp-content/uploads/2024/03/cool-anime-pfp-demon-slayer-HD.jpg" + }, + listMessage: [ + { + from: "Astropower", + content: "Hello !", + date: "19:21 30/07/2024" + }, + { + from: "Kumita", + content: "Hey", + date: "19:21 30/07/2024" + }, + // { + // from: "Astropower", + // content: "Do you want play ?", + // date: "19:22 30/07/2024" + // }, + // { + // from: "Kumita", + // content: "Yes, i'm ready !", + // date: "19:22 30/07/2024" + // }, + // { + // from: "Kumita", + // content: "The game was too hard but well played", + // date: "19:27 30/07/2024" + // }, + // { + // from: "Astropower", + // content: "Yeah but you still won. See you soon", + // date: "19:27 30/07/2024" + // }, + ] + }; //Remplace temporairement la requete qui devra ĂȘtre de la meme forme + + divMessageListChatHome.innerHTML = ''; + if (request.isInGame === false) + { + divMessageListChatHome.innerHTML = "

You are currently not in a game.

"; + return ; + } + request.listMessage.forEach(element => { + divMessageListChatHome.innerHTML += ` +
+

${element.content}

+

${element.date}

+
+ `; + }); + divMessageListChatHome.innerHTML += ` +
+ `; + divMessageListChatHome.setAttribute("contenteditable", "true"); +} diff --git a/site/chat/pp.jpg b/site/chat/pp.jpg new file mode 100644 index 0000000..9549734 Binary files /dev/null and b/site/chat/pp.jpg differ diff --git a/site/chat/style.css b/site/chat/style.css new file mode 100644 index 0000000..62a02fa --- /dev/null +++ b/site/chat/style.css @@ -0,0 +1,183 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* style.css :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/30 13:53:39 by edbernar #+# #+# */ +/* Updated: 2024/07/30 20:18:19 by edbernar ### ########.fr */ +/* */ +/* ************************************************************************** */ + +body { + border: 0; + padding: 0; + width: 100%; + height: 100%; + background-color: #616161; + user-select: none; +} + +#chatButton { + position: absolute; + bottom: 10px; + left: 30px; + background-color: white; + width: 100px; + height: 40px; + text-align: center; + cursor : pointer; + z-index: 998; +} + +#chatButton p { + margin: 0; + margin-top: 10px; +} + +#chatButton:hover { + background-color: rgb(204, 204, 204); +} + +#chatDiv { + width: 350px; + height: 400px; + background-color: #131313; + position: absolute; + left: 20px; + bottom: 0px; + z-index: 999; + display: none; + flex-direction: column; + color: white; + font-family: 'Poppins'; + padding: 20px; + padding-bottom: 0; +} + +#chatDiv h1 { + margin: 0; + font-size: 25px; +} + +/* Delete this, is just for cross style */ +#chatDiv h2 { + cursor : pointer; + margin: 0; + font-size: 25px; +} + +#chatDiv #topChatHome { + display: flex; + flex-direction: row; + justify-content: space-between; + border-bottom: 1px solid #484848; + padding-bottom: 10px; +} + +#buttonTypeChatHome { + display: grid; + grid-template-columns: 50% 50%; + width: 100%; + border-bottom: 1px solid #484848; +} + +#buttonTypeChatHome h2 { + text-align: center; + font-size: 20px; + color: #dfdfdf; + padding-top: 5px; + padding-bottom: 5px; +} + +#selected { + background-color: black; +} + +#messageListChatHome { + display: flex; + flex-direction: column; + overflow: auto; + height: 100%; +} + +#messageListChatHome .user { + display: flex; + flex-direction: row; + height: 75px; + margin: 0; + padding: 0; + margin-top: 10px; +} + +#messageListChatHome .user .status { + border-radius: 1000px; + width: 60px; + height: 60px; + margin-right: 10px; +} + +#messageListChatHome .online { + background-color: rgb(17, 165, 29); +} + +#messageListChatHome .offline { + background-color: rgb(85, 85, 85); +} + +#messageListChatHome .user img { + height: 52px; + margin-left: 4px; + margin-top: 4px; + border-radius: 1000px; +} + + + + +#messageListChatHome .opponentMessage { + max-width: 80%; + padding: 10px; + margin-top: 20px; + background-color: #484848; + margin-right: auto; +} + +#messageListChatHome .meMessage { + max-width: 80%; + padding: 10px; + margin-top: 20px; + background-color: #222222; + margin-right: 0; + margin-left: auto; +} + +#messageListChatHome .meMessage p { + text-align: right; +} + + +#messageListChatHome .content { + user-select: text; +} + +#messageListChatHome .time { + margin-top: 10px; + font-size: 12px; +} + +#messageListChatHome p { + margin: 0; + word-break: break-word; +} + + +#inputDiv { + position: absolute; + width: 90%; + height: 50px; + background-color: #0B0B0B; + bottom: 10px; + user-select: text; +} diff --git a/site/index.html b/site/game/index.html similarity index 100% rename from site/index.html rename to site/game/index.html diff --git a/site/light.js b/site/game/light.js similarity index 62% rename from site/light.js rename to site/game/light.js index 9992584..3b4cc34 100644 --- a/site/light.js +++ b/site/game/light.js @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* light.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/30 13:50:46 by edbernar #+# #+# */ +/* Updated: 2024/07/30 13:50:47 by edbernar ### ########.fr */ +/* */ +/* ************************************************************************** */ + import * as THREE from 'three'; // ------------------- Spot Light ------------------- // diff --git a/site/main.js b/site/game/main.js similarity index 77% rename from site/main.js rename to site/game/main.js index a326222..abca12d 100644 --- a/site/main.js +++ b/site/game/main.js @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/30 13:50:49 by edbernar #+# #+# */ +/* Updated: 2024/07/30 13:50:49 by edbernar ### ########.fr */ +/* */ +/* ************************************************************************** */ + import * as THREE from 'three'; import Stats from 'stats.js'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; diff --git a/site/map.js b/site/game/map.js similarity index 50% rename from site/map.js rename to site/game/map.js index 3148624..7bc71a7 100644 --- a/site/map.js +++ b/site/game/map.js @@ -1,3 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* map.js :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: edbernar +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/07/30 13:50:51 by edbernar #+# #+# */ +/* Updated: 2024/07/30 13:50:51 by edbernar ### ########.fr */ +/* */ +/* ************************************************************************** */ + import * as THREE from 'three'; function createMap(scene) { diff --git a/site/node_modules/.bin/esbuild b/site/game/node_modules/.bin/esbuild similarity index 100% rename from site/node_modules/.bin/esbuild rename to site/game/node_modules/.bin/esbuild diff --git a/site/node_modules/.bin/nanoid b/site/game/node_modules/.bin/nanoid similarity index 100% rename from site/node_modules/.bin/nanoid rename to site/game/node_modules/.bin/nanoid diff --git a/site/node_modules/.bin/rollup b/site/game/node_modules/.bin/rollup similarity index 100% rename from site/node_modules/.bin/rollup rename to site/game/node_modules/.bin/rollup diff --git a/site/node_modules/.bin/stats b/site/game/node_modules/.bin/stats similarity index 100% rename from site/node_modules/.bin/stats rename to site/game/node_modules/.bin/stats diff --git a/site/node_modules/.bin/vite b/site/game/node_modules/.bin/vite similarity index 100% rename from site/node_modules/.bin/vite rename to site/game/node_modules/.bin/vite diff --git a/site/node_modules/.package-lock.json b/site/game/node_modules/.package-lock.json similarity index 99% rename from site/node_modules/.package-lock.json rename to site/game/node_modules/.package-lock.json index cb161c1..64c8d9f 100644 --- a/site/node_modules/.package-lock.json +++ b/site/game/node_modules/.package-lock.json @@ -1,5 +1,5 @@ { - "name": "Three.js_game", + "name": "site", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/site/node_modules/.vite/deps/_metadata.json b/site/game/node_modules/.vite/deps/_metadata.json similarity index 53% rename from site/node_modules/.vite/deps/_metadata.json rename to site/game/node_modules/.vite/deps/_metadata.json index affbf9c..8c8ff76 100644 --- a/site/node_modules/.vite/deps/_metadata.json +++ b/site/game/node_modules/.vite/deps/_metadata.json @@ -1,37 +1,25 @@ { - "hash": "95c502b9", - "configHash": "f0755339", - "lockfileHash": "705b12a6", - "browserHash": "ca311342", + "hash": "b28c11ff", + "configHash": "8ea63f38", + "lockfileHash": "c0b533f0", + "browserHash": "49483580", "optimized": { - "three": { - "src": "../../three/build/three.module.js", - "file": "three.js", - "fileHash": "7641604d", - "needsInterop": false - }, - "three/addons/loaders/GLTFLoader.js": { - "src": "../../three/examples/jsm/loaders/GLTFLoader.js", - "file": "three_addons_loaders_GLTFLoader__js.js", - "fileHash": "1d632da7", - "needsInterop": false - }, - "stats": { - "src": "../../stats/index.js", - "file": "stats.js", - "fileHash": "38b662a6", - "needsInterop": true - }, "stats.js": { "src": "../../stats.js/build/stats.min.js", "file": "stats__js.js", - "fileHash": "07a66db3", + "fileHash": "4a22c41f", "needsInterop": true }, + "three": { + "src": "../../three/build/three.module.js", + "file": "three.js", + "fileHash": "b10582a8", + "needsInterop": false + }, "three/examples/jsm/controls/OrbitControls.js": { "src": "../../three/examples/jsm/controls/OrbitControls.js", "file": "three_examples_jsm_controls_OrbitControls__js.js", - "fileHash": "7ff0d89a", + "fileHash": "c4a1d030", "needsInterop": false } }, diff --git a/site/node_modules/.vite/deps/chunk-BUSYA2B4.js b/site/game/node_modules/.vite/deps/chunk-BUSYA2B4.js similarity index 100% rename from site/node_modules/.vite/deps/chunk-BUSYA2B4.js rename to site/game/node_modules/.vite/deps/chunk-BUSYA2B4.js diff --git a/site/node_modules/.vite/deps/chunk-BUSYA2B4.js.map b/site/game/node_modules/.vite/deps/chunk-BUSYA2B4.js.map similarity index 100% rename from site/node_modules/.vite/deps/chunk-BUSYA2B4.js.map rename to site/game/node_modules/.vite/deps/chunk-BUSYA2B4.js.map diff --git a/site/node_modules/.vite/deps/chunk-IS2ZBFBB.js b/site/game/node_modules/.vite/deps/chunk-IS2ZBFBB.js similarity index 100% rename from site/node_modules/.vite/deps/chunk-IS2ZBFBB.js rename to site/game/node_modules/.vite/deps/chunk-IS2ZBFBB.js diff --git a/site/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map b/site/game/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map similarity index 100% rename from site/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map rename to site/game/node_modules/.vite/deps/chunk-IS2ZBFBB.js.map diff --git a/site/node_modules/.vite/deps/package.json b/site/game/node_modules/.vite/deps/package.json similarity index 100% rename from site/node_modules/.vite/deps/package.json rename to site/game/node_modules/.vite/deps/package.json diff --git a/site/node_modules/.vite/deps/stats__js.js b/site/game/node_modules/.vite/deps/stats__js.js similarity index 100% rename from site/node_modules/.vite/deps/stats__js.js rename to site/game/node_modules/.vite/deps/stats__js.js diff --git a/site/node_modules/.vite/deps/stats__js.js.map b/site/game/node_modules/.vite/deps/stats__js.js.map similarity index 100% rename from site/node_modules/.vite/deps/stats__js.js.map rename to site/game/node_modules/.vite/deps/stats__js.js.map diff --git a/site/node_modules/.vite/deps/three.js b/site/game/node_modules/.vite/deps/three.js similarity index 100% rename from site/node_modules/.vite/deps/three.js rename to site/game/node_modules/.vite/deps/three.js diff --git a/site/node_modules/.vite/deps/three.js.map b/site/game/node_modules/.vite/deps/three.js.map similarity index 100% rename from site/node_modules/.vite/deps/three.js.map rename to site/game/node_modules/.vite/deps/three.js.map diff --git a/site/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js b/site/game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js similarity index 100% rename from site/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js rename to site/game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js diff --git a/site/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map b/site/game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map similarity index 100% rename from site/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map rename to site/game/node_modules/.vite/deps/three_examples_jsm_controls_OrbitControls__js.js.map diff --git a/site/node_modules/.vite/deps_temp_660bb8bb/package.json b/site/game/node_modules/.vite/deps_temp_660bb8bb/package.json similarity index 100% rename from site/node_modules/.vite/deps_temp_660bb8bb/package.json rename to site/game/node_modules/.vite/deps_temp_660bb8bb/package.json diff --git a/site/node_modules/.vite/deps_temp_fde627c8/package.json b/site/game/node_modules/.vite/deps_temp_fde627c8/package.json similarity index 100% rename from site/node_modules/.vite/deps_temp_fde627c8/package.json rename to site/game/node_modules/.vite/deps_temp_fde627c8/package.json diff --git a/site/node_modules/@esbuild/linux-x64/README.md b/site/game/node_modules/@esbuild/linux-x64/README.md similarity index 100% rename from site/node_modules/@esbuild/linux-x64/README.md rename to site/game/node_modules/@esbuild/linux-x64/README.md diff --git a/site/node_modules/@esbuild/linux-x64/bin/esbuild b/site/game/node_modules/@esbuild/linux-x64/bin/esbuild similarity index 100% rename from site/node_modules/@esbuild/linux-x64/bin/esbuild rename to site/game/node_modules/@esbuild/linux-x64/bin/esbuild diff --git a/site/node_modules/@esbuild/linux-x64/package.json b/site/game/node_modules/@esbuild/linux-x64/package.json similarity index 100% rename from site/node_modules/@esbuild/linux-x64/package.json rename to site/game/node_modules/@esbuild/linux-x64/package.json diff --git a/site/node_modules/@rollup/rollup-linux-x64-gnu/README.md b/site/game/node_modules/@rollup/rollup-linux-x64-gnu/README.md similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-gnu/README.md rename to site/game/node_modules/@rollup/rollup-linux-x64-gnu/README.md diff --git a/site/node_modules/@rollup/rollup-linux-x64-gnu/package.json b/site/game/node_modules/@rollup/rollup-linux-x64-gnu/package.json similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-gnu/package.json rename to site/game/node_modules/@rollup/rollup-linux-x64-gnu/package.json diff --git a/site/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node b/site/game/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node rename to site/game/node_modules/@rollup/rollup-linux-x64-gnu/rollup.linux-x64-gnu.node diff --git a/site/node_modules/@rollup/rollup-linux-x64-musl/README.md b/site/game/node_modules/@rollup/rollup-linux-x64-musl/README.md similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-musl/README.md rename to site/game/node_modules/@rollup/rollup-linux-x64-musl/README.md diff --git a/site/node_modules/@rollup/rollup-linux-x64-musl/package.json b/site/game/node_modules/@rollup/rollup-linux-x64-musl/package.json similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-musl/package.json rename to site/game/node_modules/@rollup/rollup-linux-x64-musl/package.json diff --git a/site/node_modules/@rollup/rollup-linux-x64-musl/rollup.linux-x64-musl.node b/site/game/node_modules/@rollup/rollup-linux-x64-musl/rollup.linux-x64-musl.node similarity index 100% rename from site/node_modules/@rollup/rollup-linux-x64-musl/rollup.linux-x64-musl.node rename to site/game/node_modules/@rollup/rollup-linux-x64-musl/rollup.linux-x64-musl.node diff --git a/site/node_modules/@types/estree/LICENSE b/site/game/node_modules/@types/estree/LICENSE similarity index 100% rename from site/node_modules/@types/estree/LICENSE rename to site/game/node_modules/@types/estree/LICENSE diff --git a/site/node_modules/@types/estree/README.md b/site/game/node_modules/@types/estree/README.md similarity index 100% rename from site/node_modules/@types/estree/README.md rename to site/game/node_modules/@types/estree/README.md diff --git a/site/node_modules/@types/estree/flow.d.ts b/site/game/node_modules/@types/estree/flow.d.ts similarity index 100% rename from site/node_modules/@types/estree/flow.d.ts rename to site/game/node_modules/@types/estree/flow.d.ts diff --git a/site/node_modules/@types/estree/index.d.ts b/site/game/node_modules/@types/estree/index.d.ts similarity index 100% rename from site/node_modules/@types/estree/index.d.ts rename to site/game/node_modules/@types/estree/index.d.ts diff --git a/site/node_modules/@types/estree/package.json b/site/game/node_modules/@types/estree/package.json similarity index 100% rename from site/node_modules/@types/estree/package.json rename to site/game/node_modules/@types/estree/package.json diff --git a/site/node_modules/commander/.npmignore b/site/game/node_modules/commander/.npmignore similarity index 100% rename from site/node_modules/commander/.npmignore rename to site/game/node_modules/commander/.npmignore diff --git a/site/node_modules/commander/.travis.yml b/site/game/node_modules/commander/.travis.yml similarity index 100% rename from site/node_modules/commander/.travis.yml rename to site/game/node_modules/commander/.travis.yml diff --git a/site/node_modules/commander/History.md b/site/game/node_modules/commander/History.md similarity index 100% rename from site/node_modules/commander/History.md rename to site/game/node_modules/commander/History.md diff --git a/site/node_modules/commander/Makefile b/site/game/node_modules/commander/Makefile similarity index 100% rename from site/node_modules/commander/Makefile rename to site/game/node_modules/commander/Makefile diff --git a/site/node_modules/commander/Readme.md b/site/game/node_modules/commander/Readme.md similarity index 100% rename from site/node_modules/commander/Readme.md rename to site/game/node_modules/commander/Readme.md diff --git a/site/node_modules/commander/index.js b/site/game/node_modules/commander/index.js similarity index 100% rename from site/node_modules/commander/index.js rename to site/game/node_modules/commander/index.js diff --git a/site/node_modules/commander/lib/commander.js b/site/game/node_modules/commander/lib/commander.js similarity index 100% rename from site/node_modules/commander/lib/commander.js rename to site/game/node_modules/commander/lib/commander.js diff --git a/site/node_modules/commander/package.json b/site/game/node_modules/commander/package.json similarity index 100% rename from site/node_modules/commander/package.json rename to site/game/node_modules/commander/package.json diff --git a/site/node_modules/esbuild/LICENSE.md b/site/game/node_modules/esbuild/LICENSE.md similarity index 100% rename from site/node_modules/esbuild/LICENSE.md rename to site/game/node_modules/esbuild/LICENSE.md diff --git a/site/node_modules/esbuild/README.md b/site/game/node_modules/esbuild/README.md similarity index 100% rename from site/node_modules/esbuild/README.md rename to site/game/node_modules/esbuild/README.md diff --git a/site/node_modules/esbuild/bin/esbuild b/site/game/node_modules/esbuild/bin/esbuild similarity index 100% rename from site/node_modules/esbuild/bin/esbuild rename to site/game/node_modules/esbuild/bin/esbuild diff --git a/site/node_modules/esbuild/install.js b/site/game/node_modules/esbuild/install.js similarity index 100% rename from site/node_modules/esbuild/install.js rename to site/game/node_modules/esbuild/install.js diff --git a/site/node_modules/esbuild/lib/main.d.ts b/site/game/node_modules/esbuild/lib/main.d.ts similarity index 100% rename from site/node_modules/esbuild/lib/main.d.ts rename to site/game/node_modules/esbuild/lib/main.d.ts diff --git a/site/node_modules/esbuild/lib/main.js b/site/game/node_modules/esbuild/lib/main.js similarity index 100% rename from site/node_modules/esbuild/lib/main.js rename to site/game/node_modules/esbuild/lib/main.js diff --git a/site/node_modules/esbuild/package.json b/site/game/node_modules/esbuild/package.json similarity index 100% rename from site/node_modules/esbuild/package.json rename to site/game/node_modules/esbuild/package.json diff --git a/site/node_modules/nanoid/LICENSE b/site/game/node_modules/nanoid/LICENSE similarity index 100% rename from site/node_modules/nanoid/LICENSE rename to site/game/node_modules/nanoid/LICENSE diff --git a/site/node_modules/nanoid/README.md b/site/game/node_modules/nanoid/README.md similarity index 100% rename from site/node_modules/nanoid/README.md rename to site/game/node_modules/nanoid/README.md diff --git a/site/node_modules/nanoid/async/index.browser.cjs b/site/game/node_modules/nanoid/async/index.browser.cjs similarity index 100% rename from site/node_modules/nanoid/async/index.browser.cjs rename to site/game/node_modules/nanoid/async/index.browser.cjs diff --git a/site/node_modules/nanoid/async/index.browser.js b/site/game/node_modules/nanoid/async/index.browser.js similarity index 100% rename from site/node_modules/nanoid/async/index.browser.js rename to site/game/node_modules/nanoid/async/index.browser.js diff --git a/site/node_modules/nanoid/async/index.cjs b/site/game/node_modules/nanoid/async/index.cjs similarity index 100% rename from site/node_modules/nanoid/async/index.cjs rename to site/game/node_modules/nanoid/async/index.cjs diff --git a/site/node_modules/nanoid/async/index.d.ts b/site/game/node_modules/nanoid/async/index.d.ts similarity index 100% rename from site/node_modules/nanoid/async/index.d.ts rename to site/game/node_modules/nanoid/async/index.d.ts diff --git a/site/node_modules/nanoid/async/index.js b/site/game/node_modules/nanoid/async/index.js similarity index 100% rename from site/node_modules/nanoid/async/index.js rename to site/game/node_modules/nanoid/async/index.js diff --git a/site/node_modules/nanoid/async/index.native.js b/site/game/node_modules/nanoid/async/index.native.js similarity index 100% rename from site/node_modules/nanoid/async/index.native.js rename to site/game/node_modules/nanoid/async/index.native.js diff --git a/site/node_modules/nanoid/async/package.json b/site/game/node_modules/nanoid/async/package.json similarity index 100% rename from site/node_modules/nanoid/async/package.json rename to site/game/node_modules/nanoid/async/package.json diff --git a/site/node_modules/nanoid/bin/nanoid.cjs b/site/game/node_modules/nanoid/bin/nanoid.cjs similarity index 100% rename from site/node_modules/nanoid/bin/nanoid.cjs rename to site/game/node_modules/nanoid/bin/nanoid.cjs diff --git a/site/node_modules/nanoid/index.browser.cjs b/site/game/node_modules/nanoid/index.browser.cjs similarity index 100% rename from site/node_modules/nanoid/index.browser.cjs rename to site/game/node_modules/nanoid/index.browser.cjs diff --git a/site/node_modules/nanoid/index.browser.js b/site/game/node_modules/nanoid/index.browser.js similarity index 100% rename from site/node_modules/nanoid/index.browser.js rename to site/game/node_modules/nanoid/index.browser.js diff --git a/site/node_modules/nanoid/index.cjs b/site/game/node_modules/nanoid/index.cjs similarity index 100% rename from site/node_modules/nanoid/index.cjs rename to site/game/node_modules/nanoid/index.cjs diff --git a/site/node_modules/nanoid/index.d.cts b/site/game/node_modules/nanoid/index.d.cts similarity index 100% rename from site/node_modules/nanoid/index.d.cts rename to site/game/node_modules/nanoid/index.d.cts diff --git a/site/node_modules/nanoid/index.d.ts b/site/game/node_modules/nanoid/index.d.ts similarity index 100% rename from site/node_modules/nanoid/index.d.ts rename to site/game/node_modules/nanoid/index.d.ts diff --git a/site/node_modules/nanoid/index.js b/site/game/node_modules/nanoid/index.js similarity index 100% rename from site/node_modules/nanoid/index.js rename to site/game/node_modules/nanoid/index.js diff --git a/site/node_modules/nanoid/nanoid.js b/site/game/node_modules/nanoid/nanoid.js similarity index 100% rename from site/node_modules/nanoid/nanoid.js rename to site/game/node_modules/nanoid/nanoid.js diff --git a/site/node_modules/nanoid/non-secure/index.cjs b/site/game/node_modules/nanoid/non-secure/index.cjs similarity index 100% rename from site/node_modules/nanoid/non-secure/index.cjs rename to site/game/node_modules/nanoid/non-secure/index.cjs diff --git a/site/node_modules/nanoid/non-secure/index.d.ts b/site/game/node_modules/nanoid/non-secure/index.d.ts similarity index 100% rename from site/node_modules/nanoid/non-secure/index.d.ts rename to site/game/node_modules/nanoid/non-secure/index.d.ts diff --git a/site/node_modules/nanoid/non-secure/index.js b/site/game/node_modules/nanoid/non-secure/index.js similarity index 100% rename from site/node_modules/nanoid/non-secure/index.js rename to site/game/node_modules/nanoid/non-secure/index.js diff --git a/site/node_modules/nanoid/non-secure/package.json b/site/game/node_modules/nanoid/non-secure/package.json similarity index 100% rename from site/node_modules/nanoid/non-secure/package.json rename to site/game/node_modules/nanoid/non-secure/package.json diff --git a/site/node_modules/nanoid/package.json b/site/game/node_modules/nanoid/package.json similarity index 100% rename from site/node_modules/nanoid/package.json rename to site/game/node_modules/nanoid/package.json diff --git a/site/node_modules/nanoid/url-alphabet/index.cjs b/site/game/node_modules/nanoid/url-alphabet/index.cjs similarity index 100% rename from site/node_modules/nanoid/url-alphabet/index.cjs rename to site/game/node_modules/nanoid/url-alphabet/index.cjs diff --git a/site/node_modules/nanoid/url-alphabet/index.js b/site/game/node_modules/nanoid/url-alphabet/index.js similarity index 100% rename from site/node_modules/nanoid/url-alphabet/index.js rename to site/game/node_modules/nanoid/url-alphabet/index.js diff --git a/site/node_modules/nanoid/url-alphabet/package.json b/site/game/node_modules/nanoid/url-alphabet/package.json similarity index 100% rename from site/node_modules/nanoid/url-alphabet/package.json rename to site/game/node_modules/nanoid/url-alphabet/package.json diff --git a/site/node_modules/picocolors/LICENSE b/site/game/node_modules/picocolors/LICENSE similarity index 100% rename from site/node_modules/picocolors/LICENSE rename to site/game/node_modules/picocolors/LICENSE diff --git a/site/node_modules/picocolors/README.md b/site/game/node_modules/picocolors/README.md similarity index 100% rename from site/node_modules/picocolors/README.md rename to site/game/node_modules/picocolors/README.md diff --git a/site/node_modules/picocolors/package.json b/site/game/node_modules/picocolors/package.json similarity index 100% rename from site/node_modules/picocolors/package.json rename to site/game/node_modules/picocolors/package.json diff --git a/site/node_modules/picocolors/picocolors.browser.js b/site/game/node_modules/picocolors/picocolors.browser.js similarity index 100% rename from site/node_modules/picocolors/picocolors.browser.js rename to site/game/node_modules/picocolors/picocolors.browser.js diff --git a/site/node_modules/picocolors/picocolors.d.ts b/site/game/node_modules/picocolors/picocolors.d.ts similarity index 100% rename from site/node_modules/picocolors/picocolors.d.ts rename to site/game/node_modules/picocolors/picocolors.d.ts diff --git a/site/node_modules/picocolors/picocolors.js b/site/game/node_modules/picocolors/picocolors.js similarity index 100% rename from site/node_modules/picocolors/picocolors.js rename to site/game/node_modules/picocolors/picocolors.js diff --git a/site/node_modules/picocolors/types.ts b/site/game/node_modules/picocolors/types.ts similarity index 100% rename from site/node_modules/picocolors/types.ts rename to site/game/node_modules/picocolors/types.ts diff --git a/site/node_modules/postcss/LICENSE b/site/game/node_modules/postcss/LICENSE similarity index 100% rename from site/node_modules/postcss/LICENSE rename to site/game/node_modules/postcss/LICENSE diff --git a/site/node_modules/postcss/README.md b/site/game/node_modules/postcss/README.md similarity index 100% rename from site/node_modules/postcss/README.md rename to site/game/node_modules/postcss/README.md diff --git a/site/node_modules/postcss/lib/at-rule.d.ts b/site/game/node_modules/postcss/lib/at-rule.d.ts similarity index 100% rename from site/node_modules/postcss/lib/at-rule.d.ts rename to site/game/node_modules/postcss/lib/at-rule.d.ts diff --git a/site/node_modules/postcss/lib/at-rule.js b/site/game/node_modules/postcss/lib/at-rule.js similarity index 100% rename from site/node_modules/postcss/lib/at-rule.js rename to site/game/node_modules/postcss/lib/at-rule.js diff --git a/site/node_modules/postcss/lib/comment.d.ts b/site/game/node_modules/postcss/lib/comment.d.ts similarity index 100% rename from site/node_modules/postcss/lib/comment.d.ts rename to site/game/node_modules/postcss/lib/comment.d.ts diff --git a/site/node_modules/postcss/lib/comment.js b/site/game/node_modules/postcss/lib/comment.js similarity index 100% rename from site/node_modules/postcss/lib/comment.js rename to site/game/node_modules/postcss/lib/comment.js diff --git a/site/node_modules/postcss/lib/container.d.ts b/site/game/node_modules/postcss/lib/container.d.ts similarity index 100% rename from site/node_modules/postcss/lib/container.d.ts rename to site/game/node_modules/postcss/lib/container.d.ts diff --git a/site/node_modules/postcss/lib/container.js b/site/game/node_modules/postcss/lib/container.js similarity index 100% rename from site/node_modules/postcss/lib/container.js rename to site/game/node_modules/postcss/lib/container.js diff --git a/site/node_modules/postcss/lib/css-syntax-error.d.ts b/site/game/node_modules/postcss/lib/css-syntax-error.d.ts similarity index 100% rename from site/node_modules/postcss/lib/css-syntax-error.d.ts rename to site/game/node_modules/postcss/lib/css-syntax-error.d.ts diff --git a/site/node_modules/postcss/lib/css-syntax-error.js b/site/game/node_modules/postcss/lib/css-syntax-error.js similarity index 100% rename from site/node_modules/postcss/lib/css-syntax-error.js rename to site/game/node_modules/postcss/lib/css-syntax-error.js diff --git a/site/node_modules/postcss/lib/declaration.d.ts b/site/game/node_modules/postcss/lib/declaration.d.ts similarity index 100% rename from site/node_modules/postcss/lib/declaration.d.ts rename to site/game/node_modules/postcss/lib/declaration.d.ts diff --git a/site/node_modules/postcss/lib/declaration.js b/site/game/node_modules/postcss/lib/declaration.js similarity index 100% rename from site/node_modules/postcss/lib/declaration.js rename to site/game/node_modules/postcss/lib/declaration.js diff --git a/site/node_modules/postcss/lib/document.d.ts b/site/game/node_modules/postcss/lib/document.d.ts similarity index 100% rename from site/node_modules/postcss/lib/document.d.ts rename to site/game/node_modules/postcss/lib/document.d.ts diff --git a/site/node_modules/postcss/lib/document.js b/site/game/node_modules/postcss/lib/document.js similarity index 100% rename from site/node_modules/postcss/lib/document.js rename to site/game/node_modules/postcss/lib/document.js diff --git a/site/node_modules/postcss/lib/fromJSON.d.ts b/site/game/node_modules/postcss/lib/fromJSON.d.ts similarity index 100% rename from site/node_modules/postcss/lib/fromJSON.d.ts rename to site/game/node_modules/postcss/lib/fromJSON.d.ts diff --git a/site/node_modules/postcss/lib/fromJSON.js b/site/game/node_modules/postcss/lib/fromJSON.js similarity index 100% rename from site/node_modules/postcss/lib/fromJSON.js rename to site/game/node_modules/postcss/lib/fromJSON.js diff --git a/site/node_modules/postcss/lib/input.d.ts b/site/game/node_modules/postcss/lib/input.d.ts similarity index 100% rename from site/node_modules/postcss/lib/input.d.ts rename to site/game/node_modules/postcss/lib/input.d.ts diff --git a/site/node_modules/postcss/lib/input.js b/site/game/node_modules/postcss/lib/input.js similarity index 100% rename from site/node_modules/postcss/lib/input.js rename to site/game/node_modules/postcss/lib/input.js diff --git a/site/node_modules/postcss/lib/lazy-result.d.ts b/site/game/node_modules/postcss/lib/lazy-result.d.ts similarity index 100% rename from site/node_modules/postcss/lib/lazy-result.d.ts rename to site/game/node_modules/postcss/lib/lazy-result.d.ts diff --git a/site/node_modules/postcss/lib/lazy-result.js b/site/game/node_modules/postcss/lib/lazy-result.js similarity index 100% rename from site/node_modules/postcss/lib/lazy-result.js rename to site/game/node_modules/postcss/lib/lazy-result.js diff --git a/site/node_modules/postcss/lib/list.d.ts b/site/game/node_modules/postcss/lib/list.d.ts similarity index 100% rename from site/node_modules/postcss/lib/list.d.ts rename to site/game/node_modules/postcss/lib/list.d.ts diff --git a/site/node_modules/postcss/lib/list.js b/site/game/node_modules/postcss/lib/list.js similarity index 100% rename from site/node_modules/postcss/lib/list.js rename to site/game/node_modules/postcss/lib/list.js diff --git a/site/node_modules/postcss/lib/map-generator.js b/site/game/node_modules/postcss/lib/map-generator.js similarity index 100% rename from site/node_modules/postcss/lib/map-generator.js rename to site/game/node_modules/postcss/lib/map-generator.js diff --git a/site/node_modules/postcss/lib/no-work-result.d.ts b/site/game/node_modules/postcss/lib/no-work-result.d.ts similarity index 100% rename from site/node_modules/postcss/lib/no-work-result.d.ts rename to site/game/node_modules/postcss/lib/no-work-result.d.ts diff --git a/site/node_modules/postcss/lib/no-work-result.js b/site/game/node_modules/postcss/lib/no-work-result.js similarity index 100% rename from site/node_modules/postcss/lib/no-work-result.js rename to site/game/node_modules/postcss/lib/no-work-result.js diff --git a/site/node_modules/postcss/lib/node.d.ts b/site/game/node_modules/postcss/lib/node.d.ts similarity index 100% rename from site/node_modules/postcss/lib/node.d.ts rename to site/game/node_modules/postcss/lib/node.d.ts diff --git a/site/node_modules/postcss/lib/node.js b/site/game/node_modules/postcss/lib/node.js similarity index 100% rename from site/node_modules/postcss/lib/node.js rename to site/game/node_modules/postcss/lib/node.js diff --git a/site/node_modules/postcss/lib/parse.d.ts b/site/game/node_modules/postcss/lib/parse.d.ts similarity index 100% rename from site/node_modules/postcss/lib/parse.d.ts rename to site/game/node_modules/postcss/lib/parse.d.ts diff --git a/site/node_modules/postcss/lib/parse.js b/site/game/node_modules/postcss/lib/parse.js similarity index 100% rename from site/node_modules/postcss/lib/parse.js rename to site/game/node_modules/postcss/lib/parse.js diff --git a/site/node_modules/postcss/lib/parser.js b/site/game/node_modules/postcss/lib/parser.js similarity index 100% rename from site/node_modules/postcss/lib/parser.js rename to site/game/node_modules/postcss/lib/parser.js diff --git a/site/node_modules/postcss/lib/postcss.d.mts b/site/game/node_modules/postcss/lib/postcss.d.mts similarity index 100% rename from site/node_modules/postcss/lib/postcss.d.mts rename to site/game/node_modules/postcss/lib/postcss.d.mts diff --git a/site/node_modules/postcss/lib/postcss.d.ts b/site/game/node_modules/postcss/lib/postcss.d.ts similarity index 100% rename from site/node_modules/postcss/lib/postcss.d.ts rename to site/game/node_modules/postcss/lib/postcss.d.ts diff --git a/site/node_modules/postcss/lib/postcss.js b/site/game/node_modules/postcss/lib/postcss.js similarity index 100% rename from site/node_modules/postcss/lib/postcss.js rename to site/game/node_modules/postcss/lib/postcss.js diff --git a/site/node_modules/postcss/lib/postcss.mjs b/site/game/node_modules/postcss/lib/postcss.mjs similarity index 100% rename from site/node_modules/postcss/lib/postcss.mjs rename to site/game/node_modules/postcss/lib/postcss.mjs diff --git a/site/node_modules/postcss/lib/previous-map.d.ts b/site/game/node_modules/postcss/lib/previous-map.d.ts similarity index 100% rename from site/node_modules/postcss/lib/previous-map.d.ts rename to site/game/node_modules/postcss/lib/previous-map.d.ts diff --git a/site/node_modules/postcss/lib/previous-map.js b/site/game/node_modules/postcss/lib/previous-map.js similarity index 100% rename from site/node_modules/postcss/lib/previous-map.js rename to site/game/node_modules/postcss/lib/previous-map.js diff --git a/site/node_modules/postcss/lib/processor.d.ts b/site/game/node_modules/postcss/lib/processor.d.ts similarity index 100% rename from site/node_modules/postcss/lib/processor.d.ts rename to site/game/node_modules/postcss/lib/processor.d.ts diff --git a/site/node_modules/postcss/lib/processor.js b/site/game/node_modules/postcss/lib/processor.js similarity index 100% rename from site/node_modules/postcss/lib/processor.js rename to site/game/node_modules/postcss/lib/processor.js diff --git a/site/node_modules/postcss/lib/result.d.ts b/site/game/node_modules/postcss/lib/result.d.ts similarity index 100% rename from site/node_modules/postcss/lib/result.d.ts rename to site/game/node_modules/postcss/lib/result.d.ts diff --git a/site/node_modules/postcss/lib/result.js b/site/game/node_modules/postcss/lib/result.js similarity index 100% rename from site/node_modules/postcss/lib/result.js rename to site/game/node_modules/postcss/lib/result.js diff --git a/site/node_modules/postcss/lib/root.d.ts b/site/game/node_modules/postcss/lib/root.d.ts similarity index 100% rename from site/node_modules/postcss/lib/root.d.ts rename to site/game/node_modules/postcss/lib/root.d.ts diff --git a/site/node_modules/postcss/lib/root.js b/site/game/node_modules/postcss/lib/root.js similarity index 100% rename from site/node_modules/postcss/lib/root.js rename to site/game/node_modules/postcss/lib/root.js diff --git a/site/node_modules/postcss/lib/rule.d.ts b/site/game/node_modules/postcss/lib/rule.d.ts similarity index 100% rename from site/node_modules/postcss/lib/rule.d.ts rename to site/game/node_modules/postcss/lib/rule.d.ts diff --git a/site/node_modules/postcss/lib/rule.js b/site/game/node_modules/postcss/lib/rule.js similarity index 100% rename from site/node_modules/postcss/lib/rule.js rename to site/game/node_modules/postcss/lib/rule.js diff --git a/site/node_modules/postcss/lib/stringifier.d.ts b/site/game/node_modules/postcss/lib/stringifier.d.ts similarity index 100% rename from site/node_modules/postcss/lib/stringifier.d.ts rename to site/game/node_modules/postcss/lib/stringifier.d.ts diff --git a/site/node_modules/postcss/lib/stringifier.js b/site/game/node_modules/postcss/lib/stringifier.js similarity index 100% rename from site/node_modules/postcss/lib/stringifier.js rename to site/game/node_modules/postcss/lib/stringifier.js diff --git a/site/node_modules/postcss/lib/stringify.d.ts b/site/game/node_modules/postcss/lib/stringify.d.ts similarity index 100% rename from site/node_modules/postcss/lib/stringify.d.ts rename to site/game/node_modules/postcss/lib/stringify.d.ts diff --git a/site/node_modules/postcss/lib/stringify.js b/site/game/node_modules/postcss/lib/stringify.js similarity index 100% rename from site/node_modules/postcss/lib/stringify.js rename to site/game/node_modules/postcss/lib/stringify.js diff --git a/site/node_modules/postcss/lib/symbols.js b/site/game/node_modules/postcss/lib/symbols.js similarity index 100% rename from site/node_modules/postcss/lib/symbols.js rename to site/game/node_modules/postcss/lib/symbols.js diff --git a/site/node_modules/postcss/lib/terminal-highlight.js b/site/game/node_modules/postcss/lib/terminal-highlight.js similarity index 100% rename from site/node_modules/postcss/lib/terminal-highlight.js rename to site/game/node_modules/postcss/lib/terminal-highlight.js diff --git a/site/node_modules/postcss/lib/tokenize.js b/site/game/node_modules/postcss/lib/tokenize.js similarity index 100% rename from site/node_modules/postcss/lib/tokenize.js rename to site/game/node_modules/postcss/lib/tokenize.js diff --git a/site/node_modules/postcss/lib/warn-once.js b/site/game/node_modules/postcss/lib/warn-once.js similarity index 100% rename from site/node_modules/postcss/lib/warn-once.js rename to site/game/node_modules/postcss/lib/warn-once.js diff --git a/site/node_modules/postcss/lib/warning.d.ts b/site/game/node_modules/postcss/lib/warning.d.ts similarity index 100% rename from site/node_modules/postcss/lib/warning.d.ts rename to site/game/node_modules/postcss/lib/warning.d.ts diff --git a/site/node_modules/postcss/lib/warning.js b/site/game/node_modules/postcss/lib/warning.js similarity index 100% rename from site/node_modules/postcss/lib/warning.js rename to site/game/node_modules/postcss/lib/warning.js diff --git a/site/node_modules/postcss/package.json b/site/game/node_modules/postcss/package.json similarity index 100% rename from site/node_modules/postcss/package.json rename to site/game/node_modules/postcss/package.json diff --git a/site/node_modules/rollup/LICENSE.md b/site/game/node_modules/rollup/LICENSE.md similarity index 100% rename from site/node_modules/rollup/LICENSE.md rename to site/game/node_modules/rollup/LICENSE.md diff --git a/site/node_modules/rollup/README.md b/site/game/node_modules/rollup/README.md similarity index 100% rename from site/node_modules/rollup/README.md rename to site/game/node_modules/rollup/README.md diff --git a/site/node_modules/rollup/dist/bin/rollup b/site/game/node_modules/rollup/dist/bin/rollup similarity index 100% rename from site/node_modules/rollup/dist/bin/rollup rename to site/game/node_modules/rollup/dist/bin/rollup diff --git a/site/node_modules/rollup/dist/es/getLogFilter.js b/site/game/node_modules/rollup/dist/es/getLogFilter.js similarity index 100% rename from site/node_modules/rollup/dist/es/getLogFilter.js rename to site/game/node_modules/rollup/dist/es/getLogFilter.js diff --git a/site/node_modules/rollup/dist/es/package.json b/site/game/node_modules/rollup/dist/es/package.json similarity index 100% rename from site/node_modules/rollup/dist/es/package.json rename to site/game/node_modules/rollup/dist/es/package.json diff --git a/site/node_modules/rollup/dist/es/parseAst.js b/site/game/node_modules/rollup/dist/es/parseAst.js similarity index 100% rename from site/node_modules/rollup/dist/es/parseAst.js rename to site/game/node_modules/rollup/dist/es/parseAst.js diff --git a/site/node_modules/rollup/dist/es/rollup.js b/site/game/node_modules/rollup/dist/es/rollup.js similarity index 100% rename from site/node_modules/rollup/dist/es/rollup.js rename to site/game/node_modules/rollup/dist/es/rollup.js diff --git a/site/node_modules/rollup/dist/es/shared/node-entry.js b/site/game/node_modules/rollup/dist/es/shared/node-entry.js similarity index 100% rename from site/node_modules/rollup/dist/es/shared/node-entry.js rename to site/game/node_modules/rollup/dist/es/shared/node-entry.js diff --git a/site/node_modules/rollup/dist/es/shared/parseAst.js b/site/game/node_modules/rollup/dist/es/shared/parseAst.js similarity index 100% rename from site/node_modules/rollup/dist/es/shared/parseAst.js rename to site/game/node_modules/rollup/dist/es/shared/parseAst.js diff --git a/site/node_modules/rollup/dist/es/shared/watch.js b/site/game/node_modules/rollup/dist/es/shared/watch.js similarity index 100% rename from site/node_modules/rollup/dist/es/shared/watch.js rename to site/game/node_modules/rollup/dist/es/shared/watch.js diff --git a/site/node_modules/rollup/dist/getLogFilter.d.ts b/site/game/node_modules/rollup/dist/getLogFilter.d.ts similarity index 100% rename from site/node_modules/rollup/dist/getLogFilter.d.ts rename to site/game/node_modules/rollup/dist/getLogFilter.d.ts diff --git a/site/node_modules/rollup/dist/getLogFilter.js b/site/game/node_modules/rollup/dist/getLogFilter.js similarity index 100% rename from site/node_modules/rollup/dist/getLogFilter.js rename to site/game/node_modules/rollup/dist/getLogFilter.js diff --git a/site/node_modules/rollup/dist/loadConfigFile.d.ts b/site/game/node_modules/rollup/dist/loadConfigFile.d.ts similarity index 100% rename from site/node_modules/rollup/dist/loadConfigFile.d.ts rename to site/game/node_modules/rollup/dist/loadConfigFile.d.ts diff --git a/site/node_modules/rollup/dist/loadConfigFile.js b/site/game/node_modules/rollup/dist/loadConfigFile.js similarity index 100% rename from site/node_modules/rollup/dist/loadConfigFile.js rename to site/game/node_modules/rollup/dist/loadConfigFile.js diff --git a/site/node_modules/rollup/dist/native.js b/site/game/node_modules/rollup/dist/native.js similarity index 100% rename from site/node_modules/rollup/dist/native.js rename to site/game/node_modules/rollup/dist/native.js diff --git a/site/node_modules/rollup/dist/parseAst.d.ts b/site/game/node_modules/rollup/dist/parseAst.d.ts similarity index 100% rename from site/node_modules/rollup/dist/parseAst.d.ts rename to site/game/node_modules/rollup/dist/parseAst.d.ts diff --git a/site/node_modules/rollup/dist/parseAst.js b/site/game/node_modules/rollup/dist/parseAst.js similarity index 100% rename from site/node_modules/rollup/dist/parseAst.js rename to site/game/node_modules/rollup/dist/parseAst.js diff --git a/site/node_modules/rollup/dist/rollup.d.ts b/site/game/node_modules/rollup/dist/rollup.d.ts similarity index 100% rename from site/node_modules/rollup/dist/rollup.d.ts rename to site/game/node_modules/rollup/dist/rollup.d.ts diff --git a/site/node_modules/rollup/dist/rollup.js b/site/game/node_modules/rollup/dist/rollup.js similarity index 100% rename from site/node_modules/rollup/dist/rollup.js rename to site/game/node_modules/rollup/dist/rollup.js diff --git a/site/node_modules/rollup/dist/shared/fsevents-importer.js b/site/game/node_modules/rollup/dist/shared/fsevents-importer.js similarity index 100% rename from site/node_modules/rollup/dist/shared/fsevents-importer.js rename to site/game/node_modules/rollup/dist/shared/fsevents-importer.js diff --git a/site/node_modules/rollup/dist/shared/index.js b/site/game/node_modules/rollup/dist/shared/index.js similarity index 100% rename from site/node_modules/rollup/dist/shared/index.js rename to site/game/node_modules/rollup/dist/shared/index.js diff --git a/site/node_modules/rollup/dist/shared/loadConfigFile.js b/site/game/node_modules/rollup/dist/shared/loadConfigFile.js similarity index 100% rename from site/node_modules/rollup/dist/shared/loadConfigFile.js rename to site/game/node_modules/rollup/dist/shared/loadConfigFile.js diff --git a/site/node_modules/rollup/dist/shared/parseAst.js b/site/game/node_modules/rollup/dist/shared/parseAst.js similarity index 100% rename from site/node_modules/rollup/dist/shared/parseAst.js rename to site/game/node_modules/rollup/dist/shared/parseAst.js diff --git a/site/node_modules/rollup/dist/shared/rollup.js b/site/game/node_modules/rollup/dist/shared/rollup.js similarity index 100% rename from site/node_modules/rollup/dist/shared/rollup.js rename to site/game/node_modules/rollup/dist/shared/rollup.js diff --git a/site/node_modules/rollup/dist/shared/watch-cli.js b/site/game/node_modules/rollup/dist/shared/watch-cli.js similarity index 100% rename from site/node_modules/rollup/dist/shared/watch-cli.js rename to site/game/node_modules/rollup/dist/shared/watch-cli.js diff --git a/site/node_modules/rollup/dist/shared/watch.js b/site/game/node_modules/rollup/dist/shared/watch.js similarity index 100% rename from site/node_modules/rollup/dist/shared/watch.js rename to site/game/node_modules/rollup/dist/shared/watch.js diff --git a/site/node_modules/rollup/package.json b/site/game/node_modules/rollup/package.json similarity index 100% rename from site/node_modules/rollup/package.json rename to site/game/node_modules/rollup/package.json diff --git a/site/node_modules/source-map-js/LICENSE b/site/game/node_modules/source-map-js/LICENSE similarity index 100% rename from site/node_modules/source-map-js/LICENSE rename to site/game/node_modules/source-map-js/LICENSE diff --git a/site/node_modules/source-map-js/README.md b/site/game/node_modules/source-map-js/README.md similarity index 100% rename from site/node_modules/source-map-js/README.md rename to site/game/node_modules/source-map-js/README.md diff --git a/site/node_modules/source-map-js/lib/array-set.js b/site/game/node_modules/source-map-js/lib/array-set.js similarity index 100% rename from site/node_modules/source-map-js/lib/array-set.js rename to site/game/node_modules/source-map-js/lib/array-set.js diff --git a/site/node_modules/source-map-js/lib/base64-vlq.js b/site/game/node_modules/source-map-js/lib/base64-vlq.js similarity index 100% rename from site/node_modules/source-map-js/lib/base64-vlq.js rename to site/game/node_modules/source-map-js/lib/base64-vlq.js diff --git a/site/node_modules/source-map-js/lib/base64.js b/site/game/node_modules/source-map-js/lib/base64.js similarity index 100% rename from site/node_modules/source-map-js/lib/base64.js rename to site/game/node_modules/source-map-js/lib/base64.js diff --git a/site/node_modules/source-map-js/lib/binary-search.js b/site/game/node_modules/source-map-js/lib/binary-search.js similarity index 100% rename from site/node_modules/source-map-js/lib/binary-search.js rename to site/game/node_modules/source-map-js/lib/binary-search.js diff --git a/site/node_modules/source-map-js/lib/mapping-list.js b/site/game/node_modules/source-map-js/lib/mapping-list.js similarity index 100% rename from site/node_modules/source-map-js/lib/mapping-list.js rename to site/game/node_modules/source-map-js/lib/mapping-list.js diff --git a/site/node_modules/source-map-js/lib/quick-sort.js b/site/game/node_modules/source-map-js/lib/quick-sort.js similarity index 100% rename from site/node_modules/source-map-js/lib/quick-sort.js rename to site/game/node_modules/source-map-js/lib/quick-sort.js diff --git a/site/node_modules/source-map-js/lib/source-map-consumer.js b/site/game/node_modules/source-map-js/lib/source-map-consumer.js similarity index 100% rename from site/node_modules/source-map-js/lib/source-map-consumer.js rename to site/game/node_modules/source-map-js/lib/source-map-consumer.js diff --git a/site/node_modules/source-map-js/lib/source-map-generator.js b/site/game/node_modules/source-map-js/lib/source-map-generator.js similarity index 100% rename from site/node_modules/source-map-js/lib/source-map-generator.js rename to site/game/node_modules/source-map-js/lib/source-map-generator.js diff --git a/site/node_modules/source-map-js/lib/source-node.js b/site/game/node_modules/source-map-js/lib/source-node.js similarity index 100% rename from site/node_modules/source-map-js/lib/source-node.js rename to site/game/node_modules/source-map-js/lib/source-node.js diff --git a/site/node_modules/source-map-js/lib/util.js b/site/game/node_modules/source-map-js/lib/util.js similarity index 100% rename from site/node_modules/source-map-js/lib/util.js rename to site/game/node_modules/source-map-js/lib/util.js diff --git a/site/node_modules/source-map-js/package.json b/site/game/node_modules/source-map-js/package.json similarity index 100% rename from site/node_modules/source-map-js/package.json rename to site/game/node_modules/source-map-js/package.json diff --git a/site/node_modules/source-map-js/source-map.d.ts b/site/game/node_modules/source-map-js/source-map.d.ts similarity index 100% rename from site/node_modules/source-map-js/source-map.d.ts rename to site/game/node_modules/source-map-js/source-map.d.ts diff --git a/site/node_modules/source-map-js/source-map.js b/site/game/node_modules/source-map-js/source-map.js similarity index 100% rename from site/node_modules/source-map-js/source-map.js rename to site/game/node_modules/source-map-js/source-map.js diff --git a/site/node_modules/stats.js/LICENSE b/site/game/node_modules/stats.js/LICENSE similarity index 100% rename from site/node_modules/stats.js/LICENSE rename to site/game/node_modules/stats.js/LICENSE diff --git a/site/node_modules/stats.js/build/stats.min.js b/site/game/node_modules/stats.js/build/stats.min.js similarity index 100% rename from site/node_modules/stats.js/build/stats.min.js rename to site/game/node_modules/stats.js/build/stats.min.js diff --git a/site/node_modules/stats.js/package.json b/site/game/node_modules/stats.js/package.json similarity index 100% rename from site/node_modules/stats.js/package.json rename to site/game/node_modules/stats.js/package.json diff --git a/site/node_modules/stats.js/src/Stats.js b/site/game/node_modules/stats.js/src/Stats.js similarity index 100% rename from site/node_modules/stats.js/src/Stats.js rename to site/game/node_modules/stats.js/src/Stats.js diff --git a/site/node_modules/stats/.npmignore b/site/game/node_modules/stats/.npmignore similarity index 100% rename from site/node_modules/stats/.npmignore rename to site/game/node_modules/stats/.npmignore diff --git a/site/node_modules/stats/History.md b/site/game/node_modules/stats/History.md similarity index 100% rename from site/node_modules/stats/History.md rename to site/game/node_modules/stats/History.md diff --git a/site/node_modules/stats/Makefile b/site/game/node_modules/stats/Makefile similarity index 100% rename from site/node_modules/stats/Makefile rename to site/game/node_modules/stats/Makefile diff --git a/site/node_modules/stats/Readme.md b/site/game/node_modules/stats/Readme.md similarity index 100% rename from site/node_modules/stats/Readme.md rename to site/game/node_modules/stats/Readme.md diff --git a/site/node_modules/stats/bin/stats b/site/game/node_modules/stats/bin/stats similarity index 100% rename from site/node_modules/stats/bin/stats rename to site/game/node_modules/stats/bin/stats diff --git a/site/node_modules/stats/index.js b/site/game/node_modules/stats/index.js similarity index 100% rename from site/node_modules/stats/index.js rename to site/game/node_modules/stats/index.js diff --git a/site/node_modules/stats/lib/find.js b/site/game/node_modules/stats/lib/find.js similarity index 100% rename from site/node_modules/stats/lib/find.js rename to site/game/node_modules/stats/lib/find.js diff --git a/site/node_modules/stats/lib/formats/index.js b/site/game/node_modules/stats/lib/formats/index.js similarity index 100% rename from site/node_modules/stats/lib/formats/index.js rename to site/game/node_modules/stats/lib/formats/index.js diff --git a/site/node_modules/stats/lib/formats/json.js b/site/game/node_modules/stats/lib/formats/json.js similarity index 100% rename from site/node_modules/stats/lib/formats/json.js rename to site/game/node_modules/stats/lib/formats/json.js diff --git a/site/node_modules/stats/lib/formats/text.js b/site/game/node_modules/stats/lib/formats/text.js similarity index 100% rename from site/node_modules/stats/lib/formats/text.js rename to site/game/node_modules/stats/lib/formats/text.js diff --git a/site/node_modules/stats/lib/parser.js b/site/game/node_modules/stats/lib/parser.js similarity index 100% rename from site/node_modules/stats/lib/parser.js rename to site/game/node_modules/stats/lib/parser.js diff --git a/site/node_modules/stats/lib/stats.js b/site/game/node_modules/stats/lib/stats.js similarity index 100% rename from site/node_modules/stats/lib/stats.js rename to site/game/node_modules/stats/lib/stats.js diff --git a/site/node_modules/stats/lib/uglify/parser.js b/site/game/node_modules/stats/lib/uglify/parser.js similarity index 100% rename from site/node_modules/stats/lib/uglify/parser.js rename to site/game/node_modules/stats/lib/uglify/parser.js diff --git a/site/node_modules/stats/package.json b/site/game/node_modules/stats/package.json similarity index 100% rename from site/node_modules/stats/package.json rename to site/game/node_modules/stats/package.json diff --git a/site/node_modules/stats/test/common.js b/site/game/node_modules/stats/test/common.js similarity index 100% rename from site/node_modules/stats/test/common.js rename to site/game/node_modules/stats/test/common.js diff --git a/site/node_modules/stats/test/fixtures/arrays.js b/site/game/node_modules/stats/test/fixtures/arrays.js similarity index 100% rename from site/node_modules/stats/test/fixtures/arrays.js rename to site/game/node_modules/stats/test/fixtures/arrays.js diff --git a/site/node_modules/stats/test/fixtures/comments.js b/site/game/node_modules/stats/test/fixtures/comments.js similarity index 100% rename from site/node_modules/stats/test/fixtures/comments.js rename to site/game/node_modules/stats/test/fixtures/comments.js diff --git a/site/node_modules/stats/test/fixtures/functions.js b/site/game/node_modules/stats/test/fixtures/functions.js similarity index 100% rename from site/node_modules/stats/test/fixtures/functions.js rename to site/game/node_modules/stats/test/fixtures/functions.js diff --git a/site/node_modules/stats/test/fixtures/http.js b/site/game/node_modules/stats/test/fixtures/http.js similarity index 100% rename from site/node_modules/stats/test/fixtures/http.js rename to site/game/node_modules/stats/test/fixtures/http.js diff --git a/site/node_modules/stats/test/fixtures/large.js b/site/game/node_modules/stats/test/fixtures/large.js similarity index 100% rename from site/node_modules/stats/test/fixtures/large.js rename to site/game/node_modules/stats/test/fixtures/large.js diff --git a/site/node_modules/stats/test/fixtures/objects.js b/site/game/node_modules/stats/test/fixtures/objects.js similarity index 100% rename from site/node_modules/stats/test/fixtures/objects.js rename to site/game/node_modules/stats/test/fixtures/objects.js diff --git a/site/node_modules/stats/test/fixtures/shebang.js b/site/game/node_modules/stats/test/fixtures/shebang.js similarity index 100% rename from site/node_modules/stats/test/fixtures/shebang.js rename to site/game/node_modules/stats/test/fixtures/shebang.js diff --git a/site/node_modules/stats/test/fixtures/simple.js b/site/game/node_modules/stats/test/fixtures/simple.js similarity index 100% rename from site/node_modules/stats/test/fixtures/simple.js rename to site/game/node_modules/stats/test/fixtures/simple.js diff --git a/site/node_modules/stats/test/fixtures/switch.js b/site/game/node_modules/stats/test/fixtures/switch.js similarity index 100% rename from site/node_modules/stats/test/fixtures/switch.js rename to site/game/node_modules/stats/test/fixtures/switch.js diff --git a/site/node_modules/stats/test/fixtures/while.js b/site/game/node_modules/stats/test/fixtures/while.js similarity index 100% rename from site/node_modules/stats/test/fixtures/while.js rename to site/game/node_modules/stats/test/fixtures/while.js diff --git a/site/node_modules/stats/test/fixtures/with.js b/site/game/node_modules/stats/test/fixtures/with.js similarity index 100% rename from site/node_modules/stats/test/fixtures/with.js rename to site/game/node_modules/stats/test/fixtures/with.js diff --git a/site/node_modules/stats/test/run b/site/game/node_modules/stats/test/run similarity index 100% rename from site/node_modules/stats/test/run rename to site/game/node_modules/stats/test/run diff --git a/site/node_modules/stats/test/test.arrays.js b/site/game/node_modules/stats/test/test.arrays.js similarity index 100% rename from site/node_modules/stats/test/test.arrays.js rename to site/game/node_modules/stats/test/test.arrays.js diff --git a/site/node_modules/stats/test/test.comments.js b/site/game/node_modules/stats/test/test.comments.js similarity index 100% rename from site/node_modules/stats/test/test.comments.js rename to site/game/node_modules/stats/test/test.comments.js diff --git a/site/node_modules/stats/test/test.forin.js b/site/game/node_modules/stats/test/test.forin.js similarity index 100% rename from site/node_modules/stats/test/test.forin.js rename to site/game/node_modules/stats/test/test.forin.js diff --git a/site/node_modules/stats/test/test.functions.js b/site/game/node_modules/stats/test/test.functions.js similarity index 100% rename from site/node_modules/stats/test/test.functions.js rename to site/game/node_modules/stats/test/test.functions.js diff --git a/site/node_modules/stats/test/test.http.js b/site/game/node_modules/stats/test/test.http.js similarity index 100% rename from site/node_modules/stats/test/test.http.js rename to site/game/node_modules/stats/test/test.http.js diff --git a/site/node_modules/stats/test/test.large.js b/site/game/node_modules/stats/test/test.large.js similarity index 100% rename from site/node_modules/stats/test/test.large.js rename to site/game/node_modules/stats/test/test.large.js diff --git a/site/node_modules/stats/test/test.objects.js b/site/game/node_modules/stats/test/test.objects.js similarity index 100% rename from site/node_modules/stats/test/test.objects.js rename to site/game/node_modules/stats/test/test.objects.js diff --git a/site/node_modules/stats/test/test.postfix.js b/site/game/node_modules/stats/test/test.postfix.js similarity index 100% rename from site/node_modules/stats/test/test.postfix.js rename to site/game/node_modules/stats/test/test.postfix.js diff --git a/site/node_modules/stats/test/test.regexp.js b/site/game/node_modules/stats/test/test.regexp.js similarity index 100% rename from site/node_modules/stats/test/test.regexp.js rename to site/game/node_modules/stats/test/test.regexp.js diff --git a/site/node_modules/stats/test/test.sequence.js b/site/game/node_modules/stats/test/test.sequence.js similarity index 100% rename from site/node_modules/stats/test/test.sequence.js rename to site/game/node_modules/stats/test/test.sequence.js diff --git a/site/node_modules/stats/test/test.shebang.js b/site/game/node_modules/stats/test/test.shebang.js similarity index 100% rename from site/node_modules/stats/test/test.shebang.js rename to site/game/node_modules/stats/test/test.shebang.js diff --git a/site/node_modules/stats/test/test.simple.js b/site/game/node_modules/stats/test/test.simple.js similarity index 100% rename from site/node_modules/stats/test/test.simple.js rename to site/game/node_modules/stats/test/test.simple.js diff --git a/site/node_modules/stats/test/test.switch.js b/site/game/node_modules/stats/test/test.switch.js similarity index 100% rename from site/node_modules/stats/test/test.switch.js rename to site/game/node_modules/stats/test/test.switch.js diff --git a/site/node_modules/stats/test/test.ternary.js b/site/game/node_modules/stats/test/test.ternary.js similarity index 100% rename from site/node_modules/stats/test/test.ternary.js rename to site/game/node_modules/stats/test/test.ternary.js diff --git a/site/node_modules/stats/test/test.trycatch.js b/site/game/node_modules/stats/test/test.trycatch.js similarity index 100% rename from site/node_modules/stats/test/test.trycatch.js rename to site/game/node_modules/stats/test/test.trycatch.js diff --git a/site/node_modules/stats/test/test.while.js b/site/game/node_modules/stats/test/test.while.js similarity index 100% rename from site/node_modules/stats/test/test.while.js rename to site/game/node_modules/stats/test/test.while.js diff --git a/site/node_modules/stats/test/test.with.js b/site/game/node_modules/stats/test/test.with.js similarity index 100% rename from site/node_modules/stats/test/test.with.js rename to site/game/node_modules/stats/test/test.with.js diff --git a/site/node_modules/three/LICENSE b/site/game/node_modules/three/LICENSE similarity index 100% rename from site/node_modules/three/LICENSE rename to site/game/node_modules/three/LICENSE diff --git a/site/node_modules/three/README.md b/site/game/node_modules/three/README.md similarity index 100% rename from site/node_modules/three/README.md rename to site/game/node_modules/three/README.md diff --git a/site/node_modules/three/build/three.cjs b/site/game/node_modules/three/build/three.cjs similarity index 100% rename from site/node_modules/three/build/three.cjs rename to site/game/node_modules/three/build/three.cjs diff --git a/site/node_modules/three/build/three.module.js b/site/game/node_modules/three/build/three.module.js similarity index 100% rename from site/node_modules/three/build/three.module.js rename to site/game/node_modules/three/build/three.module.js diff --git a/site/node_modules/three/build/three.module.min.js b/site/game/node_modules/three/build/three.module.min.js similarity index 100% rename from site/node_modules/three/build/three.module.min.js rename to site/game/node_modules/three/build/three.module.min.js diff --git a/site/node_modules/three/build/three.webgpu.js b/site/game/node_modules/three/build/three.webgpu.js similarity index 100% rename from site/node_modules/three/build/three.webgpu.js rename to site/game/node_modules/three/build/three.webgpu.js diff --git a/site/node_modules/three/build/three.webgpu.min.js b/site/game/node_modules/three/build/three.webgpu.min.js similarity index 100% rename from site/node_modules/three/build/three.webgpu.min.js rename to site/game/node_modules/three/build/three.webgpu.min.js diff --git a/site/node_modules/three/examples/fonts/LICENSE b/site/game/node_modules/three/examples/fonts/LICENSE similarity index 100% rename from site/node_modules/three/examples/fonts/LICENSE rename to site/game/node_modules/three/examples/fonts/LICENSE diff --git a/site/node_modules/three/examples/fonts/README.md b/site/game/node_modules/three/examples/fonts/README.md similarity index 100% rename from site/node_modules/three/examples/fonts/README.md rename to site/game/node_modules/three/examples/fonts/README.md diff --git a/site/node_modules/three/examples/fonts/droid/NOTICE b/site/game/node_modules/three/examples/fonts/droid/NOTICE similarity index 100% rename from site/node_modules/three/examples/fonts/droid/NOTICE rename to site/game/node_modules/three/examples/fonts/droid/NOTICE diff --git a/site/node_modules/three/examples/fonts/droid/README.txt b/site/game/node_modules/three/examples/fonts/droid/README.txt similarity index 100% rename from site/node_modules/three/examples/fonts/droid/README.txt rename to site/game/node_modules/three/examples/fonts/droid/README.txt diff --git a/site/node_modules/three/examples/fonts/droid/droid_sans_bold.typeface.json b/site/game/node_modules/three/examples/fonts/droid/droid_sans_bold.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/droid/droid_sans_bold.typeface.json rename to site/game/node_modules/three/examples/fonts/droid/droid_sans_bold.typeface.json diff --git a/site/node_modules/three/examples/fonts/droid/droid_sans_mono_regular.typeface.json b/site/game/node_modules/three/examples/fonts/droid/droid_sans_mono_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/droid/droid_sans_mono_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/droid/droid_sans_mono_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/droid/droid_sans_regular.typeface.json b/site/game/node_modules/three/examples/fonts/droid/droid_sans_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/droid/droid_sans_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/droid/droid_sans_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/droid/droid_serif_bold.typeface.json b/site/game/node_modules/three/examples/fonts/droid/droid_serif_bold.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/droid/droid_serif_bold.typeface.json rename to site/game/node_modules/three/examples/fonts/droid/droid_serif_bold.typeface.json diff --git a/site/node_modules/three/examples/fonts/droid/droid_serif_regular.typeface.json b/site/game/node_modules/three/examples/fonts/droid/droid_serif_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/droid/droid_serif_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/droid/droid_serif_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/gentilis_bold.typeface.json b/site/game/node_modules/three/examples/fonts/gentilis_bold.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/gentilis_bold.typeface.json rename to site/game/node_modules/three/examples/fonts/gentilis_bold.typeface.json diff --git a/site/node_modules/three/examples/fonts/gentilis_regular.typeface.json b/site/game/node_modules/three/examples/fonts/gentilis_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/gentilis_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/gentilis_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/helvetiker_bold.typeface.json b/site/game/node_modules/three/examples/fonts/helvetiker_bold.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/helvetiker_bold.typeface.json rename to site/game/node_modules/three/examples/fonts/helvetiker_bold.typeface.json diff --git a/site/node_modules/three/examples/fonts/helvetiker_regular.typeface.json b/site/game/node_modules/three/examples/fonts/helvetiker_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/helvetiker_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/helvetiker_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/optimer_bold.typeface.json b/site/game/node_modules/three/examples/fonts/optimer_bold.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/optimer_bold.typeface.json rename to site/game/node_modules/three/examples/fonts/optimer_bold.typeface.json diff --git a/site/node_modules/three/examples/fonts/optimer_regular.typeface.json b/site/game/node_modules/three/examples/fonts/optimer_regular.typeface.json similarity index 100% rename from site/node_modules/three/examples/fonts/optimer_regular.typeface.json rename to site/game/node_modules/three/examples/fonts/optimer_regular.typeface.json diff --git a/site/node_modules/three/examples/fonts/ttf/README.md b/site/game/node_modules/three/examples/fonts/ttf/README.md similarity index 100% rename from site/node_modules/three/examples/fonts/ttf/README.md rename to site/game/node_modules/three/examples/fonts/ttf/README.md diff --git a/site/node_modules/three/examples/fonts/ttf/kenpixel.ttf b/site/game/node_modules/three/examples/fonts/ttf/kenpixel.ttf similarity index 100% rename from site/node_modules/three/examples/fonts/ttf/kenpixel.ttf rename to site/game/node_modules/three/examples/fonts/ttf/kenpixel.ttf diff --git a/site/node_modules/three/examples/jsm/Addons.js b/site/game/node_modules/three/examples/jsm/Addons.js similarity index 100% rename from site/node_modules/three/examples/jsm/Addons.js rename to site/game/node_modules/three/examples/jsm/Addons.js diff --git a/site/node_modules/three/examples/jsm/animation/AnimationClipCreator.js b/site/game/node_modules/three/examples/jsm/animation/AnimationClipCreator.js similarity index 100% rename from site/node_modules/three/examples/jsm/animation/AnimationClipCreator.js rename to site/game/node_modules/three/examples/jsm/animation/AnimationClipCreator.js diff --git a/site/node_modules/three/examples/jsm/animation/CCDIKSolver.js b/site/game/node_modules/three/examples/jsm/animation/CCDIKSolver.js similarity index 100% rename from site/node_modules/three/examples/jsm/animation/CCDIKSolver.js rename to site/game/node_modules/three/examples/jsm/animation/CCDIKSolver.js diff --git a/site/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js b/site/game/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js rename to site/game/node_modules/three/examples/jsm/animation/MMDAnimationHelper.js diff --git a/site/node_modules/three/examples/jsm/animation/MMDPhysics.js b/site/game/node_modules/three/examples/jsm/animation/MMDPhysics.js similarity index 100% rename from site/node_modules/three/examples/jsm/animation/MMDPhysics.js rename to site/game/node_modules/three/examples/jsm/animation/MMDPhysics.js diff --git a/site/node_modules/three/examples/jsm/cameras/CinematicCamera.js b/site/game/node_modules/three/examples/jsm/cameras/CinematicCamera.js similarity index 100% rename from site/node_modules/three/examples/jsm/cameras/CinematicCamera.js rename to site/game/node_modules/three/examples/jsm/cameras/CinematicCamera.js diff --git a/site/node_modules/three/examples/jsm/capabilities/WebGL.js b/site/game/node_modules/three/examples/jsm/capabilities/WebGL.js similarity index 100% rename from site/node_modules/three/examples/jsm/capabilities/WebGL.js rename to site/game/node_modules/three/examples/jsm/capabilities/WebGL.js diff --git a/site/node_modules/three/examples/jsm/capabilities/WebGPU.js b/site/game/node_modules/three/examples/jsm/capabilities/WebGPU.js similarity index 100% rename from site/node_modules/three/examples/jsm/capabilities/WebGPU.js rename to site/game/node_modules/three/examples/jsm/capabilities/WebGPU.js diff --git a/site/node_modules/three/examples/jsm/controls/ArcballControls.js b/site/game/node_modules/three/examples/jsm/controls/ArcballControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/ArcballControls.js rename to site/game/node_modules/three/examples/jsm/controls/ArcballControls.js diff --git a/site/node_modules/three/examples/jsm/controls/DragControls.js b/site/game/node_modules/three/examples/jsm/controls/DragControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/DragControls.js rename to site/game/node_modules/three/examples/jsm/controls/DragControls.js diff --git a/site/node_modules/three/examples/jsm/controls/FirstPersonControls.js b/site/game/node_modules/three/examples/jsm/controls/FirstPersonControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/FirstPersonControls.js rename to site/game/node_modules/three/examples/jsm/controls/FirstPersonControls.js diff --git a/site/node_modules/three/examples/jsm/controls/FlyControls.js b/site/game/node_modules/three/examples/jsm/controls/FlyControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/FlyControls.js rename to site/game/node_modules/three/examples/jsm/controls/FlyControls.js diff --git a/site/node_modules/three/examples/jsm/controls/MapControls.js b/site/game/node_modules/three/examples/jsm/controls/MapControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/MapControls.js rename to site/game/node_modules/three/examples/jsm/controls/MapControls.js diff --git a/site/node_modules/three/examples/jsm/controls/OrbitControls.js b/site/game/node_modules/three/examples/jsm/controls/OrbitControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/OrbitControls.js rename to site/game/node_modules/three/examples/jsm/controls/OrbitControls.js diff --git a/site/node_modules/three/examples/jsm/controls/PointerLockControls.js b/site/game/node_modules/three/examples/jsm/controls/PointerLockControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/PointerLockControls.js rename to site/game/node_modules/three/examples/jsm/controls/PointerLockControls.js diff --git a/site/node_modules/three/examples/jsm/controls/TrackballControls.js b/site/game/node_modules/three/examples/jsm/controls/TrackballControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/TrackballControls.js rename to site/game/node_modules/three/examples/jsm/controls/TrackballControls.js diff --git a/site/node_modules/three/examples/jsm/controls/TransformControls.js b/site/game/node_modules/three/examples/jsm/controls/TransformControls.js similarity index 100% rename from site/node_modules/three/examples/jsm/controls/TransformControls.js rename to site/game/node_modules/three/examples/jsm/controls/TransformControls.js diff --git a/site/node_modules/three/examples/jsm/csm/CSM.js b/site/game/node_modules/three/examples/jsm/csm/CSM.js similarity index 100% rename from site/node_modules/three/examples/jsm/csm/CSM.js rename to site/game/node_modules/three/examples/jsm/csm/CSM.js diff --git a/site/node_modules/three/examples/jsm/csm/CSMFrustum.js b/site/game/node_modules/three/examples/jsm/csm/CSMFrustum.js similarity index 100% rename from site/node_modules/three/examples/jsm/csm/CSMFrustum.js rename to site/game/node_modules/three/examples/jsm/csm/CSMFrustum.js diff --git a/site/node_modules/three/examples/jsm/csm/CSMHelper.js b/site/game/node_modules/three/examples/jsm/csm/CSMHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/csm/CSMHelper.js rename to site/game/node_modules/three/examples/jsm/csm/CSMHelper.js diff --git a/site/node_modules/three/examples/jsm/csm/CSMShader.js b/site/game/node_modules/three/examples/jsm/csm/CSMShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/csm/CSMShader.js rename to site/game/node_modules/three/examples/jsm/csm/CSMShader.js diff --git a/site/node_modules/three/examples/jsm/curves/CurveExtras.js b/site/game/node_modules/three/examples/jsm/curves/CurveExtras.js similarity index 100% rename from site/node_modules/three/examples/jsm/curves/CurveExtras.js rename to site/game/node_modules/three/examples/jsm/curves/CurveExtras.js diff --git a/site/node_modules/three/examples/jsm/curves/NURBSCurve.js b/site/game/node_modules/three/examples/jsm/curves/NURBSCurve.js similarity index 100% rename from site/node_modules/three/examples/jsm/curves/NURBSCurve.js rename to site/game/node_modules/three/examples/jsm/curves/NURBSCurve.js diff --git a/site/node_modules/three/examples/jsm/curves/NURBSSurface.js b/site/game/node_modules/three/examples/jsm/curves/NURBSSurface.js similarity index 100% rename from site/node_modules/three/examples/jsm/curves/NURBSSurface.js rename to site/game/node_modules/three/examples/jsm/curves/NURBSSurface.js diff --git a/site/node_modules/three/examples/jsm/curves/NURBSUtils.js b/site/game/node_modules/three/examples/jsm/curves/NURBSUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/curves/NURBSUtils.js rename to site/game/node_modules/three/examples/jsm/curves/NURBSUtils.js diff --git a/site/node_modules/three/examples/jsm/curves/NURBSVolume.js b/site/game/node_modules/three/examples/jsm/curves/NURBSVolume.js similarity index 100% rename from site/node_modules/three/examples/jsm/curves/NURBSVolume.js rename to site/game/node_modules/three/examples/jsm/curves/NURBSVolume.js diff --git a/site/node_modules/three/examples/jsm/effects/AnaglyphEffect.js b/site/game/node_modules/three/examples/jsm/effects/AnaglyphEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/AnaglyphEffect.js rename to site/game/node_modules/three/examples/jsm/effects/AnaglyphEffect.js diff --git a/site/node_modules/three/examples/jsm/effects/AsciiEffect.js b/site/game/node_modules/three/examples/jsm/effects/AsciiEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/AsciiEffect.js rename to site/game/node_modules/three/examples/jsm/effects/AsciiEffect.js diff --git a/site/node_modules/three/examples/jsm/effects/OutlineEffect.js b/site/game/node_modules/three/examples/jsm/effects/OutlineEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/OutlineEffect.js rename to site/game/node_modules/three/examples/jsm/effects/OutlineEffect.js diff --git a/site/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js b/site/game/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js rename to site/game/node_modules/three/examples/jsm/effects/ParallaxBarrierEffect.js diff --git a/site/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js b/site/game/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js rename to site/game/node_modules/three/examples/jsm/effects/PeppersGhostEffect.js diff --git a/site/node_modules/three/examples/jsm/effects/StereoEffect.js b/site/game/node_modules/three/examples/jsm/effects/StereoEffect.js similarity index 100% rename from site/node_modules/three/examples/jsm/effects/StereoEffect.js rename to site/game/node_modules/three/examples/jsm/effects/StereoEffect.js diff --git a/site/node_modules/three/examples/jsm/environments/DebugEnvironment.js b/site/game/node_modules/three/examples/jsm/environments/DebugEnvironment.js similarity index 100% rename from site/node_modules/three/examples/jsm/environments/DebugEnvironment.js rename to site/game/node_modules/three/examples/jsm/environments/DebugEnvironment.js diff --git a/site/node_modules/three/examples/jsm/environments/RoomEnvironment.js b/site/game/node_modules/three/examples/jsm/environments/RoomEnvironment.js similarity index 100% rename from site/node_modules/three/examples/jsm/environments/RoomEnvironment.js rename to site/game/node_modules/three/examples/jsm/environments/RoomEnvironment.js diff --git a/site/node_modules/three/examples/jsm/exporters/DRACOExporter.js b/site/game/node_modules/three/examples/jsm/exporters/DRACOExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/DRACOExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/DRACOExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/EXRExporter.js b/site/game/node_modules/three/examples/jsm/exporters/EXRExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/EXRExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/EXRExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/GLTFExporter.js b/site/game/node_modules/three/examples/jsm/exporters/GLTFExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/GLTFExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/GLTFExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/KTX2Exporter.js b/site/game/node_modules/three/examples/jsm/exporters/KTX2Exporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/KTX2Exporter.js rename to site/game/node_modules/three/examples/jsm/exporters/KTX2Exporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/MMDExporter.js b/site/game/node_modules/three/examples/jsm/exporters/MMDExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/MMDExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/MMDExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/OBJExporter.js b/site/game/node_modules/three/examples/jsm/exporters/OBJExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/OBJExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/OBJExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/PLYExporter.js b/site/game/node_modules/three/examples/jsm/exporters/PLYExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/PLYExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/PLYExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/STLExporter.js b/site/game/node_modules/three/examples/jsm/exporters/STLExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/STLExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/STLExporter.js diff --git a/site/node_modules/three/examples/jsm/exporters/USDZExporter.js b/site/game/node_modules/three/examples/jsm/exporters/USDZExporter.js similarity index 100% rename from site/node_modules/three/examples/jsm/exporters/USDZExporter.js rename to site/game/node_modules/three/examples/jsm/exporters/USDZExporter.js diff --git a/site/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/BoxLineGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/ConvexGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/ConvexGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/ConvexGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/ConvexGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/DecalGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/DecalGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/DecalGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/DecalGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/InstancedPointsGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/ParametricGeometries.js b/site/game/node_modules/three/examples/jsm/geometries/ParametricGeometries.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/ParametricGeometries.js rename to site/game/node_modules/three/examples/jsm/geometries/ParametricGeometries.js diff --git a/site/node_modules/three/examples/jsm/geometries/ParametricGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/ParametricGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/ParametricGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/ParametricGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/RoundedBoxGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js b/site/game/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js rename to site/game/node_modules/three/examples/jsm/geometries/SDFGeometryGenerator.js diff --git a/site/node_modules/three/examples/jsm/geometries/TeapotGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/TeapotGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/TeapotGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/TeapotGeometry.js diff --git a/site/node_modules/three/examples/jsm/geometries/TextGeometry.js b/site/game/node_modules/three/examples/jsm/geometries/TextGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/geometries/TextGeometry.js rename to site/game/node_modules/three/examples/jsm/geometries/TextGeometry.js diff --git a/site/node_modules/three/examples/jsm/helpers/LightProbeHelper.js b/site/game/node_modules/three/examples/jsm/helpers/LightProbeHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/LightProbeHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/LightProbeHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/OctreeHelper.js b/site/game/node_modules/three/examples/jsm/helpers/OctreeHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/OctreeHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/OctreeHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js b/site/game/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/PositionalAudioHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js b/site/game/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/RectAreaLightHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/TextureHelper.js b/site/game/node_modules/three/examples/jsm/helpers/TextureHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/TextureHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/TextureHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js b/site/game/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/VertexNormalsHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js b/site/game/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/VertexTangentsHelper.js diff --git a/site/node_modules/three/examples/jsm/helpers/ViewHelper.js b/site/game/node_modules/three/examples/jsm/helpers/ViewHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/helpers/ViewHelper.js rename to site/game/node_modules/three/examples/jsm/helpers/ViewHelper.js diff --git a/site/node_modules/three/examples/jsm/interactive/HTMLMesh.js b/site/game/node_modules/three/examples/jsm/interactive/HTMLMesh.js similarity index 100% rename from site/node_modules/three/examples/jsm/interactive/HTMLMesh.js rename to site/game/node_modules/three/examples/jsm/interactive/HTMLMesh.js diff --git a/site/node_modules/three/examples/jsm/interactive/InteractiveGroup.js b/site/game/node_modules/three/examples/jsm/interactive/InteractiveGroup.js similarity index 100% rename from site/node_modules/three/examples/jsm/interactive/InteractiveGroup.js rename to site/game/node_modules/three/examples/jsm/interactive/InteractiveGroup.js diff --git a/site/node_modules/three/examples/jsm/interactive/SelectionBox.js b/site/game/node_modules/three/examples/jsm/interactive/SelectionBox.js similarity index 100% rename from site/node_modules/three/examples/jsm/interactive/SelectionBox.js rename to site/game/node_modules/three/examples/jsm/interactive/SelectionBox.js diff --git a/site/node_modules/three/examples/jsm/interactive/SelectionHelper.js b/site/game/node_modules/three/examples/jsm/interactive/SelectionHelper.js similarity index 100% rename from site/node_modules/three/examples/jsm/interactive/SelectionHelper.js rename to site/game/node_modules/three/examples/jsm/interactive/SelectionHelper.js diff --git a/site/node_modules/three/examples/jsm/libs/ammo.wasm.js b/site/game/node_modules/three/examples/jsm/libs/ammo.wasm.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/ammo.wasm.js rename to site/game/node_modules/three/examples/jsm/libs/ammo.wasm.js diff --git a/site/node_modules/three/examples/jsm/libs/ammo.wasm.wasm b/site/game/node_modules/three/examples/jsm/libs/ammo.wasm.wasm similarity index 100% rename from site/node_modules/three/examples/jsm/libs/ammo.wasm.wasm rename to site/game/node_modules/three/examples/jsm/libs/ammo.wasm.wasm diff --git a/site/node_modules/three/examples/jsm/libs/basis/README.md b/site/game/node_modules/three/examples/jsm/libs/basis/README.md similarity index 100% rename from site/node_modules/three/examples/jsm/libs/basis/README.md rename to site/game/node_modules/three/examples/jsm/libs/basis/README.md diff --git a/site/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js b/site/game/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js rename to site/game/node_modules/three/examples/jsm/libs/basis/basis_transcoder.js diff --git a/site/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm b/site/game/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm similarity index 100% rename from site/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm rename to site/game/node_modules/three/examples/jsm/libs/basis/basis_transcoder.wasm diff --git a/site/node_modules/three/examples/jsm/libs/chevrotain.module.min.js b/site/game/node_modules/three/examples/jsm/libs/chevrotain.module.min.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/chevrotain.module.min.js rename to site/game/node_modules/three/examples/jsm/libs/chevrotain.module.min.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/README.md b/site/game/node_modules/three/examples/jsm/libs/draco/README.md similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/README.md rename to site/game/node_modules/three/examples/jsm/libs/draco/README.md diff --git a/site/node_modules/three/examples/jsm/libs/draco/draco_decoder.js b/site/game/node_modules/three/examples/jsm/libs/draco/draco_decoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/draco_decoder.js rename to site/game/node_modules/three/examples/jsm/libs/draco/draco_decoder.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/draco_decoder.wasm b/site/game/node_modules/three/examples/jsm/libs/draco/draco_decoder.wasm similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/draco_decoder.wasm rename to site/game/node_modules/three/examples/jsm/libs/draco/draco_decoder.wasm diff --git a/site/node_modules/three/examples/jsm/libs/draco/draco_encoder.js b/site/game/node_modules/three/examples/jsm/libs/draco/draco_encoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/draco_encoder.js rename to site/game/node_modules/three/examples/jsm/libs/draco/draco_encoder.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/draco_wasm_wrapper.js b/site/game/node_modules/three/examples/jsm/libs/draco/draco_wasm_wrapper.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/draco_wasm_wrapper.js rename to site/game/node_modules/three/examples/jsm/libs/draco/draco_wasm_wrapper.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.js b/site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.js rename to site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.wasm b/site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.wasm similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.wasm rename to site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_decoder.wasm diff --git a/site/node_modules/three/examples/jsm/libs/draco/gltf/draco_encoder.js b/site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_encoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/gltf/draco_encoder.js rename to site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_encoder.js diff --git a/site/node_modules/three/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js b/site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js rename to site/game/node_modules/three/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js diff --git a/site/node_modules/three/examples/jsm/libs/ecsy.module.js b/site/game/node_modules/three/examples/jsm/libs/ecsy.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/ecsy.module.js rename to site/game/node_modules/three/examples/jsm/libs/ecsy.module.js diff --git a/site/node_modules/three/examples/jsm/libs/fflate.module.js b/site/game/node_modules/three/examples/jsm/libs/fflate.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/fflate.module.js rename to site/game/node_modules/three/examples/jsm/libs/fflate.module.js diff --git a/site/node_modules/three/examples/jsm/libs/ktx-parse.module.js b/site/game/node_modules/three/examples/jsm/libs/ktx-parse.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/ktx-parse.module.js rename to site/game/node_modules/three/examples/jsm/libs/ktx-parse.module.js diff --git a/site/node_modules/three/examples/jsm/libs/lil-gui.module.min.js b/site/game/node_modules/three/examples/jsm/libs/lil-gui.module.min.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/lil-gui.module.min.js rename to site/game/node_modules/three/examples/jsm/libs/lil-gui.module.min.js diff --git a/site/node_modules/three/examples/jsm/libs/lottie_canvas.module.js b/site/game/node_modules/three/examples/jsm/libs/lottie_canvas.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/lottie_canvas.module.js rename to site/game/node_modules/three/examples/jsm/libs/lottie_canvas.module.js diff --git a/site/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js b/site/game/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js rename to site/game/node_modules/three/examples/jsm/libs/meshopt_decoder.module.js diff --git a/site/node_modules/three/examples/jsm/libs/mikktspace.module.js b/site/game/node_modules/three/examples/jsm/libs/mikktspace.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/mikktspace.module.js rename to site/game/node_modules/three/examples/jsm/libs/mikktspace.module.js diff --git a/site/node_modules/three/examples/jsm/libs/mmdparser.module.js b/site/game/node_modules/three/examples/jsm/libs/mmdparser.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/mmdparser.module.js rename to site/game/node_modules/three/examples/jsm/libs/mmdparser.module.js diff --git a/site/node_modules/three/examples/jsm/libs/motion-controllers.module.js b/site/game/node_modules/three/examples/jsm/libs/motion-controllers.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/motion-controllers.module.js rename to site/game/node_modules/three/examples/jsm/libs/motion-controllers.module.js diff --git a/site/node_modules/three/examples/jsm/libs/opentype.module.js b/site/game/node_modules/three/examples/jsm/libs/opentype.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/opentype.module.js rename to site/game/node_modules/three/examples/jsm/libs/opentype.module.js diff --git a/site/node_modules/three/examples/jsm/libs/potpack.module.js b/site/game/node_modules/three/examples/jsm/libs/potpack.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/potpack.module.js rename to site/game/node_modules/three/examples/jsm/libs/potpack.module.js diff --git a/site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js b/site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js rename to site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.js diff --git a/site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js b/site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js rename to site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.module.js diff --git a/site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm b/site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm similarity index 100% rename from site/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm rename to site/game/node_modules/three/examples/jsm/libs/rhino3dm/rhino3dm.wasm diff --git a/site/node_modules/three/examples/jsm/libs/stats.module.js b/site/game/node_modules/three/examples/jsm/libs/stats.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/stats.module.js rename to site/game/node_modules/three/examples/jsm/libs/stats.module.js diff --git a/site/node_modules/three/examples/jsm/libs/surfaceNet.js b/site/game/node_modules/three/examples/jsm/libs/surfaceNet.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/surfaceNet.js rename to site/game/node_modules/three/examples/jsm/libs/surfaceNet.js diff --git a/site/node_modules/three/examples/jsm/libs/tween.module.js b/site/game/node_modules/three/examples/jsm/libs/tween.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/tween.module.js rename to site/game/node_modules/three/examples/jsm/libs/tween.module.js diff --git a/site/node_modules/three/examples/jsm/libs/utif.module.js b/site/game/node_modules/three/examples/jsm/libs/utif.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/utif.module.js rename to site/game/node_modules/three/examples/jsm/libs/utif.module.js diff --git a/site/node_modules/three/examples/jsm/libs/zstddec.module.js b/site/game/node_modules/three/examples/jsm/libs/zstddec.module.js similarity index 100% rename from site/node_modules/three/examples/jsm/libs/zstddec.module.js rename to site/game/node_modules/three/examples/jsm/libs/zstddec.module.js diff --git a/site/node_modules/three/examples/jsm/lights/LightProbeGenerator.js b/site/game/node_modules/three/examples/jsm/lights/LightProbeGenerator.js similarity index 100% rename from site/node_modules/three/examples/jsm/lights/LightProbeGenerator.js rename to site/game/node_modules/three/examples/jsm/lights/LightProbeGenerator.js diff --git a/site/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js b/site/game/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js similarity index 100% rename from site/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js rename to site/game/node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js diff --git a/site/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js b/site/game/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js similarity index 100% rename from site/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js rename to site/game/node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js diff --git a/site/node_modules/three/examples/jsm/lines/Line2.js b/site/game/node_modules/three/examples/jsm/lines/Line2.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/Line2.js rename to site/game/node_modules/three/examples/jsm/lines/Line2.js diff --git a/site/node_modules/three/examples/jsm/lines/LineGeometry.js b/site/game/node_modules/three/examples/jsm/lines/LineGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/LineGeometry.js rename to site/game/node_modules/three/examples/jsm/lines/LineGeometry.js diff --git a/site/node_modules/three/examples/jsm/lines/LineMaterial.js b/site/game/node_modules/three/examples/jsm/lines/LineMaterial.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/LineMaterial.js rename to site/game/node_modules/three/examples/jsm/lines/LineMaterial.js diff --git a/site/node_modules/three/examples/jsm/lines/LineSegments2.js b/site/game/node_modules/three/examples/jsm/lines/LineSegments2.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/LineSegments2.js rename to site/game/node_modules/three/examples/jsm/lines/LineSegments2.js diff --git a/site/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js b/site/game/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js rename to site/game/node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js diff --git a/site/node_modules/three/examples/jsm/lines/Wireframe.js b/site/game/node_modules/three/examples/jsm/lines/Wireframe.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/Wireframe.js rename to site/game/node_modules/three/examples/jsm/lines/Wireframe.js diff --git a/site/node_modules/three/examples/jsm/lines/WireframeGeometry2.js b/site/game/node_modules/three/examples/jsm/lines/WireframeGeometry2.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/WireframeGeometry2.js rename to site/game/node_modules/three/examples/jsm/lines/WireframeGeometry2.js diff --git a/site/node_modules/three/examples/jsm/lines/webgpu/Line2.js b/site/game/node_modules/three/examples/jsm/lines/webgpu/Line2.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/webgpu/Line2.js rename to site/game/node_modules/three/examples/jsm/lines/webgpu/Line2.js diff --git a/site/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js b/site/game/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js similarity index 100% rename from site/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js rename to site/game/node_modules/three/examples/jsm/lines/webgpu/LineSegments2.js diff --git a/site/node_modules/three/examples/jsm/loaders/3DMLoader.js b/site/game/node_modules/three/examples/jsm/loaders/3DMLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/3DMLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/3DMLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/3MFLoader.js b/site/game/node_modules/three/examples/jsm/loaders/3MFLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/3MFLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/3MFLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/AMFLoader.js b/site/game/node_modules/three/examples/jsm/loaders/AMFLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/AMFLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/AMFLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/BVHLoader.js b/site/game/node_modules/three/examples/jsm/loaders/BVHLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/BVHLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/BVHLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/ColladaLoader.js b/site/game/node_modules/three/examples/jsm/loaders/ColladaLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/ColladaLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/ColladaLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/DDSLoader.js b/site/game/node_modules/three/examples/jsm/loaders/DDSLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/DDSLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/DDSLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/DRACOLoader.js b/site/game/node_modules/three/examples/jsm/loaders/DRACOLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/DRACOLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/DRACOLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/EXRLoader.js b/site/game/node_modules/three/examples/jsm/loaders/EXRLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/EXRLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/EXRLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/FBXLoader.js b/site/game/node_modules/three/examples/jsm/loaders/FBXLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/FBXLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/FBXLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/FontLoader.js b/site/game/node_modules/three/examples/jsm/loaders/FontLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/FontLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/FontLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/GCodeLoader.js b/site/game/node_modules/three/examples/jsm/loaders/GCodeLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/GCodeLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/GCodeLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/GLTFLoader.js b/site/game/node_modules/three/examples/jsm/loaders/GLTFLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/GLTFLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/GLTFLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js b/site/game/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/HDRCubeTextureLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/IESLoader.js b/site/game/node_modules/three/examples/jsm/loaders/IESLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/IESLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/IESLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/KMZLoader.js b/site/game/node_modules/three/examples/jsm/loaders/KMZLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/KMZLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/KMZLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/KTX2Loader.js b/site/game/node_modules/three/examples/jsm/loaders/KTX2Loader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/KTX2Loader.js rename to site/game/node_modules/three/examples/jsm/loaders/KTX2Loader.js diff --git a/site/node_modules/three/examples/jsm/loaders/KTXLoader.js b/site/game/node_modules/three/examples/jsm/loaders/KTXLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/KTXLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/KTXLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LDrawLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LDrawLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LDrawLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LDrawLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LUT3dlLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LUTCubeLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LUTImageLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LUTImageLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LUTImageLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LUTImageLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LWOLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LWOLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LWOLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LWOLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LogLuvLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LogLuvLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LogLuvLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LogLuvLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/LottieLoader.js b/site/game/node_modules/three/examples/jsm/loaders/LottieLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/LottieLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/LottieLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/MD2Loader.js b/site/game/node_modules/three/examples/jsm/loaders/MD2Loader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/MD2Loader.js rename to site/game/node_modules/three/examples/jsm/loaders/MD2Loader.js diff --git a/site/node_modules/three/examples/jsm/loaders/MDDLoader.js b/site/game/node_modules/three/examples/jsm/loaders/MDDLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/MDDLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/MDDLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/MMDLoader.js b/site/game/node_modules/three/examples/jsm/loaders/MMDLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/MMDLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/MMDLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/MTLLoader.js b/site/game/node_modules/three/examples/jsm/loaders/MTLLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/MTLLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/MTLLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/MaterialXLoader.js b/site/game/node_modules/three/examples/jsm/loaders/MaterialXLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/MaterialXLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/MaterialXLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/NRRDLoader.js b/site/game/node_modules/three/examples/jsm/loaders/NRRDLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/NRRDLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/NRRDLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/OBJLoader.js b/site/game/node_modules/three/examples/jsm/loaders/OBJLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/OBJLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/OBJLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/PCDLoader.js b/site/game/node_modules/three/examples/jsm/loaders/PCDLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/PCDLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/PCDLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/PDBLoader.js b/site/game/node_modules/three/examples/jsm/loaders/PDBLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/PDBLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/PDBLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/PLYLoader.js b/site/game/node_modules/three/examples/jsm/loaders/PLYLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/PLYLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/PLYLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/PVRLoader.js b/site/game/node_modules/three/examples/jsm/loaders/PVRLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/PVRLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/PVRLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/RGBELoader.js b/site/game/node_modules/three/examples/jsm/loaders/RGBELoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/RGBELoader.js rename to site/game/node_modules/three/examples/jsm/loaders/RGBELoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/RGBMLoader.js b/site/game/node_modules/three/examples/jsm/loaders/RGBMLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/RGBMLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/RGBMLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/STLLoader.js b/site/game/node_modules/three/examples/jsm/loaders/STLLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/STLLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/STLLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/SVGLoader.js b/site/game/node_modules/three/examples/jsm/loaders/SVGLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/SVGLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/SVGLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/TDSLoader.js b/site/game/node_modules/three/examples/jsm/loaders/TDSLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/TDSLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/TDSLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/TGALoader.js b/site/game/node_modules/three/examples/jsm/loaders/TGALoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/TGALoader.js rename to site/game/node_modules/three/examples/jsm/loaders/TGALoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/TIFFLoader.js b/site/game/node_modules/three/examples/jsm/loaders/TIFFLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/TIFFLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/TIFFLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/TTFLoader.js b/site/game/node_modules/three/examples/jsm/loaders/TTFLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/TTFLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/TTFLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/TiltLoader.js b/site/game/node_modules/three/examples/jsm/loaders/TiltLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/TiltLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/TiltLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/USDZLoader.js b/site/game/node_modules/three/examples/jsm/loaders/USDZLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/USDZLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/USDZLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js b/site/game/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/UltraHDRLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/VOXLoader.js b/site/game/node_modules/three/examples/jsm/loaders/VOXLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/VOXLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/VOXLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/VRMLLoader.js b/site/game/node_modules/three/examples/jsm/loaders/VRMLLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/VRMLLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/VRMLLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/VTKLoader.js b/site/game/node_modules/three/examples/jsm/loaders/VTKLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/VTKLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/VTKLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/XYZLoader.js b/site/game/node_modules/three/examples/jsm/loaders/XYZLoader.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/XYZLoader.js rename to site/game/node_modules/three/examples/jsm/loaders/XYZLoader.js diff --git a/site/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js b/site/game/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js rename to site/game/node_modules/three/examples/jsm/loaders/lwo/IFFParser.js diff --git a/site/node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js b/site/game/node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js rename to site/game/node_modules/three/examples/jsm/loaders/lwo/LWO2Parser.js diff --git a/site/node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js b/site/game/node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js similarity index 100% rename from site/node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js rename to site/game/node_modules/three/examples/jsm/loaders/lwo/LWO3Parser.js diff --git a/site/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js b/site/game/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js similarity index 100% rename from site/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js rename to site/game/node_modules/three/examples/jsm/materials/MeshGouraudMaterial.js diff --git a/site/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js b/site/game/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js similarity index 100% rename from site/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js rename to site/game/node_modules/three/examples/jsm/materials/MeshPostProcessingMaterial.js diff --git a/site/node_modules/three/examples/jsm/math/Capsule.js b/site/game/node_modules/three/examples/jsm/math/Capsule.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/Capsule.js rename to site/game/node_modules/three/examples/jsm/math/Capsule.js diff --git a/site/node_modules/three/examples/jsm/math/ColorConverter.js b/site/game/node_modules/three/examples/jsm/math/ColorConverter.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/ColorConverter.js rename to site/game/node_modules/three/examples/jsm/math/ColorConverter.js diff --git a/site/node_modules/three/examples/jsm/math/ConvexHull.js b/site/game/node_modules/three/examples/jsm/math/ConvexHull.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/ConvexHull.js rename to site/game/node_modules/three/examples/jsm/math/ConvexHull.js diff --git a/site/node_modules/three/examples/jsm/math/ImprovedNoise.js b/site/game/node_modules/three/examples/jsm/math/ImprovedNoise.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/ImprovedNoise.js rename to site/game/node_modules/three/examples/jsm/math/ImprovedNoise.js diff --git a/site/node_modules/three/examples/jsm/math/Lut.js b/site/game/node_modules/three/examples/jsm/math/Lut.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/Lut.js rename to site/game/node_modules/three/examples/jsm/math/Lut.js diff --git a/site/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js b/site/game/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js rename to site/game/node_modules/three/examples/jsm/math/MeshSurfaceSampler.js diff --git a/site/node_modules/three/examples/jsm/math/OBB.js b/site/game/node_modules/three/examples/jsm/math/OBB.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/OBB.js rename to site/game/node_modules/three/examples/jsm/math/OBB.js diff --git a/site/node_modules/three/examples/jsm/math/Octree.js b/site/game/node_modules/three/examples/jsm/math/Octree.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/Octree.js rename to site/game/node_modules/three/examples/jsm/math/Octree.js diff --git a/site/node_modules/three/examples/jsm/math/SimplexNoise.js b/site/game/node_modules/three/examples/jsm/math/SimplexNoise.js similarity index 100% rename from site/node_modules/three/examples/jsm/math/SimplexNoise.js rename to site/game/node_modules/three/examples/jsm/math/SimplexNoise.js diff --git a/site/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js b/site/game/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js rename to site/game/node_modules/three/examples/jsm/misc/ConvexObjectBreaker.js diff --git a/site/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js b/site/game/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js rename to site/game/node_modules/three/examples/jsm/misc/GPUComputationRenderer.js diff --git a/site/node_modules/three/examples/jsm/misc/Gyroscope.js b/site/game/node_modules/three/examples/jsm/misc/Gyroscope.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/Gyroscope.js rename to site/game/node_modules/three/examples/jsm/misc/Gyroscope.js diff --git a/site/node_modules/three/examples/jsm/misc/MD2Character.js b/site/game/node_modules/three/examples/jsm/misc/MD2Character.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/MD2Character.js rename to site/game/node_modules/three/examples/jsm/misc/MD2Character.js diff --git a/site/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js b/site/game/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js rename to site/game/node_modules/three/examples/jsm/misc/MD2CharacterComplex.js diff --git a/site/node_modules/three/examples/jsm/misc/MorphAnimMesh.js b/site/game/node_modules/three/examples/jsm/misc/MorphAnimMesh.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/MorphAnimMesh.js rename to site/game/node_modules/three/examples/jsm/misc/MorphAnimMesh.js diff --git a/site/node_modules/three/examples/jsm/misc/MorphBlendMesh.js b/site/game/node_modules/three/examples/jsm/misc/MorphBlendMesh.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/MorphBlendMesh.js rename to site/game/node_modules/three/examples/jsm/misc/MorphBlendMesh.js diff --git a/site/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js b/site/game/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js rename to site/game/node_modules/three/examples/jsm/misc/ProgressiveLightMap.js diff --git a/site/node_modules/three/examples/jsm/misc/RollerCoaster.js b/site/game/node_modules/three/examples/jsm/misc/RollerCoaster.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/RollerCoaster.js rename to site/game/node_modules/three/examples/jsm/misc/RollerCoaster.js diff --git a/site/node_modules/three/examples/jsm/misc/Timer.js b/site/game/node_modules/three/examples/jsm/misc/Timer.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/Timer.js rename to site/game/node_modules/three/examples/jsm/misc/Timer.js diff --git a/site/node_modules/three/examples/jsm/misc/TubePainter.js b/site/game/node_modules/three/examples/jsm/misc/TubePainter.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/TubePainter.js rename to site/game/node_modules/three/examples/jsm/misc/TubePainter.js diff --git a/site/node_modules/three/examples/jsm/misc/Volume.js b/site/game/node_modules/three/examples/jsm/misc/Volume.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/Volume.js rename to site/game/node_modules/three/examples/jsm/misc/Volume.js diff --git a/site/node_modules/three/examples/jsm/misc/VolumeSlice.js b/site/game/node_modules/three/examples/jsm/misc/VolumeSlice.js similarity index 100% rename from site/node_modules/three/examples/jsm/misc/VolumeSlice.js rename to site/game/node_modules/three/examples/jsm/misc/VolumeSlice.js diff --git a/site/node_modules/three/examples/jsm/modifiers/CurveModifier.js b/site/game/node_modules/three/examples/jsm/modifiers/CurveModifier.js similarity index 100% rename from site/node_modules/three/examples/jsm/modifiers/CurveModifier.js rename to site/game/node_modules/three/examples/jsm/modifiers/CurveModifier.js diff --git a/site/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js b/site/game/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js similarity index 100% rename from site/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js rename to site/game/node_modules/three/examples/jsm/modifiers/EdgeSplitModifier.js diff --git a/site/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js b/site/game/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js similarity index 100% rename from site/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js rename to site/game/node_modules/three/examples/jsm/modifiers/SimplifyModifier.js diff --git a/site/node_modules/three/examples/jsm/modifiers/TessellateModifier.js b/site/game/node_modules/three/examples/jsm/modifiers/TessellateModifier.js similarity index 100% rename from site/node_modules/three/examples/jsm/modifiers/TessellateModifier.js rename to site/game/node_modules/three/examples/jsm/modifiers/TessellateModifier.js diff --git a/site/node_modules/three/examples/jsm/objects/GroundedSkybox.js b/site/game/node_modules/three/examples/jsm/objects/GroundedSkybox.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/GroundedSkybox.js rename to site/game/node_modules/three/examples/jsm/objects/GroundedSkybox.js diff --git a/site/node_modules/three/examples/jsm/objects/InstancedPoints.js b/site/game/node_modules/three/examples/jsm/objects/InstancedPoints.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/InstancedPoints.js rename to site/game/node_modules/three/examples/jsm/objects/InstancedPoints.js diff --git a/site/node_modules/three/examples/jsm/objects/Lensflare.js b/site/game/node_modules/three/examples/jsm/objects/Lensflare.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Lensflare.js rename to site/game/node_modules/three/examples/jsm/objects/Lensflare.js diff --git a/site/node_modules/three/examples/jsm/objects/MarchingCubes.js b/site/game/node_modules/three/examples/jsm/objects/MarchingCubes.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/MarchingCubes.js rename to site/game/node_modules/three/examples/jsm/objects/MarchingCubes.js diff --git a/site/node_modules/three/examples/jsm/objects/Reflector.js b/site/game/node_modules/three/examples/jsm/objects/Reflector.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Reflector.js rename to site/game/node_modules/three/examples/jsm/objects/Reflector.js diff --git a/site/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js b/site/game/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js rename to site/game/node_modules/three/examples/jsm/objects/ReflectorForSSRPass.js diff --git a/site/node_modules/three/examples/jsm/objects/Refractor.js b/site/game/node_modules/three/examples/jsm/objects/Refractor.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Refractor.js rename to site/game/node_modules/three/examples/jsm/objects/Refractor.js diff --git a/site/node_modules/three/examples/jsm/objects/ShadowMesh.js b/site/game/node_modules/three/examples/jsm/objects/ShadowMesh.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/ShadowMesh.js rename to site/game/node_modules/three/examples/jsm/objects/ShadowMesh.js diff --git a/site/node_modules/three/examples/jsm/objects/Sky.js b/site/game/node_modules/three/examples/jsm/objects/Sky.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Sky.js rename to site/game/node_modules/three/examples/jsm/objects/Sky.js diff --git a/site/node_modules/three/examples/jsm/objects/Water.js b/site/game/node_modules/three/examples/jsm/objects/Water.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Water.js rename to site/game/node_modules/three/examples/jsm/objects/Water.js diff --git a/site/node_modules/three/examples/jsm/objects/Water2.js b/site/game/node_modules/three/examples/jsm/objects/Water2.js similarity index 100% rename from site/node_modules/three/examples/jsm/objects/Water2.js rename to site/game/node_modules/three/examples/jsm/objects/Water2.js diff --git a/site/node_modules/three/examples/jsm/offscreen/jank.js b/site/game/node_modules/three/examples/jsm/offscreen/jank.js similarity index 100% rename from site/node_modules/three/examples/jsm/offscreen/jank.js rename to site/game/node_modules/three/examples/jsm/offscreen/jank.js diff --git a/site/node_modules/three/examples/jsm/offscreen/offscreen.js b/site/game/node_modules/three/examples/jsm/offscreen/offscreen.js similarity index 100% rename from site/node_modules/three/examples/jsm/offscreen/offscreen.js rename to site/game/node_modules/three/examples/jsm/offscreen/offscreen.js diff --git a/site/node_modules/three/examples/jsm/offscreen/scene.js b/site/game/node_modules/three/examples/jsm/offscreen/scene.js similarity index 100% rename from site/node_modules/three/examples/jsm/offscreen/scene.js rename to site/game/node_modules/three/examples/jsm/offscreen/scene.js diff --git a/site/node_modules/three/examples/jsm/physics/AmmoPhysics.js b/site/game/node_modules/three/examples/jsm/physics/AmmoPhysics.js similarity index 100% rename from site/node_modules/three/examples/jsm/physics/AmmoPhysics.js rename to site/game/node_modules/three/examples/jsm/physics/AmmoPhysics.js diff --git a/site/node_modules/three/examples/jsm/physics/JoltPhysics.js b/site/game/node_modules/three/examples/jsm/physics/JoltPhysics.js similarity index 100% rename from site/node_modules/three/examples/jsm/physics/JoltPhysics.js rename to site/game/node_modules/three/examples/jsm/physics/JoltPhysics.js diff --git a/site/node_modules/three/examples/jsm/physics/RapierPhysics.js b/site/game/node_modules/three/examples/jsm/physics/RapierPhysics.js similarity index 100% rename from site/node_modules/three/examples/jsm/physics/RapierPhysics.js rename to site/game/node_modules/three/examples/jsm/physics/RapierPhysics.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/AfterimagePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/BloomPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/BloomPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/BloomPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/BloomPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/BokehPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/BokehPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/BokehPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/BokehPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/ClearPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/ClearPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/ClearPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/ClearPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/CubeTexturePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/DotScreenPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/EffectComposer.js b/site/game/node_modules/three/examples/jsm/postprocessing/EffectComposer.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/EffectComposer.js rename to site/game/node_modules/three/examples/jsm/postprocessing/EffectComposer.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/FilmPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/FilmPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/FilmPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/FilmPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/GTAOPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/GTAOPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/GTAOPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/GTAOPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/GlitchPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/GlitchPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/GlitchPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/GlitchPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/HalftonePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/HalftonePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/HalftonePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/HalftonePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/LUTPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/LUTPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/LUTPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/LUTPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/MaskPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/MaskPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/MaskPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/MaskPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/OutlinePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/OutlinePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/OutlinePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/OutlinePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/OutputPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/OutputPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/OutputPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/OutputPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/Pass.js b/site/game/node_modules/three/examples/jsm/postprocessing/Pass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/Pass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/Pass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/RenderPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/RenderPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/RenderPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/RenderPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/RenderPixelatedPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/RenderTransitionPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SAOPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SAOPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SAOPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SAOPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SMAAPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SMAAPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SMAAPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SMAAPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SSAARenderPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SSAOPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SSAOPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SSAOPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SSAOPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SSRPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SSRPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SSRPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SSRPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/SavePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/SavePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/SavePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/SavePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/ShaderPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/ShaderPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/ShaderPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/ShaderPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/TAARenderPass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/TexturePass.js b/site/game/node_modules/three/examples/jsm/postprocessing/TexturePass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/TexturePass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/TexturePass.js diff --git a/site/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js b/site/game/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js similarity index 100% rename from site/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js rename to site/game/node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js diff --git a/site/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js b/site/game/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js similarity index 100% rename from site/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js rename to site/game/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js diff --git a/site/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js b/site/game/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js similarity index 100% rename from site/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js rename to site/game/node_modules/three/examples/jsm/renderers/CSS3DRenderer.js diff --git a/site/node_modules/three/examples/jsm/renderers/Projector.js b/site/game/node_modules/three/examples/jsm/renderers/Projector.js similarity index 100% rename from site/node_modules/three/examples/jsm/renderers/Projector.js rename to site/game/node_modules/three/examples/jsm/renderers/Projector.js diff --git a/site/node_modules/three/examples/jsm/renderers/SVGRenderer.js b/site/game/node_modules/three/examples/jsm/renderers/SVGRenderer.js similarity index 100% rename from site/node_modules/three/examples/jsm/renderers/SVGRenderer.js rename to site/game/node_modules/three/examples/jsm/renderers/SVGRenderer.js diff --git a/site/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js b/site/game/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ACESFilmicToneMappingShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/AfterimageShader.js b/site/game/node_modules/three/examples/jsm/shaders/AfterimageShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/AfterimageShader.js rename to site/game/node_modules/three/examples/jsm/shaders/AfterimageShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/BasicShader.js b/site/game/node_modules/three/examples/jsm/shaders/BasicShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BasicShader.js rename to site/game/node_modules/three/examples/jsm/shaders/BasicShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/BleachBypassShader.js b/site/game/node_modules/three/examples/jsm/shaders/BleachBypassShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BleachBypassShader.js rename to site/game/node_modules/three/examples/jsm/shaders/BleachBypassShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/BlendShader.js b/site/game/node_modules/three/examples/jsm/shaders/BlendShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BlendShader.js rename to site/game/node_modules/three/examples/jsm/shaders/BlendShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/BokehShader.js b/site/game/node_modules/three/examples/jsm/shaders/BokehShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BokehShader.js rename to site/game/node_modules/three/examples/jsm/shaders/BokehShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/BokehShader2.js b/site/game/node_modules/three/examples/jsm/shaders/BokehShader2.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BokehShader2.js rename to site/game/node_modules/three/examples/jsm/shaders/BokehShader2.js diff --git a/site/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js b/site/game/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js rename to site/game/node_modules/three/examples/jsm/shaders/BrightnessContrastShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js b/site/game/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ColorCorrectionShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/ColorifyShader.js b/site/game/node_modules/three/examples/jsm/shaders/ColorifyShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ColorifyShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ColorifyShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/ConvolutionShader.js b/site/game/node_modules/three/examples/jsm/shaders/ConvolutionShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ConvolutionShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ConvolutionShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/CopyShader.js b/site/game/node_modules/three/examples/jsm/shaders/CopyShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/CopyShader.js rename to site/game/node_modules/three/examples/jsm/shaders/CopyShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js b/site/game/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js rename to site/game/node_modules/three/examples/jsm/shaders/DOFMipMapShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js b/site/game/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js rename to site/game/node_modules/three/examples/jsm/shaders/DepthLimitedBlurShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/DigitalGlitch.js b/site/game/node_modules/three/examples/jsm/shaders/DigitalGlitch.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/DigitalGlitch.js rename to site/game/node_modules/three/examples/jsm/shaders/DigitalGlitch.js diff --git a/site/node_modules/three/examples/jsm/shaders/DotScreenShader.js b/site/game/node_modules/three/examples/jsm/shaders/DotScreenShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/DotScreenShader.js rename to site/game/node_modules/three/examples/jsm/shaders/DotScreenShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/ExposureShader.js b/site/game/node_modules/three/examples/jsm/shaders/ExposureShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ExposureShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ExposureShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/FXAAShader.js b/site/game/node_modules/three/examples/jsm/shaders/FXAAShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/FXAAShader.js rename to site/game/node_modules/three/examples/jsm/shaders/FXAAShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/FilmShader.js b/site/game/node_modules/three/examples/jsm/shaders/FilmShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/FilmShader.js rename to site/game/node_modules/three/examples/jsm/shaders/FilmShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/FocusShader.js b/site/game/node_modules/three/examples/jsm/shaders/FocusShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/FocusShader.js rename to site/game/node_modules/three/examples/jsm/shaders/FocusShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/FreiChenShader.js b/site/game/node_modules/three/examples/jsm/shaders/FreiChenShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/FreiChenShader.js rename to site/game/node_modules/three/examples/jsm/shaders/FreiChenShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/GTAOShader.js b/site/game/node_modules/three/examples/jsm/shaders/GTAOShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/GTAOShader.js rename to site/game/node_modules/three/examples/jsm/shaders/GTAOShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js b/site/game/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js rename to site/game/node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/GodRaysShader.js b/site/game/node_modules/three/examples/jsm/shaders/GodRaysShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/GodRaysShader.js rename to site/game/node_modules/three/examples/jsm/shaders/GodRaysShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/HalftoneShader.js b/site/game/node_modules/three/examples/jsm/shaders/HalftoneShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/HalftoneShader.js rename to site/game/node_modules/three/examples/jsm/shaders/HalftoneShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js b/site/game/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js rename to site/game/node_modules/three/examples/jsm/shaders/HorizontalBlurShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js b/site/game/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js rename to site/game/node_modules/three/examples/jsm/shaders/HorizontalTiltShiftShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/HueSaturationShader.js b/site/game/node_modules/three/examples/jsm/shaders/HueSaturationShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/HueSaturationShader.js rename to site/game/node_modules/three/examples/jsm/shaders/HueSaturationShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/KaleidoShader.js b/site/game/node_modules/three/examples/jsm/shaders/KaleidoShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/KaleidoShader.js rename to site/game/node_modules/three/examples/jsm/shaders/KaleidoShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js b/site/game/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js rename to site/game/node_modules/three/examples/jsm/shaders/LuminosityHighPassShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/LuminosityShader.js b/site/game/node_modules/three/examples/jsm/shaders/LuminosityShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/LuminosityShader.js rename to site/game/node_modules/three/examples/jsm/shaders/LuminosityShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/MMDToonShader.js b/site/game/node_modules/three/examples/jsm/shaders/MMDToonShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/MMDToonShader.js rename to site/game/node_modules/three/examples/jsm/shaders/MMDToonShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/MirrorShader.js b/site/game/node_modules/three/examples/jsm/shaders/MirrorShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/MirrorShader.js rename to site/game/node_modules/three/examples/jsm/shaders/MirrorShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/NormalMapShader.js b/site/game/node_modules/three/examples/jsm/shaders/NormalMapShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/NormalMapShader.js rename to site/game/node_modules/three/examples/jsm/shaders/NormalMapShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/OutputShader.js b/site/game/node_modules/three/examples/jsm/shaders/OutputShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/OutputShader.js rename to site/game/node_modules/three/examples/jsm/shaders/OutputShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js b/site/game/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js rename to site/game/node_modules/three/examples/jsm/shaders/PoissonDenoiseShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/RGBShiftShader.js b/site/game/node_modules/three/examples/jsm/shaders/RGBShiftShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/RGBShiftShader.js rename to site/game/node_modules/three/examples/jsm/shaders/RGBShiftShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SAOShader.js b/site/game/node_modules/three/examples/jsm/shaders/SAOShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SAOShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SAOShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SMAAShader.js b/site/game/node_modules/three/examples/jsm/shaders/SMAAShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SMAAShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SMAAShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SSAOShader.js b/site/game/node_modules/three/examples/jsm/shaders/SSAOShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SSAOShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SSAOShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SSRShader.js b/site/game/node_modules/three/examples/jsm/shaders/SSRShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SSRShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SSRShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SepiaShader.js b/site/game/node_modules/three/examples/jsm/shaders/SepiaShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SepiaShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SepiaShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js b/site/game/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SobelOperatorShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js b/site/game/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js rename to site/game/node_modules/three/examples/jsm/shaders/SubsurfaceScatteringShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/TechnicolorShader.js b/site/game/node_modules/three/examples/jsm/shaders/TechnicolorShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/TechnicolorShader.js rename to site/game/node_modules/three/examples/jsm/shaders/TechnicolorShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/ToonShader.js b/site/game/node_modules/three/examples/jsm/shaders/ToonShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/ToonShader.js rename to site/game/node_modules/three/examples/jsm/shaders/ToonShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js b/site/game/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js rename to site/game/node_modules/three/examples/jsm/shaders/TriangleBlurShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js b/site/game/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js rename to site/game/node_modules/three/examples/jsm/shaders/UnpackDepthRGBAShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/VelocityShader.js b/site/game/node_modules/three/examples/jsm/shaders/VelocityShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/VelocityShader.js rename to site/game/node_modules/three/examples/jsm/shaders/VelocityShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js b/site/game/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js rename to site/game/node_modules/three/examples/jsm/shaders/VerticalBlurShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js b/site/game/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js rename to site/game/node_modules/three/examples/jsm/shaders/VerticalTiltShiftShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/VignetteShader.js b/site/game/node_modules/three/examples/jsm/shaders/VignetteShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/VignetteShader.js rename to site/game/node_modules/three/examples/jsm/shaders/VignetteShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/VolumeShader.js b/site/game/node_modules/three/examples/jsm/shaders/VolumeShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/VolumeShader.js rename to site/game/node_modules/three/examples/jsm/shaders/VolumeShader.js diff --git a/site/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js b/site/game/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js similarity index 100% rename from site/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js rename to site/game/node_modules/three/examples/jsm/shaders/WaterRefractionShader.js diff --git a/site/node_modules/three/examples/jsm/textures/FlakesTexture.js b/site/game/node_modules/three/examples/jsm/textures/FlakesTexture.js similarity index 100% rename from site/node_modules/three/examples/jsm/textures/FlakesTexture.js rename to site/game/node_modules/three/examples/jsm/textures/FlakesTexture.js diff --git a/site/node_modules/three/examples/jsm/transpiler/AST.js b/site/game/node_modules/three/examples/jsm/transpiler/AST.js similarity index 100% rename from site/node_modules/three/examples/jsm/transpiler/AST.js rename to site/game/node_modules/three/examples/jsm/transpiler/AST.js diff --git a/site/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js b/site/game/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js rename to site/game/node_modules/three/examples/jsm/transpiler/GLSLDecoder.js diff --git a/site/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js b/site/game/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js rename to site/game/node_modules/three/examples/jsm/transpiler/ShaderToyDecoder.js diff --git a/site/node_modules/three/examples/jsm/transpiler/TSLEncoder.js b/site/game/node_modules/three/examples/jsm/transpiler/TSLEncoder.js similarity index 100% rename from site/node_modules/three/examples/jsm/transpiler/TSLEncoder.js rename to site/game/node_modules/three/examples/jsm/transpiler/TSLEncoder.js diff --git a/site/node_modules/three/examples/jsm/transpiler/Transpiler.js b/site/game/node_modules/three/examples/jsm/transpiler/Transpiler.js similarity index 100% rename from site/node_modules/three/examples/jsm/transpiler/Transpiler.js rename to site/game/node_modules/three/examples/jsm/transpiler/Transpiler.js diff --git a/site/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js b/site/game/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js rename to site/game/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/CameraUtils.js b/site/game/node_modules/three/examples/jsm/utils/CameraUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/CameraUtils.js rename to site/game/node_modules/three/examples/jsm/utils/CameraUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/GPUStatsPanel.js b/site/game/node_modules/three/examples/jsm/utils/GPUStatsPanel.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/GPUStatsPanel.js rename to site/game/node_modules/three/examples/jsm/utils/GPUStatsPanel.js diff --git a/site/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js b/site/game/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js rename to site/game/node_modules/three/examples/jsm/utils/GeometryCompressionUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/GeometryUtils.js b/site/game/node_modules/three/examples/jsm/utils/GeometryUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/GeometryUtils.js rename to site/game/node_modules/three/examples/jsm/utils/GeometryUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/LDrawUtils.js b/site/game/node_modules/three/examples/jsm/utils/LDrawUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/LDrawUtils.js rename to site/game/node_modules/three/examples/jsm/utils/LDrawUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js b/site/game/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js rename to site/game/node_modules/three/examples/jsm/utils/PackedPhongMaterial.js diff --git a/site/node_modules/three/examples/jsm/utils/SceneUtils.js b/site/game/node_modules/three/examples/jsm/utils/SceneUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/SceneUtils.js rename to site/game/node_modules/three/examples/jsm/utils/SceneUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/ShadowMapViewer.js b/site/game/node_modules/three/examples/jsm/utils/ShadowMapViewer.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/ShadowMapViewer.js rename to site/game/node_modules/three/examples/jsm/utils/ShadowMapViewer.js diff --git a/site/node_modules/three/examples/jsm/utils/SkeletonUtils.js b/site/game/node_modules/three/examples/jsm/utils/SkeletonUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/SkeletonUtils.js rename to site/game/node_modules/three/examples/jsm/utils/SkeletonUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/SortUtils.js b/site/game/node_modules/three/examples/jsm/utils/SortUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/SortUtils.js rename to site/game/node_modules/three/examples/jsm/utils/SortUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/TextureUtils.js b/site/game/node_modules/three/examples/jsm/utils/TextureUtils.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/TextureUtils.js rename to site/game/node_modules/three/examples/jsm/utils/TextureUtils.js diff --git a/site/node_modules/three/examples/jsm/utils/UVsDebug.js b/site/game/node_modules/three/examples/jsm/utils/UVsDebug.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/UVsDebug.js rename to site/game/node_modules/three/examples/jsm/utils/UVsDebug.js diff --git a/site/node_modules/three/examples/jsm/utils/WorkerPool.js b/site/game/node_modules/three/examples/jsm/utils/WorkerPool.js similarity index 100% rename from site/node_modules/three/examples/jsm/utils/WorkerPool.js rename to site/game/node_modules/three/examples/jsm/utils/WorkerPool.js diff --git a/site/node_modules/three/examples/jsm/webxr/ARButton.js b/site/game/node_modules/three/examples/jsm/webxr/ARButton.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/ARButton.js rename to site/game/node_modules/three/examples/jsm/webxr/ARButton.js diff --git a/site/node_modules/three/examples/jsm/webxr/OculusHandModel.js b/site/game/node_modules/three/examples/jsm/webxr/OculusHandModel.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/OculusHandModel.js rename to site/game/node_modules/three/examples/jsm/webxr/OculusHandModel.js diff --git a/site/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js b/site/game/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js rename to site/game/node_modules/three/examples/jsm/webxr/OculusHandPointerModel.js diff --git a/site/node_modules/three/examples/jsm/webxr/Text2D.js b/site/game/node_modules/three/examples/jsm/webxr/Text2D.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/Text2D.js rename to site/game/node_modules/three/examples/jsm/webxr/Text2D.js diff --git a/site/node_modules/three/examples/jsm/webxr/VRButton.js b/site/game/node_modules/three/examples/jsm/webxr/VRButton.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/VRButton.js rename to site/game/node_modules/three/examples/jsm/webxr/VRButton.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRButton.js b/site/game/node_modules/three/examples/jsm/webxr/XRButton.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRButton.js rename to site/game/node_modules/three/examples/jsm/webxr/XRButton.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js b/site/game/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js rename to site/game/node_modules/three/examples/jsm/webxr/XRControllerModelFactory.js diff --git a/site/node_modules/three/examples/jsm/webxr/XREstimatedLight.js b/site/game/node_modules/three/examples/jsm/webxr/XREstimatedLight.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XREstimatedLight.js rename to site/game/node_modules/three/examples/jsm/webxr/XREstimatedLight.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js b/site/game/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js rename to site/game/node_modules/three/examples/jsm/webxr/XRHandMeshModel.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js b/site/game/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js rename to site/game/node_modules/three/examples/jsm/webxr/XRHandModelFactory.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js b/site/game/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js rename to site/game/node_modules/three/examples/jsm/webxr/XRHandPrimitiveModel.js diff --git a/site/node_modules/three/examples/jsm/webxr/XRPlanes.js b/site/game/node_modules/three/examples/jsm/webxr/XRPlanes.js similarity index 100% rename from site/node_modules/three/examples/jsm/webxr/XRPlanes.js rename to site/game/node_modules/three/examples/jsm/webxr/XRPlanes.js diff --git a/site/node_modules/three/package.json b/site/game/node_modules/three/package.json similarity index 100% rename from site/node_modules/three/package.json rename to site/game/node_modules/three/package.json diff --git a/site/node_modules/three/src/Three.Legacy.js b/site/game/node_modules/three/src/Three.Legacy.js similarity index 100% rename from site/node_modules/three/src/Three.Legacy.js rename to site/game/node_modules/three/src/Three.Legacy.js diff --git a/site/node_modules/three/src/Three.WebGPU.js b/site/game/node_modules/three/src/Three.WebGPU.js similarity index 100% rename from site/node_modules/three/src/Three.WebGPU.js rename to site/game/node_modules/three/src/Three.WebGPU.js diff --git a/site/node_modules/three/src/Three.js b/site/game/node_modules/three/src/Three.js similarity index 100% rename from site/node_modules/three/src/Three.js rename to site/game/node_modules/three/src/Three.js diff --git a/site/node_modules/three/src/animation/AnimationAction.js b/site/game/node_modules/three/src/animation/AnimationAction.js similarity index 100% rename from site/node_modules/three/src/animation/AnimationAction.js rename to site/game/node_modules/three/src/animation/AnimationAction.js diff --git a/site/node_modules/three/src/animation/AnimationClip.js b/site/game/node_modules/three/src/animation/AnimationClip.js similarity index 100% rename from site/node_modules/three/src/animation/AnimationClip.js rename to site/game/node_modules/three/src/animation/AnimationClip.js diff --git a/site/node_modules/three/src/animation/AnimationMixer.js b/site/game/node_modules/three/src/animation/AnimationMixer.js similarity index 100% rename from site/node_modules/three/src/animation/AnimationMixer.js rename to site/game/node_modules/three/src/animation/AnimationMixer.js diff --git a/site/node_modules/three/src/animation/AnimationObjectGroup.js b/site/game/node_modules/three/src/animation/AnimationObjectGroup.js similarity index 100% rename from site/node_modules/three/src/animation/AnimationObjectGroup.js rename to site/game/node_modules/three/src/animation/AnimationObjectGroup.js diff --git a/site/node_modules/three/src/animation/AnimationUtils.js b/site/game/node_modules/three/src/animation/AnimationUtils.js similarity index 100% rename from site/node_modules/three/src/animation/AnimationUtils.js rename to site/game/node_modules/three/src/animation/AnimationUtils.js diff --git a/site/node_modules/three/src/animation/KeyframeTrack.js b/site/game/node_modules/three/src/animation/KeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/KeyframeTrack.js rename to site/game/node_modules/three/src/animation/KeyframeTrack.js diff --git a/site/node_modules/three/src/animation/PropertyBinding.js b/site/game/node_modules/three/src/animation/PropertyBinding.js similarity index 100% rename from site/node_modules/three/src/animation/PropertyBinding.js rename to site/game/node_modules/three/src/animation/PropertyBinding.js diff --git a/site/node_modules/three/src/animation/PropertyMixer.js b/site/game/node_modules/three/src/animation/PropertyMixer.js similarity index 100% rename from site/node_modules/three/src/animation/PropertyMixer.js rename to site/game/node_modules/three/src/animation/PropertyMixer.js diff --git a/site/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js diff --git a/site/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/ColorKeyframeTrack.js diff --git a/site/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/NumberKeyframeTrack.js diff --git a/site/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js diff --git a/site/node_modules/three/src/animation/tracks/StringKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/StringKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/StringKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/StringKeyframeTrack.js diff --git a/site/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js b/site/game/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js similarity index 100% rename from site/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js rename to site/game/node_modules/three/src/animation/tracks/VectorKeyframeTrack.js diff --git a/site/node_modules/three/src/audio/Audio.js b/site/game/node_modules/three/src/audio/Audio.js similarity index 100% rename from site/node_modules/three/src/audio/Audio.js rename to site/game/node_modules/three/src/audio/Audio.js diff --git a/site/node_modules/three/src/audio/AudioAnalyser.js b/site/game/node_modules/three/src/audio/AudioAnalyser.js similarity index 100% rename from site/node_modules/three/src/audio/AudioAnalyser.js rename to site/game/node_modules/three/src/audio/AudioAnalyser.js diff --git a/site/node_modules/three/src/audio/AudioContext.js b/site/game/node_modules/three/src/audio/AudioContext.js similarity index 100% rename from site/node_modules/three/src/audio/AudioContext.js rename to site/game/node_modules/three/src/audio/AudioContext.js diff --git a/site/node_modules/three/src/audio/AudioListener.js b/site/game/node_modules/three/src/audio/AudioListener.js similarity index 100% rename from site/node_modules/three/src/audio/AudioListener.js rename to site/game/node_modules/three/src/audio/AudioListener.js diff --git a/site/node_modules/three/src/audio/PositionalAudio.js b/site/game/node_modules/three/src/audio/PositionalAudio.js similarity index 100% rename from site/node_modules/three/src/audio/PositionalAudio.js rename to site/game/node_modules/three/src/audio/PositionalAudio.js diff --git a/site/node_modules/three/src/cameras/ArrayCamera.js b/site/game/node_modules/three/src/cameras/ArrayCamera.js similarity index 100% rename from site/node_modules/three/src/cameras/ArrayCamera.js rename to site/game/node_modules/three/src/cameras/ArrayCamera.js diff --git a/site/node_modules/three/src/cameras/Camera.js b/site/game/node_modules/three/src/cameras/Camera.js similarity index 100% rename from site/node_modules/three/src/cameras/Camera.js rename to site/game/node_modules/three/src/cameras/Camera.js diff --git a/site/node_modules/three/src/cameras/CubeCamera.js b/site/game/node_modules/three/src/cameras/CubeCamera.js similarity index 100% rename from site/node_modules/three/src/cameras/CubeCamera.js rename to site/game/node_modules/three/src/cameras/CubeCamera.js diff --git a/site/node_modules/three/src/cameras/OrthographicCamera.js b/site/game/node_modules/three/src/cameras/OrthographicCamera.js similarity index 100% rename from site/node_modules/three/src/cameras/OrthographicCamera.js rename to site/game/node_modules/three/src/cameras/OrthographicCamera.js diff --git a/site/node_modules/three/src/cameras/PerspectiveCamera.js b/site/game/node_modules/three/src/cameras/PerspectiveCamera.js similarity index 100% rename from site/node_modules/three/src/cameras/PerspectiveCamera.js rename to site/game/node_modules/three/src/cameras/PerspectiveCamera.js diff --git a/site/node_modules/three/src/cameras/StereoCamera.js b/site/game/node_modules/three/src/cameras/StereoCamera.js similarity index 100% rename from site/node_modules/three/src/cameras/StereoCamera.js rename to site/game/node_modules/three/src/cameras/StereoCamera.js diff --git a/site/node_modules/three/src/constants.js b/site/game/node_modules/three/src/constants.js similarity index 100% rename from site/node_modules/three/src/constants.js rename to site/game/node_modules/three/src/constants.js diff --git a/site/node_modules/three/src/core/BufferAttribute.js b/site/game/node_modules/three/src/core/BufferAttribute.js similarity index 100% rename from site/node_modules/three/src/core/BufferAttribute.js rename to site/game/node_modules/three/src/core/BufferAttribute.js diff --git a/site/node_modules/three/src/core/BufferGeometry.js b/site/game/node_modules/three/src/core/BufferGeometry.js similarity index 100% rename from site/node_modules/three/src/core/BufferGeometry.js rename to site/game/node_modules/three/src/core/BufferGeometry.js diff --git a/site/node_modules/three/src/core/Clock.js b/site/game/node_modules/three/src/core/Clock.js similarity index 100% rename from site/node_modules/three/src/core/Clock.js rename to site/game/node_modules/three/src/core/Clock.js diff --git a/site/node_modules/three/src/core/EventDispatcher.js b/site/game/node_modules/three/src/core/EventDispatcher.js similarity index 100% rename from site/node_modules/three/src/core/EventDispatcher.js rename to site/game/node_modules/three/src/core/EventDispatcher.js diff --git a/site/node_modules/three/src/core/GLBufferAttribute.js b/site/game/node_modules/three/src/core/GLBufferAttribute.js similarity index 100% rename from site/node_modules/three/src/core/GLBufferAttribute.js rename to site/game/node_modules/three/src/core/GLBufferAttribute.js diff --git a/site/node_modules/three/src/core/InstancedBufferAttribute.js b/site/game/node_modules/three/src/core/InstancedBufferAttribute.js similarity index 100% rename from site/node_modules/three/src/core/InstancedBufferAttribute.js rename to site/game/node_modules/three/src/core/InstancedBufferAttribute.js diff --git a/site/node_modules/three/src/core/InstancedBufferGeometry.js b/site/game/node_modules/three/src/core/InstancedBufferGeometry.js similarity index 100% rename from site/node_modules/three/src/core/InstancedBufferGeometry.js rename to site/game/node_modules/three/src/core/InstancedBufferGeometry.js diff --git a/site/node_modules/three/src/core/InstancedInterleavedBuffer.js b/site/game/node_modules/three/src/core/InstancedInterleavedBuffer.js similarity index 100% rename from site/node_modules/three/src/core/InstancedInterleavedBuffer.js rename to site/game/node_modules/three/src/core/InstancedInterleavedBuffer.js diff --git a/site/node_modules/three/src/core/InterleavedBuffer.js b/site/game/node_modules/three/src/core/InterleavedBuffer.js similarity index 100% rename from site/node_modules/three/src/core/InterleavedBuffer.js rename to site/game/node_modules/three/src/core/InterleavedBuffer.js diff --git a/site/node_modules/three/src/core/InterleavedBufferAttribute.js b/site/game/node_modules/three/src/core/InterleavedBufferAttribute.js similarity index 100% rename from site/node_modules/three/src/core/InterleavedBufferAttribute.js rename to site/game/node_modules/three/src/core/InterleavedBufferAttribute.js diff --git a/site/node_modules/three/src/core/Layers.js b/site/game/node_modules/three/src/core/Layers.js similarity index 100% rename from site/node_modules/three/src/core/Layers.js rename to site/game/node_modules/three/src/core/Layers.js diff --git a/site/node_modules/three/src/core/Object3D.js b/site/game/node_modules/three/src/core/Object3D.js similarity index 100% rename from site/node_modules/three/src/core/Object3D.js rename to site/game/node_modules/three/src/core/Object3D.js diff --git a/site/node_modules/three/src/core/Raycaster.js b/site/game/node_modules/three/src/core/Raycaster.js similarity index 100% rename from site/node_modules/three/src/core/Raycaster.js rename to site/game/node_modules/three/src/core/Raycaster.js diff --git a/site/node_modules/three/src/core/RenderTarget.js b/site/game/node_modules/three/src/core/RenderTarget.js similarity index 100% rename from site/node_modules/three/src/core/RenderTarget.js rename to site/game/node_modules/three/src/core/RenderTarget.js diff --git a/site/node_modules/three/src/core/Uniform.js b/site/game/node_modules/three/src/core/Uniform.js similarity index 100% rename from site/node_modules/three/src/core/Uniform.js rename to site/game/node_modules/three/src/core/Uniform.js diff --git a/site/node_modules/three/src/core/UniformsGroup.js b/site/game/node_modules/three/src/core/UniformsGroup.js similarity index 100% rename from site/node_modules/three/src/core/UniformsGroup.js rename to site/game/node_modules/three/src/core/UniformsGroup.js diff --git a/site/node_modules/three/src/extras/DataUtils.js b/site/game/node_modules/three/src/extras/DataUtils.js similarity index 100% rename from site/node_modules/three/src/extras/DataUtils.js rename to site/game/node_modules/three/src/extras/DataUtils.js diff --git a/site/node_modules/three/src/extras/Earcut.js b/site/game/node_modules/three/src/extras/Earcut.js similarity index 100% rename from site/node_modules/three/src/extras/Earcut.js rename to site/game/node_modules/three/src/extras/Earcut.js diff --git a/site/node_modules/three/src/extras/ImageUtils.js b/site/game/node_modules/three/src/extras/ImageUtils.js similarity index 100% rename from site/node_modules/three/src/extras/ImageUtils.js rename to site/game/node_modules/three/src/extras/ImageUtils.js diff --git a/site/node_modules/three/src/extras/PMREMGenerator.js b/site/game/node_modules/three/src/extras/PMREMGenerator.js similarity index 100% rename from site/node_modules/three/src/extras/PMREMGenerator.js rename to site/game/node_modules/three/src/extras/PMREMGenerator.js diff --git a/site/node_modules/three/src/extras/ShapeUtils.js b/site/game/node_modules/three/src/extras/ShapeUtils.js similarity index 100% rename from site/node_modules/three/src/extras/ShapeUtils.js rename to site/game/node_modules/three/src/extras/ShapeUtils.js diff --git a/site/node_modules/three/src/extras/TextureUtils.js b/site/game/node_modules/three/src/extras/TextureUtils.js similarity index 100% rename from site/node_modules/three/src/extras/TextureUtils.js rename to site/game/node_modules/three/src/extras/TextureUtils.js diff --git a/site/node_modules/three/src/extras/core/Curve.js b/site/game/node_modules/three/src/extras/core/Curve.js similarity index 100% rename from site/node_modules/three/src/extras/core/Curve.js rename to site/game/node_modules/three/src/extras/core/Curve.js diff --git a/site/node_modules/three/src/extras/core/CurvePath.js b/site/game/node_modules/three/src/extras/core/CurvePath.js similarity index 100% rename from site/node_modules/three/src/extras/core/CurvePath.js rename to site/game/node_modules/three/src/extras/core/CurvePath.js diff --git a/site/node_modules/three/src/extras/core/Interpolations.js b/site/game/node_modules/three/src/extras/core/Interpolations.js similarity index 100% rename from site/node_modules/three/src/extras/core/Interpolations.js rename to site/game/node_modules/three/src/extras/core/Interpolations.js diff --git a/site/node_modules/three/src/extras/core/Path.js b/site/game/node_modules/three/src/extras/core/Path.js similarity index 100% rename from site/node_modules/three/src/extras/core/Path.js rename to site/game/node_modules/three/src/extras/core/Path.js diff --git a/site/node_modules/three/src/extras/core/Shape.js b/site/game/node_modules/three/src/extras/core/Shape.js similarity index 100% rename from site/node_modules/three/src/extras/core/Shape.js rename to site/game/node_modules/three/src/extras/core/Shape.js diff --git a/site/node_modules/three/src/extras/core/ShapePath.js b/site/game/node_modules/three/src/extras/core/ShapePath.js similarity index 100% rename from site/node_modules/three/src/extras/core/ShapePath.js rename to site/game/node_modules/three/src/extras/core/ShapePath.js diff --git a/site/node_modules/three/src/extras/curves/ArcCurve.js b/site/game/node_modules/three/src/extras/curves/ArcCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/ArcCurve.js rename to site/game/node_modules/three/src/extras/curves/ArcCurve.js diff --git a/site/node_modules/three/src/extras/curves/CatmullRomCurve3.js b/site/game/node_modules/three/src/extras/curves/CatmullRomCurve3.js similarity index 100% rename from site/node_modules/three/src/extras/curves/CatmullRomCurve3.js rename to site/game/node_modules/three/src/extras/curves/CatmullRomCurve3.js diff --git a/site/node_modules/three/src/extras/curves/CubicBezierCurve.js b/site/game/node_modules/three/src/extras/curves/CubicBezierCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/CubicBezierCurve.js rename to site/game/node_modules/three/src/extras/curves/CubicBezierCurve.js diff --git a/site/node_modules/three/src/extras/curves/CubicBezierCurve3.js b/site/game/node_modules/three/src/extras/curves/CubicBezierCurve3.js similarity index 100% rename from site/node_modules/three/src/extras/curves/CubicBezierCurve3.js rename to site/game/node_modules/three/src/extras/curves/CubicBezierCurve3.js diff --git a/site/node_modules/three/src/extras/curves/Curves.js b/site/game/node_modules/three/src/extras/curves/Curves.js similarity index 100% rename from site/node_modules/three/src/extras/curves/Curves.js rename to site/game/node_modules/three/src/extras/curves/Curves.js diff --git a/site/node_modules/three/src/extras/curves/EllipseCurve.js b/site/game/node_modules/three/src/extras/curves/EllipseCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/EllipseCurve.js rename to site/game/node_modules/three/src/extras/curves/EllipseCurve.js diff --git a/site/node_modules/three/src/extras/curves/LineCurve.js b/site/game/node_modules/three/src/extras/curves/LineCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/LineCurve.js rename to site/game/node_modules/three/src/extras/curves/LineCurve.js diff --git a/site/node_modules/three/src/extras/curves/LineCurve3.js b/site/game/node_modules/three/src/extras/curves/LineCurve3.js similarity index 100% rename from site/node_modules/three/src/extras/curves/LineCurve3.js rename to site/game/node_modules/three/src/extras/curves/LineCurve3.js diff --git a/site/node_modules/three/src/extras/curves/QuadraticBezierCurve.js b/site/game/node_modules/three/src/extras/curves/QuadraticBezierCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/QuadraticBezierCurve.js rename to site/game/node_modules/three/src/extras/curves/QuadraticBezierCurve.js diff --git a/site/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js b/site/game/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js similarity index 100% rename from site/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js rename to site/game/node_modules/three/src/extras/curves/QuadraticBezierCurve3.js diff --git a/site/node_modules/three/src/extras/curves/SplineCurve.js b/site/game/node_modules/three/src/extras/curves/SplineCurve.js similarity index 100% rename from site/node_modules/three/src/extras/curves/SplineCurve.js rename to site/game/node_modules/three/src/extras/curves/SplineCurve.js diff --git a/site/node_modules/three/src/geometries/BoxGeometry.js b/site/game/node_modules/three/src/geometries/BoxGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/BoxGeometry.js rename to site/game/node_modules/three/src/geometries/BoxGeometry.js diff --git a/site/node_modules/three/src/geometries/CapsuleGeometry.js b/site/game/node_modules/three/src/geometries/CapsuleGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/CapsuleGeometry.js rename to site/game/node_modules/three/src/geometries/CapsuleGeometry.js diff --git a/site/node_modules/three/src/geometries/CircleGeometry.js b/site/game/node_modules/three/src/geometries/CircleGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/CircleGeometry.js rename to site/game/node_modules/three/src/geometries/CircleGeometry.js diff --git a/site/node_modules/three/src/geometries/ConeGeometry.js b/site/game/node_modules/three/src/geometries/ConeGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/ConeGeometry.js rename to site/game/node_modules/three/src/geometries/ConeGeometry.js diff --git a/site/node_modules/three/src/geometries/CylinderGeometry.js b/site/game/node_modules/three/src/geometries/CylinderGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/CylinderGeometry.js rename to site/game/node_modules/three/src/geometries/CylinderGeometry.js diff --git a/site/node_modules/three/src/geometries/DodecahedronGeometry.js b/site/game/node_modules/three/src/geometries/DodecahedronGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/DodecahedronGeometry.js rename to site/game/node_modules/three/src/geometries/DodecahedronGeometry.js diff --git a/site/node_modules/three/src/geometries/EdgesGeometry.js b/site/game/node_modules/three/src/geometries/EdgesGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/EdgesGeometry.js rename to site/game/node_modules/three/src/geometries/EdgesGeometry.js diff --git a/site/node_modules/three/src/geometries/ExtrudeGeometry.js b/site/game/node_modules/three/src/geometries/ExtrudeGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/ExtrudeGeometry.js rename to site/game/node_modules/three/src/geometries/ExtrudeGeometry.js diff --git a/site/node_modules/three/src/geometries/Geometries.js b/site/game/node_modules/three/src/geometries/Geometries.js similarity index 100% rename from site/node_modules/three/src/geometries/Geometries.js rename to site/game/node_modules/three/src/geometries/Geometries.js diff --git a/site/node_modules/three/src/geometries/IcosahedronGeometry.js b/site/game/node_modules/three/src/geometries/IcosahedronGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/IcosahedronGeometry.js rename to site/game/node_modules/three/src/geometries/IcosahedronGeometry.js diff --git a/site/node_modules/three/src/geometries/LatheGeometry.js b/site/game/node_modules/three/src/geometries/LatheGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/LatheGeometry.js rename to site/game/node_modules/three/src/geometries/LatheGeometry.js diff --git a/site/node_modules/three/src/geometries/OctahedronGeometry.js b/site/game/node_modules/three/src/geometries/OctahedronGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/OctahedronGeometry.js rename to site/game/node_modules/three/src/geometries/OctahedronGeometry.js diff --git a/site/node_modules/three/src/geometries/PlaneGeometry.js b/site/game/node_modules/three/src/geometries/PlaneGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/PlaneGeometry.js rename to site/game/node_modules/three/src/geometries/PlaneGeometry.js diff --git a/site/node_modules/three/src/geometries/PolyhedronGeometry.js b/site/game/node_modules/three/src/geometries/PolyhedronGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/PolyhedronGeometry.js rename to site/game/node_modules/three/src/geometries/PolyhedronGeometry.js diff --git a/site/node_modules/three/src/geometries/RingGeometry.js b/site/game/node_modules/three/src/geometries/RingGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/RingGeometry.js rename to site/game/node_modules/three/src/geometries/RingGeometry.js diff --git a/site/node_modules/three/src/geometries/ShapeGeometry.js b/site/game/node_modules/three/src/geometries/ShapeGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/ShapeGeometry.js rename to site/game/node_modules/three/src/geometries/ShapeGeometry.js diff --git a/site/node_modules/three/src/geometries/SphereGeometry.js b/site/game/node_modules/three/src/geometries/SphereGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/SphereGeometry.js rename to site/game/node_modules/three/src/geometries/SphereGeometry.js diff --git a/site/node_modules/three/src/geometries/TetrahedronGeometry.js b/site/game/node_modules/three/src/geometries/TetrahedronGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/TetrahedronGeometry.js rename to site/game/node_modules/three/src/geometries/TetrahedronGeometry.js diff --git a/site/node_modules/three/src/geometries/TorusGeometry.js b/site/game/node_modules/three/src/geometries/TorusGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/TorusGeometry.js rename to site/game/node_modules/three/src/geometries/TorusGeometry.js diff --git a/site/node_modules/three/src/geometries/TorusKnotGeometry.js b/site/game/node_modules/three/src/geometries/TorusKnotGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/TorusKnotGeometry.js rename to site/game/node_modules/three/src/geometries/TorusKnotGeometry.js diff --git a/site/node_modules/three/src/geometries/TubeGeometry.js b/site/game/node_modules/three/src/geometries/TubeGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/TubeGeometry.js rename to site/game/node_modules/three/src/geometries/TubeGeometry.js diff --git a/site/node_modules/three/src/geometries/WireframeGeometry.js b/site/game/node_modules/three/src/geometries/WireframeGeometry.js similarity index 100% rename from site/node_modules/three/src/geometries/WireframeGeometry.js rename to site/game/node_modules/three/src/geometries/WireframeGeometry.js diff --git a/site/node_modules/three/src/helpers/ArrowHelper.js b/site/game/node_modules/three/src/helpers/ArrowHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/ArrowHelper.js rename to site/game/node_modules/three/src/helpers/ArrowHelper.js diff --git a/site/node_modules/three/src/helpers/AxesHelper.js b/site/game/node_modules/three/src/helpers/AxesHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/AxesHelper.js rename to site/game/node_modules/three/src/helpers/AxesHelper.js diff --git a/site/node_modules/three/src/helpers/Box3Helper.js b/site/game/node_modules/three/src/helpers/Box3Helper.js similarity index 100% rename from site/node_modules/three/src/helpers/Box3Helper.js rename to site/game/node_modules/three/src/helpers/Box3Helper.js diff --git a/site/node_modules/three/src/helpers/BoxHelper.js b/site/game/node_modules/three/src/helpers/BoxHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/BoxHelper.js rename to site/game/node_modules/three/src/helpers/BoxHelper.js diff --git a/site/node_modules/three/src/helpers/CameraHelper.js b/site/game/node_modules/three/src/helpers/CameraHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/CameraHelper.js rename to site/game/node_modules/three/src/helpers/CameraHelper.js diff --git a/site/node_modules/three/src/helpers/DirectionalLightHelper.js b/site/game/node_modules/three/src/helpers/DirectionalLightHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/DirectionalLightHelper.js rename to site/game/node_modules/three/src/helpers/DirectionalLightHelper.js diff --git a/site/node_modules/three/src/helpers/GridHelper.js b/site/game/node_modules/three/src/helpers/GridHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/GridHelper.js rename to site/game/node_modules/three/src/helpers/GridHelper.js diff --git a/site/node_modules/three/src/helpers/HemisphereLightHelper.js b/site/game/node_modules/three/src/helpers/HemisphereLightHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/HemisphereLightHelper.js rename to site/game/node_modules/three/src/helpers/HemisphereLightHelper.js diff --git a/site/node_modules/three/src/helpers/PlaneHelper.js b/site/game/node_modules/three/src/helpers/PlaneHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/PlaneHelper.js rename to site/game/node_modules/three/src/helpers/PlaneHelper.js diff --git a/site/node_modules/three/src/helpers/PointLightHelper.js b/site/game/node_modules/three/src/helpers/PointLightHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/PointLightHelper.js rename to site/game/node_modules/three/src/helpers/PointLightHelper.js diff --git a/site/node_modules/three/src/helpers/PolarGridHelper.js b/site/game/node_modules/three/src/helpers/PolarGridHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/PolarGridHelper.js rename to site/game/node_modules/three/src/helpers/PolarGridHelper.js diff --git a/site/node_modules/three/src/helpers/SkeletonHelper.js b/site/game/node_modules/three/src/helpers/SkeletonHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/SkeletonHelper.js rename to site/game/node_modules/three/src/helpers/SkeletonHelper.js diff --git a/site/node_modules/three/src/helpers/SpotLightHelper.js b/site/game/node_modules/three/src/helpers/SpotLightHelper.js similarity index 100% rename from site/node_modules/three/src/helpers/SpotLightHelper.js rename to site/game/node_modules/three/src/helpers/SpotLightHelper.js diff --git a/site/node_modules/three/src/lights/AmbientLight.js b/site/game/node_modules/three/src/lights/AmbientLight.js similarity index 100% rename from site/node_modules/three/src/lights/AmbientLight.js rename to site/game/node_modules/three/src/lights/AmbientLight.js diff --git a/site/node_modules/three/src/lights/DirectionalLight.js b/site/game/node_modules/three/src/lights/DirectionalLight.js similarity index 100% rename from site/node_modules/three/src/lights/DirectionalLight.js rename to site/game/node_modules/three/src/lights/DirectionalLight.js diff --git a/site/node_modules/three/src/lights/DirectionalLightShadow.js b/site/game/node_modules/three/src/lights/DirectionalLightShadow.js similarity index 100% rename from site/node_modules/three/src/lights/DirectionalLightShadow.js rename to site/game/node_modules/three/src/lights/DirectionalLightShadow.js diff --git a/site/node_modules/three/src/lights/HemisphereLight.js b/site/game/node_modules/three/src/lights/HemisphereLight.js similarity index 100% rename from site/node_modules/three/src/lights/HemisphereLight.js rename to site/game/node_modules/three/src/lights/HemisphereLight.js diff --git a/site/node_modules/three/src/lights/Light.js b/site/game/node_modules/three/src/lights/Light.js similarity index 100% rename from site/node_modules/three/src/lights/Light.js rename to site/game/node_modules/three/src/lights/Light.js diff --git a/site/node_modules/three/src/lights/LightProbe.js b/site/game/node_modules/three/src/lights/LightProbe.js similarity index 100% rename from site/node_modules/three/src/lights/LightProbe.js rename to site/game/node_modules/three/src/lights/LightProbe.js diff --git a/site/node_modules/three/src/lights/LightShadow.js b/site/game/node_modules/three/src/lights/LightShadow.js similarity index 100% rename from site/node_modules/three/src/lights/LightShadow.js rename to site/game/node_modules/three/src/lights/LightShadow.js diff --git a/site/node_modules/three/src/lights/PointLight.js b/site/game/node_modules/three/src/lights/PointLight.js similarity index 100% rename from site/node_modules/three/src/lights/PointLight.js rename to site/game/node_modules/three/src/lights/PointLight.js diff --git a/site/node_modules/three/src/lights/PointLightShadow.js b/site/game/node_modules/three/src/lights/PointLightShadow.js similarity index 100% rename from site/node_modules/three/src/lights/PointLightShadow.js rename to site/game/node_modules/three/src/lights/PointLightShadow.js diff --git a/site/node_modules/three/src/lights/RectAreaLight.js b/site/game/node_modules/three/src/lights/RectAreaLight.js similarity index 100% rename from site/node_modules/three/src/lights/RectAreaLight.js rename to site/game/node_modules/three/src/lights/RectAreaLight.js diff --git a/site/node_modules/three/src/lights/SpotLight.js b/site/game/node_modules/three/src/lights/SpotLight.js similarity index 100% rename from site/node_modules/three/src/lights/SpotLight.js rename to site/game/node_modules/three/src/lights/SpotLight.js diff --git a/site/node_modules/three/src/lights/SpotLightShadow.js b/site/game/node_modules/three/src/lights/SpotLightShadow.js similarity index 100% rename from site/node_modules/three/src/lights/SpotLightShadow.js rename to site/game/node_modules/three/src/lights/SpotLightShadow.js diff --git a/site/node_modules/three/src/lights/webgpu/IESSpotLight.js b/site/game/node_modules/three/src/lights/webgpu/IESSpotLight.js similarity index 100% rename from site/node_modules/three/src/lights/webgpu/IESSpotLight.js rename to site/game/node_modules/three/src/lights/webgpu/IESSpotLight.js diff --git a/site/node_modules/three/src/loaders/AnimationLoader.js b/site/game/node_modules/three/src/loaders/AnimationLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/AnimationLoader.js rename to site/game/node_modules/three/src/loaders/AnimationLoader.js diff --git a/site/node_modules/three/src/loaders/AudioLoader.js b/site/game/node_modules/three/src/loaders/AudioLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/AudioLoader.js rename to site/game/node_modules/three/src/loaders/AudioLoader.js diff --git a/site/node_modules/three/src/loaders/BufferGeometryLoader.js b/site/game/node_modules/three/src/loaders/BufferGeometryLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/BufferGeometryLoader.js rename to site/game/node_modules/three/src/loaders/BufferGeometryLoader.js diff --git a/site/node_modules/three/src/loaders/Cache.js b/site/game/node_modules/three/src/loaders/Cache.js similarity index 100% rename from site/node_modules/three/src/loaders/Cache.js rename to site/game/node_modules/three/src/loaders/Cache.js diff --git a/site/node_modules/three/src/loaders/CompressedTextureLoader.js b/site/game/node_modules/three/src/loaders/CompressedTextureLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/CompressedTextureLoader.js rename to site/game/node_modules/three/src/loaders/CompressedTextureLoader.js diff --git a/site/node_modules/three/src/loaders/CubeTextureLoader.js b/site/game/node_modules/three/src/loaders/CubeTextureLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/CubeTextureLoader.js rename to site/game/node_modules/three/src/loaders/CubeTextureLoader.js diff --git a/site/node_modules/three/src/loaders/DataTextureLoader.js b/site/game/node_modules/three/src/loaders/DataTextureLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/DataTextureLoader.js rename to site/game/node_modules/three/src/loaders/DataTextureLoader.js diff --git a/site/node_modules/three/src/loaders/FileLoader.js b/site/game/node_modules/three/src/loaders/FileLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/FileLoader.js rename to site/game/node_modules/three/src/loaders/FileLoader.js diff --git a/site/node_modules/three/src/loaders/ImageBitmapLoader.js b/site/game/node_modules/three/src/loaders/ImageBitmapLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/ImageBitmapLoader.js rename to site/game/node_modules/three/src/loaders/ImageBitmapLoader.js diff --git a/site/node_modules/three/src/loaders/ImageLoader.js b/site/game/node_modules/three/src/loaders/ImageLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/ImageLoader.js rename to site/game/node_modules/three/src/loaders/ImageLoader.js diff --git a/site/node_modules/three/src/loaders/Loader.js b/site/game/node_modules/three/src/loaders/Loader.js similarity index 100% rename from site/node_modules/three/src/loaders/Loader.js rename to site/game/node_modules/three/src/loaders/Loader.js diff --git a/site/node_modules/three/src/loaders/LoaderUtils.js b/site/game/node_modules/three/src/loaders/LoaderUtils.js similarity index 100% rename from site/node_modules/three/src/loaders/LoaderUtils.js rename to site/game/node_modules/three/src/loaders/LoaderUtils.js diff --git a/site/node_modules/three/src/loaders/LoadingManager.js b/site/game/node_modules/three/src/loaders/LoadingManager.js similarity index 100% rename from site/node_modules/three/src/loaders/LoadingManager.js rename to site/game/node_modules/three/src/loaders/LoadingManager.js diff --git a/site/node_modules/three/src/loaders/MaterialLoader.js b/site/game/node_modules/three/src/loaders/MaterialLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/MaterialLoader.js rename to site/game/node_modules/three/src/loaders/MaterialLoader.js diff --git a/site/node_modules/three/src/loaders/ObjectLoader.js b/site/game/node_modules/three/src/loaders/ObjectLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/ObjectLoader.js rename to site/game/node_modules/three/src/loaders/ObjectLoader.js diff --git a/site/node_modules/three/src/loaders/TextureLoader.js b/site/game/node_modules/three/src/loaders/TextureLoader.js similarity index 100% rename from site/node_modules/three/src/loaders/TextureLoader.js rename to site/game/node_modules/three/src/loaders/TextureLoader.js diff --git a/site/node_modules/three/src/materials/LineBasicMaterial.js b/site/game/node_modules/three/src/materials/LineBasicMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/LineBasicMaterial.js rename to site/game/node_modules/three/src/materials/LineBasicMaterial.js diff --git a/site/node_modules/three/src/materials/LineDashedMaterial.js b/site/game/node_modules/three/src/materials/LineDashedMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/LineDashedMaterial.js rename to site/game/node_modules/three/src/materials/LineDashedMaterial.js diff --git a/site/node_modules/three/src/materials/Material.js b/site/game/node_modules/three/src/materials/Material.js similarity index 100% rename from site/node_modules/three/src/materials/Material.js rename to site/game/node_modules/three/src/materials/Material.js diff --git a/site/node_modules/three/src/materials/Materials.js b/site/game/node_modules/three/src/materials/Materials.js similarity index 100% rename from site/node_modules/three/src/materials/Materials.js rename to site/game/node_modules/three/src/materials/Materials.js diff --git a/site/node_modules/three/src/materials/MeshBasicMaterial.js b/site/game/node_modules/three/src/materials/MeshBasicMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshBasicMaterial.js rename to site/game/node_modules/three/src/materials/MeshBasicMaterial.js diff --git a/site/node_modules/three/src/materials/MeshDepthMaterial.js b/site/game/node_modules/three/src/materials/MeshDepthMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshDepthMaterial.js rename to site/game/node_modules/three/src/materials/MeshDepthMaterial.js diff --git a/site/node_modules/three/src/materials/MeshDistanceMaterial.js b/site/game/node_modules/three/src/materials/MeshDistanceMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshDistanceMaterial.js rename to site/game/node_modules/three/src/materials/MeshDistanceMaterial.js diff --git a/site/node_modules/three/src/materials/MeshLambertMaterial.js b/site/game/node_modules/three/src/materials/MeshLambertMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshLambertMaterial.js rename to site/game/node_modules/three/src/materials/MeshLambertMaterial.js diff --git a/site/node_modules/three/src/materials/MeshMatcapMaterial.js b/site/game/node_modules/three/src/materials/MeshMatcapMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshMatcapMaterial.js rename to site/game/node_modules/three/src/materials/MeshMatcapMaterial.js diff --git a/site/node_modules/three/src/materials/MeshNormalMaterial.js b/site/game/node_modules/three/src/materials/MeshNormalMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshNormalMaterial.js rename to site/game/node_modules/three/src/materials/MeshNormalMaterial.js diff --git a/site/node_modules/three/src/materials/MeshPhongMaterial.js b/site/game/node_modules/three/src/materials/MeshPhongMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshPhongMaterial.js rename to site/game/node_modules/three/src/materials/MeshPhongMaterial.js diff --git a/site/node_modules/three/src/materials/MeshPhysicalMaterial.js b/site/game/node_modules/three/src/materials/MeshPhysicalMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshPhysicalMaterial.js rename to site/game/node_modules/three/src/materials/MeshPhysicalMaterial.js diff --git a/site/node_modules/three/src/materials/MeshStandardMaterial.js b/site/game/node_modules/three/src/materials/MeshStandardMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshStandardMaterial.js rename to site/game/node_modules/three/src/materials/MeshStandardMaterial.js diff --git a/site/node_modules/three/src/materials/MeshToonMaterial.js b/site/game/node_modules/three/src/materials/MeshToonMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/MeshToonMaterial.js rename to site/game/node_modules/three/src/materials/MeshToonMaterial.js diff --git a/site/node_modules/three/src/materials/PointsMaterial.js b/site/game/node_modules/three/src/materials/PointsMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/PointsMaterial.js rename to site/game/node_modules/three/src/materials/PointsMaterial.js diff --git a/site/node_modules/three/src/materials/RawShaderMaterial.js b/site/game/node_modules/three/src/materials/RawShaderMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/RawShaderMaterial.js rename to site/game/node_modules/three/src/materials/RawShaderMaterial.js diff --git a/site/node_modules/three/src/materials/ShaderMaterial.js b/site/game/node_modules/three/src/materials/ShaderMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/ShaderMaterial.js rename to site/game/node_modules/three/src/materials/ShaderMaterial.js diff --git a/site/node_modules/three/src/materials/ShadowMaterial.js b/site/game/node_modules/three/src/materials/ShadowMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/ShadowMaterial.js rename to site/game/node_modules/three/src/materials/ShadowMaterial.js diff --git a/site/node_modules/three/src/materials/SpriteMaterial.js b/site/game/node_modules/three/src/materials/SpriteMaterial.js similarity index 100% rename from site/node_modules/three/src/materials/SpriteMaterial.js rename to site/game/node_modules/three/src/materials/SpriteMaterial.js diff --git a/site/node_modules/three/src/math/Box2.js b/site/game/node_modules/three/src/math/Box2.js similarity index 100% rename from site/node_modules/three/src/math/Box2.js rename to site/game/node_modules/three/src/math/Box2.js diff --git a/site/node_modules/three/src/math/Box3.js b/site/game/node_modules/three/src/math/Box3.js similarity index 100% rename from site/node_modules/three/src/math/Box3.js rename to site/game/node_modules/three/src/math/Box3.js diff --git a/site/node_modules/three/src/math/Color.js b/site/game/node_modules/three/src/math/Color.js similarity index 100% rename from site/node_modules/three/src/math/Color.js rename to site/game/node_modules/three/src/math/Color.js diff --git a/site/node_modules/three/src/math/ColorManagement.js b/site/game/node_modules/three/src/math/ColorManagement.js similarity index 100% rename from site/node_modules/three/src/math/ColorManagement.js rename to site/game/node_modules/three/src/math/ColorManagement.js diff --git a/site/node_modules/three/src/math/Cylindrical.js b/site/game/node_modules/three/src/math/Cylindrical.js similarity index 100% rename from site/node_modules/three/src/math/Cylindrical.js rename to site/game/node_modules/three/src/math/Cylindrical.js diff --git a/site/node_modules/three/src/math/Euler.js b/site/game/node_modules/three/src/math/Euler.js similarity index 100% rename from site/node_modules/three/src/math/Euler.js rename to site/game/node_modules/three/src/math/Euler.js diff --git a/site/node_modules/three/src/math/Frustum.js b/site/game/node_modules/three/src/math/Frustum.js similarity index 100% rename from site/node_modules/three/src/math/Frustum.js rename to site/game/node_modules/three/src/math/Frustum.js diff --git a/site/node_modules/three/src/math/Interpolant.js b/site/game/node_modules/three/src/math/Interpolant.js similarity index 100% rename from site/node_modules/three/src/math/Interpolant.js rename to site/game/node_modules/three/src/math/Interpolant.js diff --git a/site/node_modules/three/src/math/Line3.js b/site/game/node_modules/three/src/math/Line3.js similarity index 100% rename from site/node_modules/three/src/math/Line3.js rename to site/game/node_modules/three/src/math/Line3.js diff --git a/site/node_modules/three/src/math/MathUtils.js b/site/game/node_modules/three/src/math/MathUtils.js similarity index 100% rename from site/node_modules/three/src/math/MathUtils.js rename to site/game/node_modules/three/src/math/MathUtils.js diff --git a/site/node_modules/three/src/math/Matrix2.js b/site/game/node_modules/three/src/math/Matrix2.js similarity index 100% rename from site/node_modules/three/src/math/Matrix2.js rename to site/game/node_modules/three/src/math/Matrix2.js diff --git a/site/node_modules/three/src/math/Matrix3.js b/site/game/node_modules/three/src/math/Matrix3.js similarity index 100% rename from site/node_modules/three/src/math/Matrix3.js rename to site/game/node_modules/three/src/math/Matrix3.js diff --git a/site/node_modules/three/src/math/Matrix4.js b/site/game/node_modules/three/src/math/Matrix4.js similarity index 100% rename from site/node_modules/three/src/math/Matrix4.js rename to site/game/node_modules/three/src/math/Matrix4.js diff --git a/site/node_modules/three/src/math/Plane.js b/site/game/node_modules/three/src/math/Plane.js similarity index 100% rename from site/node_modules/three/src/math/Plane.js rename to site/game/node_modules/three/src/math/Plane.js diff --git a/site/node_modules/three/src/math/Quaternion.js b/site/game/node_modules/three/src/math/Quaternion.js similarity index 100% rename from site/node_modules/three/src/math/Quaternion.js rename to site/game/node_modules/three/src/math/Quaternion.js diff --git a/site/node_modules/three/src/math/Ray.js b/site/game/node_modules/three/src/math/Ray.js similarity index 100% rename from site/node_modules/three/src/math/Ray.js rename to site/game/node_modules/three/src/math/Ray.js diff --git a/site/node_modules/three/src/math/Sphere.js b/site/game/node_modules/three/src/math/Sphere.js similarity index 100% rename from site/node_modules/three/src/math/Sphere.js rename to site/game/node_modules/three/src/math/Sphere.js diff --git a/site/node_modules/three/src/math/Spherical.js b/site/game/node_modules/three/src/math/Spherical.js similarity index 100% rename from site/node_modules/three/src/math/Spherical.js rename to site/game/node_modules/three/src/math/Spherical.js diff --git a/site/node_modules/three/src/math/SphericalHarmonics3.js b/site/game/node_modules/three/src/math/SphericalHarmonics3.js similarity index 100% rename from site/node_modules/three/src/math/SphericalHarmonics3.js rename to site/game/node_modules/three/src/math/SphericalHarmonics3.js diff --git a/site/node_modules/three/src/math/Triangle.js b/site/game/node_modules/three/src/math/Triangle.js similarity index 100% rename from site/node_modules/three/src/math/Triangle.js rename to site/game/node_modules/three/src/math/Triangle.js diff --git a/site/node_modules/three/src/math/Vector2.js b/site/game/node_modules/three/src/math/Vector2.js similarity index 100% rename from site/node_modules/three/src/math/Vector2.js rename to site/game/node_modules/three/src/math/Vector2.js diff --git a/site/node_modules/three/src/math/Vector3.js b/site/game/node_modules/three/src/math/Vector3.js similarity index 100% rename from site/node_modules/three/src/math/Vector3.js rename to site/game/node_modules/three/src/math/Vector3.js diff --git a/site/node_modules/three/src/math/Vector4.js b/site/game/node_modules/three/src/math/Vector4.js similarity index 100% rename from site/node_modules/three/src/math/Vector4.js rename to site/game/node_modules/three/src/math/Vector4.js diff --git a/site/node_modules/three/src/math/interpolants/CubicInterpolant.js b/site/game/node_modules/three/src/math/interpolants/CubicInterpolant.js similarity index 100% rename from site/node_modules/three/src/math/interpolants/CubicInterpolant.js rename to site/game/node_modules/three/src/math/interpolants/CubicInterpolant.js diff --git a/site/node_modules/three/src/math/interpolants/DiscreteInterpolant.js b/site/game/node_modules/three/src/math/interpolants/DiscreteInterpolant.js similarity index 100% rename from site/node_modules/three/src/math/interpolants/DiscreteInterpolant.js rename to site/game/node_modules/three/src/math/interpolants/DiscreteInterpolant.js diff --git a/site/node_modules/three/src/math/interpolants/LinearInterpolant.js b/site/game/node_modules/three/src/math/interpolants/LinearInterpolant.js similarity index 100% rename from site/node_modules/three/src/math/interpolants/LinearInterpolant.js rename to site/game/node_modules/three/src/math/interpolants/LinearInterpolant.js diff --git a/site/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js b/site/game/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js similarity index 100% rename from site/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js rename to site/game/node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js diff --git a/site/node_modules/three/src/nodes/Nodes.js b/site/game/node_modules/three/src/nodes/Nodes.js similarity index 100% rename from site/node_modules/three/src/nodes/Nodes.js rename to site/game/node_modules/three/src/nodes/Nodes.js diff --git a/site/node_modules/three/src/nodes/accessors/AccessorsUtils.js b/site/game/node_modules/three/src/nodes/accessors/AccessorsUtils.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/AccessorsUtils.js rename to site/game/node_modules/three/src/nodes/accessors/AccessorsUtils.js diff --git a/site/node_modules/three/src/nodes/accessors/BatchNode.js b/site/game/node_modules/three/src/nodes/accessors/BatchNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/BatchNode.js rename to site/game/node_modules/three/src/nodes/accessors/BatchNode.js diff --git a/site/node_modules/three/src/nodes/accessors/BitangentNode.js b/site/game/node_modules/three/src/nodes/accessors/BitangentNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/BitangentNode.js rename to site/game/node_modules/three/src/nodes/accessors/BitangentNode.js diff --git a/site/node_modules/three/src/nodes/accessors/BufferAttributeNode.js b/site/game/node_modules/three/src/nodes/accessors/BufferAttributeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/BufferAttributeNode.js rename to site/game/node_modules/three/src/nodes/accessors/BufferAttributeNode.js diff --git a/site/node_modules/three/src/nodes/accessors/BufferNode.js b/site/game/node_modules/three/src/nodes/accessors/BufferNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/BufferNode.js rename to site/game/node_modules/three/src/nodes/accessors/BufferNode.js diff --git a/site/node_modules/three/src/nodes/accessors/CameraNode.js b/site/game/node_modules/three/src/nodes/accessors/CameraNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/CameraNode.js rename to site/game/node_modules/three/src/nodes/accessors/CameraNode.js diff --git a/site/node_modules/three/src/nodes/accessors/ClippingNode.js b/site/game/node_modules/three/src/nodes/accessors/ClippingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/ClippingNode.js rename to site/game/node_modules/three/src/nodes/accessors/ClippingNode.js diff --git a/site/node_modules/three/src/nodes/accessors/CubeTextureNode.js b/site/game/node_modules/three/src/nodes/accessors/CubeTextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/CubeTextureNode.js rename to site/game/node_modules/three/src/nodes/accessors/CubeTextureNode.js diff --git a/site/node_modules/three/src/nodes/accessors/InstanceNode.js b/site/game/node_modules/three/src/nodes/accessors/InstanceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/InstanceNode.js rename to site/game/node_modules/three/src/nodes/accessors/InstanceNode.js diff --git a/site/node_modules/three/src/nodes/accessors/InstancedPointsMaterialNode.js b/site/game/node_modules/three/src/nodes/accessors/InstancedPointsMaterialNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/InstancedPointsMaterialNode.js rename to site/game/node_modules/three/src/nodes/accessors/InstancedPointsMaterialNode.js diff --git a/site/node_modules/three/src/nodes/accessors/MaterialNode.js b/site/game/node_modules/three/src/nodes/accessors/MaterialNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/MaterialNode.js rename to site/game/node_modules/three/src/nodes/accessors/MaterialNode.js diff --git a/site/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js b/site/game/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js rename to site/game/node_modules/three/src/nodes/accessors/MaterialReferenceNode.js diff --git a/site/node_modules/three/src/nodes/accessors/ModelNode.js b/site/game/node_modules/three/src/nodes/accessors/ModelNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/ModelNode.js rename to site/game/node_modules/three/src/nodes/accessors/ModelNode.js diff --git a/site/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js b/site/game/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js rename to site/game/node_modules/three/src/nodes/accessors/ModelViewProjectionNode.js diff --git a/site/node_modules/three/src/nodes/accessors/MorphNode.js b/site/game/node_modules/three/src/nodes/accessors/MorphNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/MorphNode.js rename to site/game/node_modules/three/src/nodes/accessors/MorphNode.js diff --git a/site/node_modules/three/src/nodes/accessors/NormalNode.js b/site/game/node_modules/three/src/nodes/accessors/NormalNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/NormalNode.js rename to site/game/node_modules/three/src/nodes/accessors/NormalNode.js diff --git a/site/node_modules/three/src/nodes/accessors/Object3DNode.js b/site/game/node_modules/three/src/nodes/accessors/Object3DNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/Object3DNode.js rename to site/game/node_modules/three/src/nodes/accessors/Object3DNode.js diff --git a/site/node_modules/three/src/nodes/accessors/PointUVNode.js b/site/game/node_modules/three/src/nodes/accessors/PointUVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/PointUVNode.js rename to site/game/node_modules/three/src/nodes/accessors/PointUVNode.js diff --git a/site/node_modules/three/src/nodes/accessors/PositionNode.js b/site/game/node_modules/three/src/nodes/accessors/PositionNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/PositionNode.js rename to site/game/node_modules/three/src/nodes/accessors/PositionNode.js diff --git a/site/node_modules/three/src/nodes/accessors/ReferenceNode.js b/site/game/node_modules/three/src/nodes/accessors/ReferenceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/ReferenceNode.js rename to site/game/node_modules/three/src/nodes/accessors/ReferenceNode.js diff --git a/site/node_modules/three/src/nodes/accessors/ReflectVectorNode.js b/site/game/node_modules/three/src/nodes/accessors/ReflectVectorNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/ReflectVectorNode.js rename to site/game/node_modules/three/src/nodes/accessors/ReflectVectorNode.js diff --git a/site/node_modules/three/src/nodes/accessors/RendererReferenceNode.js b/site/game/node_modules/three/src/nodes/accessors/RendererReferenceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/RendererReferenceNode.js rename to site/game/node_modules/three/src/nodes/accessors/RendererReferenceNode.js diff --git a/site/node_modules/three/src/nodes/accessors/SceneNode.js b/site/game/node_modules/three/src/nodes/accessors/SceneNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/SceneNode.js rename to site/game/node_modules/three/src/nodes/accessors/SceneNode.js diff --git a/site/node_modules/three/src/nodes/accessors/SkinningNode.js b/site/game/node_modules/three/src/nodes/accessors/SkinningNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/SkinningNode.js rename to site/game/node_modules/three/src/nodes/accessors/SkinningNode.js diff --git a/site/node_modules/three/src/nodes/accessors/StorageBufferNode.js b/site/game/node_modules/three/src/nodes/accessors/StorageBufferNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/StorageBufferNode.js rename to site/game/node_modules/three/src/nodes/accessors/StorageBufferNode.js diff --git a/site/node_modules/three/src/nodes/accessors/StorageTextureNode.js b/site/game/node_modules/three/src/nodes/accessors/StorageTextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/StorageTextureNode.js rename to site/game/node_modules/three/src/nodes/accessors/StorageTextureNode.js diff --git a/site/node_modules/three/src/nodes/accessors/TangentNode.js b/site/game/node_modules/three/src/nodes/accessors/TangentNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/TangentNode.js rename to site/game/node_modules/three/src/nodes/accessors/TangentNode.js diff --git a/site/node_modules/three/src/nodes/accessors/Texture3DNode.js b/site/game/node_modules/three/src/nodes/accessors/Texture3DNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/Texture3DNode.js rename to site/game/node_modules/three/src/nodes/accessors/Texture3DNode.js diff --git a/site/node_modules/three/src/nodes/accessors/TextureBicubicNode.js b/site/game/node_modules/three/src/nodes/accessors/TextureBicubicNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/TextureBicubicNode.js rename to site/game/node_modules/three/src/nodes/accessors/TextureBicubicNode.js diff --git a/site/node_modules/three/src/nodes/accessors/TextureNode.js b/site/game/node_modules/three/src/nodes/accessors/TextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/TextureNode.js rename to site/game/node_modules/three/src/nodes/accessors/TextureNode.js diff --git a/site/node_modules/three/src/nodes/accessors/TextureSizeNode.js b/site/game/node_modules/three/src/nodes/accessors/TextureSizeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/TextureSizeNode.js rename to site/game/node_modules/three/src/nodes/accessors/TextureSizeNode.js diff --git a/site/node_modules/three/src/nodes/accessors/UVNode.js b/site/game/node_modules/three/src/nodes/accessors/UVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/UVNode.js rename to site/game/node_modules/three/src/nodes/accessors/UVNode.js diff --git a/site/node_modules/three/src/nodes/accessors/UniformsNode.js b/site/game/node_modules/three/src/nodes/accessors/UniformsNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/UniformsNode.js rename to site/game/node_modules/three/src/nodes/accessors/UniformsNode.js diff --git a/site/node_modules/three/src/nodes/accessors/UserDataNode.js b/site/game/node_modules/three/src/nodes/accessors/UserDataNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/UserDataNode.js rename to site/game/node_modules/three/src/nodes/accessors/UserDataNode.js diff --git a/site/node_modules/three/src/nodes/accessors/VertexColorNode.js b/site/game/node_modules/three/src/nodes/accessors/VertexColorNode.js similarity index 100% rename from site/node_modules/three/src/nodes/accessors/VertexColorNode.js rename to site/game/node_modules/three/src/nodes/accessors/VertexColorNode.js diff --git a/site/node_modules/three/src/nodes/code/CodeNode.js b/site/game/node_modules/three/src/nodes/code/CodeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/CodeNode.js rename to site/game/node_modules/three/src/nodes/code/CodeNode.js diff --git a/site/node_modules/three/src/nodes/code/ExpressionNode.js b/site/game/node_modules/three/src/nodes/code/ExpressionNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/ExpressionNode.js rename to site/game/node_modules/three/src/nodes/code/ExpressionNode.js diff --git a/site/node_modules/three/src/nodes/code/FunctionCallNode.js b/site/game/node_modules/three/src/nodes/code/FunctionCallNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/FunctionCallNode.js rename to site/game/node_modules/three/src/nodes/code/FunctionCallNode.js diff --git a/site/node_modules/three/src/nodes/code/FunctionNode.js b/site/game/node_modules/three/src/nodes/code/FunctionNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/FunctionNode.js rename to site/game/node_modules/three/src/nodes/code/FunctionNode.js diff --git a/site/node_modules/three/src/nodes/code/ScriptableNode.js b/site/game/node_modules/three/src/nodes/code/ScriptableNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/ScriptableNode.js rename to site/game/node_modules/three/src/nodes/code/ScriptableNode.js diff --git a/site/node_modules/three/src/nodes/code/ScriptableValueNode.js b/site/game/node_modules/three/src/nodes/code/ScriptableValueNode.js similarity index 100% rename from site/node_modules/three/src/nodes/code/ScriptableValueNode.js rename to site/game/node_modules/three/src/nodes/code/ScriptableValueNode.js diff --git a/site/node_modules/three/src/nodes/core/AssignNode.js b/site/game/node_modules/three/src/nodes/core/AssignNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/AssignNode.js rename to site/game/node_modules/three/src/nodes/core/AssignNode.js diff --git a/site/node_modules/three/src/nodes/core/AttributeNode.js b/site/game/node_modules/three/src/nodes/core/AttributeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/AttributeNode.js rename to site/game/node_modules/three/src/nodes/core/AttributeNode.js diff --git a/site/node_modules/three/src/nodes/core/BypassNode.js b/site/game/node_modules/three/src/nodes/core/BypassNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/BypassNode.js rename to site/game/node_modules/three/src/nodes/core/BypassNode.js diff --git a/site/node_modules/three/src/nodes/core/CacheNode.js b/site/game/node_modules/three/src/nodes/core/CacheNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/CacheNode.js rename to site/game/node_modules/three/src/nodes/core/CacheNode.js diff --git a/site/node_modules/three/src/nodes/core/ConstNode.js b/site/game/node_modules/three/src/nodes/core/ConstNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/ConstNode.js rename to site/game/node_modules/three/src/nodes/core/ConstNode.js diff --git a/site/node_modules/three/src/nodes/core/ContextNode.js b/site/game/node_modules/three/src/nodes/core/ContextNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/ContextNode.js rename to site/game/node_modules/three/src/nodes/core/ContextNode.js diff --git a/site/node_modules/three/src/nodes/core/IndexNode.js b/site/game/node_modules/three/src/nodes/core/IndexNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/IndexNode.js rename to site/game/node_modules/three/src/nodes/core/IndexNode.js diff --git a/site/node_modules/three/src/nodes/core/InputNode.js b/site/game/node_modules/three/src/nodes/core/InputNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/InputNode.js rename to site/game/node_modules/three/src/nodes/core/InputNode.js diff --git a/site/node_modules/three/src/nodes/core/LightingModel.js b/site/game/node_modules/three/src/nodes/core/LightingModel.js similarity index 100% rename from site/node_modules/three/src/nodes/core/LightingModel.js rename to site/game/node_modules/three/src/nodes/core/LightingModel.js diff --git a/site/node_modules/three/src/nodes/core/MRTNode.js b/site/game/node_modules/three/src/nodes/core/MRTNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/MRTNode.js rename to site/game/node_modules/three/src/nodes/core/MRTNode.js diff --git a/site/node_modules/three/src/nodes/core/Node.js b/site/game/node_modules/three/src/nodes/core/Node.js similarity index 100% rename from site/node_modules/three/src/nodes/core/Node.js rename to site/game/node_modules/three/src/nodes/core/Node.js diff --git a/site/node_modules/three/src/nodes/core/NodeAttribute.js b/site/game/node_modules/three/src/nodes/core/NodeAttribute.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeAttribute.js rename to site/game/node_modules/three/src/nodes/core/NodeAttribute.js diff --git a/site/node_modules/three/src/nodes/core/NodeBuilder.js b/site/game/node_modules/three/src/nodes/core/NodeBuilder.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeBuilder.js rename to site/game/node_modules/three/src/nodes/core/NodeBuilder.js diff --git a/site/node_modules/three/src/nodes/core/NodeCache.js b/site/game/node_modules/three/src/nodes/core/NodeCache.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeCache.js rename to site/game/node_modules/three/src/nodes/core/NodeCache.js diff --git a/site/node_modules/three/src/nodes/core/NodeCode.js b/site/game/node_modules/three/src/nodes/core/NodeCode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeCode.js rename to site/game/node_modules/three/src/nodes/core/NodeCode.js diff --git a/site/node_modules/three/src/nodes/core/NodeFrame.js b/site/game/node_modules/three/src/nodes/core/NodeFrame.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeFrame.js rename to site/game/node_modules/three/src/nodes/core/NodeFrame.js diff --git a/site/node_modules/three/src/nodes/core/NodeFunction.js b/site/game/node_modules/three/src/nodes/core/NodeFunction.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeFunction.js rename to site/game/node_modules/three/src/nodes/core/NodeFunction.js diff --git a/site/node_modules/three/src/nodes/core/NodeFunctionInput.js b/site/game/node_modules/three/src/nodes/core/NodeFunctionInput.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeFunctionInput.js rename to site/game/node_modules/three/src/nodes/core/NodeFunctionInput.js diff --git a/site/node_modules/three/src/nodes/core/NodeKeywords.js b/site/game/node_modules/three/src/nodes/core/NodeKeywords.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeKeywords.js rename to site/game/node_modules/three/src/nodes/core/NodeKeywords.js diff --git a/site/node_modules/three/src/nodes/core/NodeParser.js b/site/game/node_modules/three/src/nodes/core/NodeParser.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeParser.js rename to site/game/node_modules/three/src/nodes/core/NodeParser.js diff --git a/site/node_modules/three/src/nodes/core/NodeUniform.js b/site/game/node_modules/three/src/nodes/core/NodeUniform.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeUniform.js rename to site/game/node_modules/three/src/nodes/core/NodeUniform.js diff --git a/site/node_modules/three/src/nodes/core/NodeUtils.js b/site/game/node_modules/three/src/nodes/core/NodeUtils.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeUtils.js rename to site/game/node_modules/three/src/nodes/core/NodeUtils.js diff --git a/site/node_modules/three/src/nodes/core/NodeVar.js b/site/game/node_modules/three/src/nodes/core/NodeVar.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeVar.js rename to site/game/node_modules/three/src/nodes/core/NodeVar.js diff --git a/site/node_modules/three/src/nodes/core/NodeVarying.js b/site/game/node_modules/three/src/nodes/core/NodeVarying.js similarity index 100% rename from site/node_modules/three/src/nodes/core/NodeVarying.js rename to site/game/node_modules/three/src/nodes/core/NodeVarying.js diff --git a/site/node_modules/three/src/nodes/core/OutputStructNode.js b/site/game/node_modules/three/src/nodes/core/OutputStructNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/OutputStructNode.js rename to site/game/node_modules/three/src/nodes/core/OutputStructNode.js diff --git a/site/node_modules/three/src/nodes/core/ParameterNode.js b/site/game/node_modules/three/src/nodes/core/ParameterNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/ParameterNode.js rename to site/game/node_modules/three/src/nodes/core/ParameterNode.js diff --git a/site/node_modules/three/src/nodes/core/PropertyNode.js b/site/game/node_modules/three/src/nodes/core/PropertyNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/PropertyNode.js rename to site/game/node_modules/three/src/nodes/core/PropertyNode.js diff --git a/site/node_modules/three/src/nodes/core/StackNode.js b/site/game/node_modules/three/src/nodes/core/StackNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/StackNode.js rename to site/game/node_modules/three/src/nodes/core/StackNode.js diff --git a/site/node_modules/three/src/nodes/core/StructTypeNode.js b/site/game/node_modules/three/src/nodes/core/StructTypeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/StructTypeNode.js rename to site/game/node_modules/three/src/nodes/core/StructTypeNode.js diff --git a/site/node_modules/three/src/nodes/core/TempNode.js b/site/game/node_modules/three/src/nodes/core/TempNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/TempNode.js rename to site/game/node_modules/three/src/nodes/core/TempNode.js diff --git a/site/node_modules/three/src/nodes/core/UniformGroup.js b/site/game/node_modules/three/src/nodes/core/UniformGroup.js similarity index 100% rename from site/node_modules/three/src/nodes/core/UniformGroup.js rename to site/game/node_modules/three/src/nodes/core/UniformGroup.js diff --git a/site/node_modules/three/src/nodes/core/UniformGroupNode.js b/site/game/node_modules/three/src/nodes/core/UniformGroupNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/UniformGroupNode.js rename to site/game/node_modules/three/src/nodes/core/UniformGroupNode.js diff --git a/site/node_modules/three/src/nodes/core/UniformNode.js b/site/game/node_modules/three/src/nodes/core/UniformNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/UniformNode.js rename to site/game/node_modules/three/src/nodes/core/UniformNode.js diff --git a/site/node_modules/three/src/nodes/core/VarNode.js b/site/game/node_modules/three/src/nodes/core/VarNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/VarNode.js rename to site/game/node_modules/three/src/nodes/core/VarNode.js diff --git a/site/node_modules/three/src/nodes/core/VaryingNode.js b/site/game/node_modules/three/src/nodes/core/VaryingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/core/VaryingNode.js rename to site/game/node_modules/three/src/nodes/core/VaryingNode.js diff --git a/site/node_modules/three/src/nodes/core/constants.js b/site/game/node_modules/three/src/nodes/core/constants.js similarity index 100% rename from site/node_modules/three/src/nodes/core/constants.js rename to site/game/node_modules/three/src/nodes/core/constants.js diff --git a/site/node_modules/three/src/nodes/display/AfterImageNode.js b/site/game/node_modules/three/src/nodes/display/AfterImageNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/AfterImageNode.js rename to site/game/node_modules/three/src/nodes/display/AfterImageNode.js diff --git a/site/node_modules/three/src/nodes/display/AnamorphicNode.js b/site/game/node_modules/three/src/nodes/display/AnamorphicNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/AnamorphicNode.js rename to site/game/node_modules/three/src/nodes/display/AnamorphicNode.js diff --git a/site/node_modules/three/src/nodes/display/BlendModeNode.js b/site/game/node_modules/three/src/nodes/display/BlendModeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/BlendModeNode.js rename to site/game/node_modules/three/src/nodes/display/BlendModeNode.js diff --git a/site/node_modules/three/src/nodes/display/BloomNode.js b/site/game/node_modules/three/src/nodes/display/BloomNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/BloomNode.js rename to site/game/node_modules/three/src/nodes/display/BloomNode.js diff --git a/site/node_modules/three/src/nodes/display/BumpMapNode.js b/site/game/node_modules/three/src/nodes/display/BumpMapNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/BumpMapNode.js rename to site/game/node_modules/three/src/nodes/display/BumpMapNode.js diff --git a/site/node_modules/three/src/nodes/display/ColorAdjustmentNode.js b/site/game/node_modules/three/src/nodes/display/ColorAdjustmentNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ColorAdjustmentNode.js rename to site/game/node_modules/three/src/nodes/display/ColorAdjustmentNode.js diff --git a/site/node_modules/three/src/nodes/display/ColorSpaceNode.js b/site/game/node_modules/three/src/nodes/display/ColorSpaceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ColorSpaceNode.js rename to site/game/node_modules/three/src/nodes/display/ColorSpaceNode.js diff --git a/site/node_modules/three/src/nodes/display/DenoiseNode.js b/site/game/node_modules/three/src/nodes/display/DenoiseNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/DenoiseNode.js rename to site/game/node_modules/three/src/nodes/display/DenoiseNode.js diff --git a/site/node_modules/three/src/nodes/display/DepthOfFieldNode.js b/site/game/node_modules/three/src/nodes/display/DepthOfFieldNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/DepthOfFieldNode.js rename to site/game/node_modules/three/src/nodes/display/DepthOfFieldNode.js diff --git a/site/node_modules/three/src/nodes/display/DotScreenNode.js b/site/game/node_modules/three/src/nodes/display/DotScreenNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/DotScreenNode.js rename to site/game/node_modules/three/src/nodes/display/DotScreenNode.js diff --git a/site/node_modules/three/src/nodes/display/FXAANode.js b/site/game/node_modules/three/src/nodes/display/FXAANode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/FXAANode.js rename to site/game/node_modules/three/src/nodes/display/FXAANode.js diff --git a/site/node_modules/three/src/nodes/display/FilmNode.js b/site/game/node_modules/three/src/nodes/display/FilmNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/FilmNode.js rename to site/game/node_modules/three/src/nodes/display/FilmNode.js diff --git a/site/node_modules/three/src/nodes/display/FrontFacingNode.js b/site/game/node_modules/three/src/nodes/display/FrontFacingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/FrontFacingNode.js rename to site/game/node_modules/three/src/nodes/display/FrontFacingNode.js diff --git a/site/node_modules/three/src/nodes/display/GTAONode.js b/site/game/node_modules/three/src/nodes/display/GTAONode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/GTAONode.js rename to site/game/node_modules/three/src/nodes/display/GTAONode.js diff --git a/site/node_modules/three/src/nodes/display/GaussianBlurNode.js b/site/game/node_modules/three/src/nodes/display/GaussianBlurNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/GaussianBlurNode.js rename to site/game/node_modules/three/src/nodes/display/GaussianBlurNode.js diff --git a/site/node_modules/three/src/nodes/display/Lut3DNode.js b/site/game/node_modules/three/src/nodes/display/Lut3DNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/Lut3DNode.js rename to site/game/node_modules/three/src/nodes/display/Lut3DNode.js diff --git a/site/node_modules/three/src/nodes/display/NormalMapNode.js b/site/game/node_modules/three/src/nodes/display/NormalMapNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/NormalMapNode.js rename to site/game/node_modules/three/src/nodes/display/NormalMapNode.js diff --git a/site/node_modules/three/src/nodes/display/PassNode.js b/site/game/node_modules/three/src/nodes/display/PassNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/PassNode.js rename to site/game/node_modules/three/src/nodes/display/PassNode.js diff --git a/site/node_modules/three/src/nodes/display/PixelationPassNode.js b/site/game/node_modules/three/src/nodes/display/PixelationPassNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/PixelationPassNode.js rename to site/game/node_modules/three/src/nodes/display/PixelationPassNode.js diff --git a/site/node_modules/three/src/nodes/display/PosterizeNode.js b/site/game/node_modules/three/src/nodes/display/PosterizeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/PosterizeNode.js rename to site/game/node_modules/three/src/nodes/display/PosterizeNode.js diff --git a/site/node_modules/three/src/nodes/display/RGBShiftNode.js b/site/game/node_modules/three/src/nodes/display/RGBShiftNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/RGBShiftNode.js rename to site/game/node_modules/three/src/nodes/display/RGBShiftNode.js diff --git a/site/node_modules/three/src/nodes/display/RenderOutputNode.js b/site/game/node_modules/three/src/nodes/display/RenderOutputNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/RenderOutputNode.js rename to site/game/node_modules/three/src/nodes/display/RenderOutputNode.js diff --git a/site/node_modules/three/src/nodes/display/SobelOperatorNode.js b/site/game/node_modules/three/src/nodes/display/SobelOperatorNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/SobelOperatorNode.js rename to site/game/node_modules/three/src/nodes/display/SobelOperatorNode.js diff --git a/site/node_modules/three/src/nodes/display/ToneMappingNode.js b/site/game/node_modules/three/src/nodes/display/ToneMappingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ToneMappingNode.js rename to site/game/node_modules/three/src/nodes/display/ToneMappingNode.js diff --git a/site/node_modules/three/src/nodes/display/TransitionNode.js b/site/game/node_modules/three/src/nodes/display/TransitionNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/TransitionNode.js rename to site/game/node_modules/three/src/nodes/display/TransitionNode.js diff --git a/site/node_modules/three/src/nodes/display/ViewportDepthNode.js b/site/game/node_modules/three/src/nodes/display/ViewportDepthNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ViewportDepthNode.js rename to site/game/node_modules/three/src/nodes/display/ViewportDepthNode.js diff --git a/site/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js b/site/game/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js rename to site/game/node_modules/three/src/nodes/display/ViewportDepthTextureNode.js diff --git a/site/node_modules/three/src/nodes/display/ViewportNode.js b/site/game/node_modules/three/src/nodes/display/ViewportNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ViewportNode.js rename to site/game/node_modules/three/src/nodes/display/ViewportNode.js diff --git a/site/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js b/site/game/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js rename to site/game/node_modules/three/src/nodes/display/ViewportSharedTextureNode.js diff --git a/site/node_modules/three/src/nodes/display/ViewportTextureNode.js b/site/game/node_modules/three/src/nodes/display/ViewportTextureNode.js similarity index 100% rename from site/node_modules/three/src/nodes/display/ViewportTextureNode.js rename to site/game/node_modules/three/src/nodes/display/ViewportTextureNode.js diff --git a/site/node_modules/three/src/nodes/fog/FogExp2Node.js b/site/game/node_modules/three/src/nodes/fog/FogExp2Node.js similarity index 100% rename from site/node_modules/three/src/nodes/fog/FogExp2Node.js rename to site/game/node_modules/three/src/nodes/fog/FogExp2Node.js diff --git a/site/node_modules/three/src/nodes/fog/FogNode.js b/site/game/node_modules/three/src/nodes/fog/FogNode.js similarity index 100% rename from site/node_modules/three/src/nodes/fog/FogNode.js rename to site/game/node_modules/three/src/nodes/fog/FogNode.js diff --git a/site/node_modules/three/src/nodes/fog/FogRangeNode.js b/site/game/node_modules/three/src/nodes/fog/FogRangeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/fog/FogRangeNode.js rename to site/game/node_modules/three/src/nodes/fog/FogRangeNode.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js b/site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_GGX.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/BRDF_Lambert.js b/site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_Lambert.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/BRDF_Lambert.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_Lambert.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/BRDF_Sheen.js b/site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_Sheen.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/BRDF_Sheen.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/BRDF_Sheen.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js b/site/game/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/DFGApprox.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/D_GGX.js b/site/game/node_modules/three/src/nodes/functions/BSDF/D_GGX.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/D_GGX.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/D_GGX.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js b/site/game/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/D_GGX_Anisotropic.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/EnvironmentBRDF.js b/site/game/node_modules/three/src/nodes/functions/BSDF/EnvironmentBRDF.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/EnvironmentBRDF.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/EnvironmentBRDF.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/F_Schlick.js b/site/game/node_modules/three/src/nodes/functions/BSDF/F_Schlick.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/F_Schlick.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/F_Schlick.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/LTC.js b/site/game/node_modules/three/src/nodes/functions/BSDF/LTC.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/LTC.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/LTC.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/Schlick_to_F0.js b/site/game/node_modules/three/src/nodes/functions/BSDF/Schlick_to_F0.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/Schlick_to_F0.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/Schlick_to_F0.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js b/site/game/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated.js diff --git a/site/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js b/site/game/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js rename to site/game/node_modules/three/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js diff --git a/site/node_modules/three/src/nodes/functions/BasicLightingModel.js b/site/game/node_modules/three/src/nodes/functions/BasicLightingModel.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/BasicLightingModel.js rename to site/game/node_modules/three/src/nodes/functions/BasicLightingModel.js diff --git a/site/node_modules/three/src/nodes/functions/PhongLightingModel.js b/site/game/node_modules/three/src/nodes/functions/PhongLightingModel.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/PhongLightingModel.js rename to site/game/node_modules/three/src/nodes/functions/PhongLightingModel.js diff --git a/site/node_modules/three/src/nodes/functions/PhysicalLightingModel.js b/site/game/node_modules/three/src/nodes/functions/PhysicalLightingModel.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/PhysicalLightingModel.js rename to site/game/node_modules/three/src/nodes/functions/PhysicalLightingModel.js diff --git a/site/node_modules/three/src/nodes/functions/ShadowMaskModel.js b/site/game/node_modules/three/src/nodes/functions/ShadowMaskModel.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/ShadowMaskModel.js rename to site/game/node_modules/three/src/nodes/functions/ShadowMaskModel.js diff --git a/site/node_modules/three/src/nodes/functions/ToonLightingModel.js b/site/game/node_modules/three/src/nodes/functions/ToonLightingModel.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/ToonLightingModel.js rename to site/game/node_modules/three/src/nodes/functions/ToonLightingModel.js diff --git a/site/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js b/site/game/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js rename to site/game/node_modules/three/src/nodes/functions/material/getGeometryRoughness.js diff --git a/site/node_modules/three/src/nodes/functions/material/getRoughness.js b/site/game/node_modules/three/src/nodes/functions/material/getRoughness.js similarity index 100% rename from site/node_modules/three/src/nodes/functions/material/getRoughness.js rename to site/game/node_modules/three/src/nodes/functions/material/getRoughness.js diff --git a/site/node_modules/three/src/nodes/geometry/RangeNode.js b/site/game/node_modules/three/src/nodes/geometry/RangeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/geometry/RangeNode.js rename to site/game/node_modules/three/src/nodes/geometry/RangeNode.js diff --git a/site/node_modules/three/src/nodes/gpgpu/ComputeNode.js b/site/game/node_modules/three/src/nodes/gpgpu/ComputeNode.js similarity index 100% rename from site/node_modules/three/src/nodes/gpgpu/ComputeNode.js rename to site/game/node_modules/three/src/nodes/gpgpu/ComputeNode.js diff --git a/site/node_modules/three/src/nodes/lighting/AONode.js b/site/game/node_modules/three/src/nodes/lighting/AONode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/AONode.js rename to site/game/node_modules/three/src/nodes/lighting/AONode.js diff --git a/site/node_modules/three/src/nodes/lighting/AmbientLightNode.js b/site/game/node_modules/three/src/nodes/lighting/AmbientLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/AmbientLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/AmbientLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/AnalyticLightNode.js b/site/game/node_modules/three/src/nodes/lighting/AnalyticLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/AnalyticLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/AnalyticLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js b/site/game/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js rename to site/game/node_modules/three/src/nodes/lighting/BasicEnvironmentNode.js diff --git a/site/node_modules/three/src/nodes/lighting/BasicLightMapNode.js b/site/game/node_modules/three/src/nodes/lighting/BasicLightMapNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/BasicLightMapNode.js rename to site/game/node_modules/three/src/nodes/lighting/BasicLightMapNode.js diff --git a/site/node_modules/three/src/nodes/lighting/DirectionalLightNode.js b/site/game/node_modules/three/src/nodes/lighting/DirectionalLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/DirectionalLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/DirectionalLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/EnvironmentNode.js b/site/game/node_modules/three/src/nodes/lighting/EnvironmentNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/EnvironmentNode.js rename to site/game/node_modules/three/src/nodes/lighting/EnvironmentNode.js diff --git a/site/node_modules/three/src/nodes/lighting/HemisphereLightNode.js b/site/game/node_modules/three/src/nodes/lighting/HemisphereLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/HemisphereLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/HemisphereLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/IESSpotLightNode.js b/site/game/node_modules/three/src/nodes/lighting/IESSpotLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/IESSpotLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/IESSpotLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/IrradianceNode.js b/site/game/node_modules/three/src/nodes/lighting/IrradianceNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/IrradianceNode.js rename to site/game/node_modules/three/src/nodes/lighting/IrradianceNode.js diff --git a/site/node_modules/three/src/nodes/lighting/LightNode.js b/site/game/node_modules/three/src/nodes/lighting/LightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/LightNode.js rename to site/game/node_modules/three/src/nodes/lighting/LightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/LightUtils.js b/site/game/node_modules/three/src/nodes/lighting/LightUtils.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/LightUtils.js rename to site/game/node_modules/three/src/nodes/lighting/LightUtils.js diff --git a/site/node_modules/three/src/nodes/lighting/LightingContextNode.js b/site/game/node_modules/three/src/nodes/lighting/LightingContextNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/LightingContextNode.js rename to site/game/node_modules/three/src/nodes/lighting/LightingContextNode.js diff --git a/site/node_modules/three/src/nodes/lighting/LightingNode.js b/site/game/node_modules/three/src/nodes/lighting/LightingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/LightingNode.js rename to site/game/node_modules/three/src/nodes/lighting/LightingNode.js diff --git a/site/node_modules/three/src/nodes/lighting/LightsNode.js b/site/game/node_modules/three/src/nodes/lighting/LightsNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/LightsNode.js rename to site/game/node_modules/three/src/nodes/lighting/LightsNode.js diff --git a/site/node_modules/three/src/nodes/lighting/PointLightNode.js b/site/game/node_modules/three/src/nodes/lighting/PointLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/PointLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/PointLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/RectAreaLightNode.js b/site/game/node_modules/three/src/nodes/lighting/RectAreaLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/RectAreaLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/RectAreaLightNode.js diff --git a/site/node_modules/three/src/nodes/lighting/SpotLightNode.js b/site/game/node_modules/three/src/nodes/lighting/SpotLightNode.js similarity index 100% rename from site/node_modules/three/src/nodes/lighting/SpotLightNode.js rename to site/game/node_modules/three/src/nodes/lighting/SpotLightNode.js diff --git a/site/node_modules/three/src/nodes/loaders/NodeLoader.js b/site/game/node_modules/three/src/nodes/loaders/NodeLoader.js similarity index 100% rename from site/node_modules/three/src/nodes/loaders/NodeLoader.js rename to site/game/node_modules/three/src/nodes/loaders/NodeLoader.js diff --git a/site/node_modules/three/src/nodes/loaders/NodeMaterialLoader.js b/site/game/node_modules/three/src/nodes/loaders/NodeMaterialLoader.js similarity index 100% rename from site/node_modules/three/src/nodes/loaders/NodeMaterialLoader.js rename to site/game/node_modules/three/src/nodes/loaders/NodeMaterialLoader.js diff --git a/site/node_modules/three/src/nodes/loaders/NodeObjectLoader.js b/site/game/node_modules/three/src/nodes/loaders/NodeObjectLoader.js similarity index 100% rename from site/node_modules/three/src/nodes/loaders/NodeObjectLoader.js rename to site/game/node_modules/three/src/nodes/loaders/NodeObjectLoader.js diff --git a/site/node_modules/three/src/nodes/materials/InstancedPointsNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/InstancedPointsNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/InstancedPointsNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/InstancedPointsNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/Line2NodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/Line2NodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/Line2NodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/Line2NodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/LineBasicNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/LineBasicNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/LineBasicNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/LineBasicNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/LineDashedNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/LineDashedNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/LineDashedNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/LineDashedNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/Materials.js b/site/game/node_modules/three/src/nodes/materials/Materials.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/Materials.js rename to site/game/node_modules/three/src/nodes/materials/Materials.js diff --git a/site/node_modules/three/src/nodes/materials/MeshBasicNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshBasicNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshBasicNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshBasicNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshLambertNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshLambertNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshLambertNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshLambertNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshMatcapNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshMatcapNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshMatcapNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshMatcapNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshNormalNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshNormalNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshNormalNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshNormalNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshPhongNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshPhongNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshPhongNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshPhongNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshPhysicalNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshPhysicalNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshPhysicalNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshPhysicalNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshSSSNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshSSSNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshSSSNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshSSSNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshStandardNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshStandardNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshStandardNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshStandardNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/MeshToonNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/MeshToonNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/MeshToonNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/MeshToonNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/NodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/NodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/NodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/NodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/PointsNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/PointsNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/PointsNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/PointsNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/ShadowNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/ShadowNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/ShadowNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/ShadowNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/SpriteNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/SpriteNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/SpriteNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/SpriteNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materials/VolumeNodeMaterial.js b/site/game/node_modules/three/src/nodes/materials/VolumeNodeMaterial.js similarity index 100% rename from site/node_modules/three/src/nodes/materials/VolumeNodeMaterial.js rename to site/game/node_modules/three/src/nodes/materials/VolumeNodeMaterial.js diff --git a/site/node_modules/three/src/nodes/materialx/DISCLAIMER.md b/site/game/node_modules/three/src/nodes/materialx/DISCLAIMER.md similarity index 100% rename from site/node_modules/three/src/nodes/materialx/DISCLAIMER.md rename to site/game/node_modules/three/src/nodes/materialx/DISCLAIMER.md diff --git a/site/node_modules/three/src/nodes/materialx/MaterialXNodes.js b/site/game/node_modules/three/src/nodes/materialx/MaterialXNodes.js similarity index 100% rename from site/node_modules/three/src/nodes/materialx/MaterialXNodes.js rename to site/game/node_modules/three/src/nodes/materialx/MaterialXNodes.js diff --git a/site/node_modules/three/src/nodes/materialx/lib/mx_hsv.js b/site/game/node_modules/three/src/nodes/materialx/lib/mx_hsv.js similarity index 100% rename from site/node_modules/three/src/nodes/materialx/lib/mx_hsv.js rename to site/game/node_modules/three/src/nodes/materialx/lib/mx_hsv.js diff --git a/site/node_modules/three/src/nodes/materialx/lib/mx_noise.js b/site/game/node_modules/three/src/nodes/materialx/lib/mx_noise.js similarity index 100% rename from site/node_modules/three/src/nodes/materialx/lib/mx_noise.js rename to site/game/node_modules/three/src/nodes/materialx/lib/mx_noise.js diff --git a/site/node_modules/three/src/nodes/materialx/lib/mx_transform_color.js b/site/game/node_modules/three/src/nodes/materialx/lib/mx_transform_color.js similarity index 100% rename from site/node_modules/three/src/nodes/materialx/lib/mx_transform_color.js rename to site/game/node_modules/three/src/nodes/materialx/lib/mx_transform_color.js diff --git a/site/node_modules/three/src/nodes/math/CondNode.js b/site/game/node_modules/three/src/nodes/math/CondNode.js similarity index 100% rename from site/node_modules/three/src/nodes/math/CondNode.js rename to site/game/node_modules/three/src/nodes/math/CondNode.js diff --git a/site/node_modules/three/src/nodes/math/HashNode.js b/site/game/node_modules/three/src/nodes/math/HashNode.js similarity index 100% rename from site/node_modules/three/src/nodes/math/HashNode.js rename to site/game/node_modules/three/src/nodes/math/HashNode.js diff --git a/site/node_modules/three/src/nodes/math/MathNode.js b/site/game/node_modules/three/src/nodes/math/MathNode.js similarity index 100% rename from site/node_modules/three/src/nodes/math/MathNode.js rename to site/game/node_modules/three/src/nodes/math/MathNode.js diff --git a/site/node_modules/three/src/nodes/math/MathUtils.js b/site/game/node_modules/three/src/nodes/math/MathUtils.js similarity index 100% rename from site/node_modules/three/src/nodes/math/MathUtils.js rename to site/game/node_modules/three/src/nodes/math/MathUtils.js diff --git a/site/node_modules/three/src/nodes/math/OperatorNode.js b/site/game/node_modules/three/src/nodes/math/OperatorNode.js similarity index 100% rename from site/node_modules/three/src/nodes/math/OperatorNode.js rename to site/game/node_modules/three/src/nodes/math/OperatorNode.js diff --git a/site/node_modules/three/src/nodes/math/TriNoise3D.js b/site/game/node_modules/three/src/nodes/math/TriNoise3D.js similarity index 100% rename from site/node_modules/three/src/nodes/math/TriNoise3D.js rename to site/game/node_modules/three/src/nodes/math/TriNoise3D.js diff --git a/site/node_modules/three/src/nodes/parsers/GLSLNodeFunction.js b/site/game/node_modules/three/src/nodes/parsers/GLSLNodeFunction.js similarity index 100% rename from site/node_modules/three/src/nodes/parsers/GLSLNodeFunction.js rename to site/game/node_modules/three/src/nodes/parsers/GLSLNodeFunction.js diff --git a/site/node_modules/three/src/nodes/parsers/GLSLNodeParser.js b/site/game/node_modules/three/src/nodes/parsers/GLSLNodeParser.js similarity index 100% rename from site/node_modules/three/src/nodes/parsers/GLSLNodeParser.js rename to site/game/node_modules/three/src/nodes/parsers/GLSLNodeParser.js diff --git a/site/node_modules/three/src/nodes/pmrem/PMREMNode.js b/site/game/node_modules/three/src/nodes/pmrem/PMREMNode.js similarity index 100% rename from site/node_modules/three/src/nodes/pmrem/PMREMNode.js rename to site/game/node_modules/three/src/nodes/pmrem/PMREMNode.js diff --git a/site/node_modules/three/src/nodes/pmrem/PMREMUtils.js b/site/game/node_modules/three/src/nodes/pmrem/PMREMUtils.js similarity index 100% rename from site/node_modules/three/src/nodes/pmrem/PMREMUtils.js rename to site/game/node_modules/three/src/nodes/pmrem/PMREMUtils.js diff --git a/site/node_modules/three/src/nodes/procedural/CheckerNode.js b/site/game/node_modules/three/src/nodes/procedural/CheckerNode.js similarity index 100% rename from site/node_modules/three/src/nodes/procedural/CheckerNode.js rename to site/game/node_modules/three/src/nodes/procedural/CheckerNode.js diff --git a/site/node_modules/three/src/nodes/shadernode/ShaderNode.js b/site/game/node_modules/three/src/nodes/shadernode/ShaderNode.js similarity index 100% rename from site/node_modules/three/src/nodes/shadernode/ShaderNode.js rename to site/game/node_modules/three/src/nodes/shadernode/ShaderNode.js diff --git a/site/node_modules/three/src/nodes/utils/ArrayElementNode.js b/site/game/node_modules/three/src/nodes/utils/ArrayElementNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/ArrayElementNode.js rename to site/game/node_modules/three/src/nodes/utils/ArrayElementNode.js diff --git a/site/node_modules/three/src/nodes/utils/ConvertNode.js b/site/game/node_modules/three/src/nodes/utils/ConvertNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/ConvertNode.js rename to site/game/node_modules/three/src/nodes/utils/ConvertNode.js diff --git a/site/node_modules/three/src/nodes/utils/DiscardNode.js b/site/game/node_modules/three/src/nodes/utils/DiscardNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/DiscardNode.js rename to site/game/node_modules/three/src/nodes/utils/DiscardNode.js diff --git a/site/node_modules/three/src/nodes/utils/EquirectUVNode.js b/site/game/node_modules/three/src/nodes/utils/EquirectUVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/EquirectUVNode.js rename to site/game/node_modules/three/src/nodes/utils/EquirectUVNode.js diff --git a/site/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js b/site/game/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js rename to site/game/node_modules/three/src/nodes/utils/FunctionOverloadingNode.js diff --git a/site/node_modules/three/src/nodes/utils/JoinNode.js b/site/game/node_modules/three/src/nodes/utils/JoinNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/JoinNode.js rename to site/game/node_modules/three/src/nodes/utils/JoinNode.js diff --git a/site/node_modules/three/src/nodes/utils/LoopNode.js b/site/game/node_modules/three/src/nodes/utils/LoopNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/LoopNode.js rename to site/game/node_modules/three/src/nodes/utils/LoopNode.js diff --git a/site/node_modules/three/src/nodes/utils/MatcapUVNode.js b/site/game/node_modules/three/src/nodes/utils/MatcapUVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/MatcapUVNode.js rename to site/game/node_modules/three/src/nodes/utils/MatcapUVNode.js diff --git a/site/node_modules/three/src/nodes/utils/MaxMipLevelNode.js b/site/game/node_modules/three/src/nodes/utils/MaxMipLevelNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/MaxMipLevelNode.js rename to site/game/node_modules/three/src/nodes/utils/MaxMipLevelNode.js diff --git a/site/node_modules/three/src/nodes/utils/OscNode.js b/site/game/node_modules/three/src/nodes/utils/OscNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/OscNode.js rename to site/game/node_modules/three/src/nodes/utils/OscNode.js diff --git a/site/node_modules/three/src/nodes/utils/PackingNode.js b/site/game/node_modules/three/src/nodes/utils/PackingNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/PackingNode.js rename to site/game/node_modules/three/src/nodes/utils/PackingNode.js diff --git a/site/node_modules/three/src/nodes/utils/RTTNode.js b/site/game/node_modules/three/src/nodes/utils/RTTNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/RTTNode.js rename to site/game/node_modules/three/src/nodes/utils/RTTNode.js diff --git a/site/node_modules/three/src/nodes/utils/ReflectorNode.js b/site/game/node_modules/three/src/nodes/utils/ReflectorNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/ReflectorNode.js rename to site/game/node_modules/three/src/nodes/utils/ReflectorNode.js diff --git a/site/node_modules/three/src/nodes/utils/RemapNode.js b/site/game/node_modules/three/src/nodes/utils/RemapNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/RemapNode.js rename to site/game/node_modules/three/src/nodes/utils/RemapNode.js diff --git a/site/node_modules/three/src/nodes/utils/RotateNode.js b/site/game/node_modules/three/src/nodes/utils/RotateNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/RotateNode.js rename to site/game/node_modules/three/src/nodes/utils/RotateNode.js diff --git a/site/node_modules/three/src/nodes/utils/RotateUVNode.js b/site/game/node_modules/three/src/nodes/utils/RotateUVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/RotateUVNode.js rename to site/game/node_modules/three/src/nodes/utils/RotateUVNode.js diff --git a/site/node_modules/three/src/nodes/utils/SetNode.js b/site/game/node_modules/three/src/nodes/utils/SetNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/SetNode.js rename to site/game/node_modules/three/src/nodes/utils/SetNode.js diff --git a/site/node_modules/three/src/nodes/utils/SplitNode.js b/site/game/node_modules/three/src/nodes/utils/SplitNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/SplitNode.js rename to site/game/node_modules/three/src/nodes/utils/SplitNode.js diff --git a/site/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js b/site/game/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js rename to site/game/node_modules/three/src/nodes/utils/SpriteSheetUVNode.js diff --git a/site/node_modules/three/src/nodes/utils/StorageArrayElementNode.js b/site/game/node_modules/three/src/nodes/utils/StorageArrayElementNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/StorageArrayElementNode.js rename to site/game/node_modules/three/src/nodes/utils/StorageArrayElementNode.js diff --git a/site/node_modules/three/src/nodes/utils/TimerNode.js b/site/game/node_modules/three/src/nodes/utils/TimerNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/TimerNode.js rename to site/game/node_modules/three/src/nodes/utils/TimerNode.js diff --git a/site/node_modules/three/src/nodes/utils/TriplanarTexturesNode.js b/site/game/node_modules/three/src/nodes/utils/TriplanarTexturesNode.js similarity index 100% rename from site/node_modules/three/src/nodes/utils/TriplanarTexturesNode.js rename to site/game/node_modules/three/src/nodes/utils/TriplanarTexturesNode.js diff --git a/site/node_modules/three/src/objects/BatchedMesh.js b/site/game/node_modules/three/src/objects/BatchedMesh.js similarity index 100% rename from site/node_modules/three/src/objects/BatchedMesh.js rename to site/game/node_modules/three/src/objects/BatchedMesh.js diff --git a/site/node_modules/three/src/objects/Bone.js b/site/game/node_modules/three/src/objects/Bone.js similarity index 100% rename from site/node_modules/three/src/objects/Bone.js rename to site/game/node_modules/three/src/objects/Bone.js diff --git a/site/node_modules/three/src/objects/Group.js b/site/game/node_modules/three/src/objects/Group.js similarity index 100% rename from site/node_modules/three/src/objects/Group.js rename to site/game/node_modules/three/src/objects/Group.js diff --git a/site/node_modules/three/src/objects/InstancedMesh.js b/site/game/node_modules/three/src/objects/InstancedMesh.js similarity index 100% rename from site/node_modules/three/src/objects/InstancedMesh.js rename to site/game/node_modules/three/src/objects/InstancedMesh.js diff --git a/site/node_modules/three/src/objects/LOD.js b/site/game/node_modules/three/src/objects/LOD.js similarity index 100% rename from site/node_modules/three/src/objects/LOD.js rename to site/game/node_modules/three/src/objects/LOD.js diff --git a/site/node_modules/three/src/objects/Line.js b/site/game/node_modules/three/src/objects/Line.js similarity index 100% rename from site/node_modules/three/src/objects/Line.js rename to site/game/node_modules/three/src/objects/Line.js diff --git a/site/node_modules/three/src/objects/LineLoop.js b/site/game/node_modules/three/src/objects/LineLoop.js similarity index 100% rename from site/node_modules/three/src/objects/LineLoop.js rename to site/game/node_modules/three/src/objects/LineLoop.js diff --git a/site/node_modules/three/src/objects/LineSegments.js b/site/game/node_modules/three/src/objects/LineSegments.js similarity index 100% rename from site/node_modules/three/src/objects/LineSegments.js rename to site/game/node_modules/three/src/objects/LineSegments.js diff --git a/site/node_modules/three/src/objects/Mesh.js b/site/game/node_modules/three/src/objects/Mesh.js similarity index 100% rename from site/node_modules/three/src/objects/Mesh.js rename to site/game/node_modules/three/src/objects/Mesh.js diff --git a/site/node_modules/three/src/objects/Points.js b/site/game/node_modules/three/src/objects/Points.js similarity index 100% rename from site/node_modules/three/src/objects/Points.js rename to site/game/node_modules/three/src/objects/Points.js diff --git a/site/node_modules/three/src/objects/Skeleton.js b/site/game/node_modules/three/src/objects/Skeleton.js similarity index 100% rename from site/node_modules/three/src/objects/Skeleton.js rename to site/game/node_modules/three/src/objects/Skeleton.js diff --git a/site/node_modules/three/src/objects/SkinnedMesh.js b/site/game/node_modules/three/src/objects/SkinnedMesh.js similarity index 100% rename from site/node_modules/three/src/objects/SkinnedMesh.js rename to site/game/node_modules/three/src/objects/SkinnedMesh.js diff --git a/site/node_modules/three/src/objects/Sprite.js b/site/game/node_modules/three/src/objects/Sprite.js similarity index 100% rename from site/node_modules/three/src/objects/Sprite.js rename to site/game/node_modules/three/src/objects/Sprite.js diff --git a/site/node_modules/three/src/renderers/WebGL3DRenderTarget.js b/site/game/node_modules/three/src/renderers/WebGL3DRenderTarget.js similarity index 100% rename from site/node_modules/three/src/renderers/WebGL3DRenderTarget.js rename to site/game/node_modules/three/src/renderers/WebGL3DRenderTarget.js diff --git a/site/node_modules/three/src/renderers/WebGLArrayRenderTarget.js b/site/game/node_modules/three/src/renderers/WebGLArrayRenderTarget.js similarity index 100% rename from site/node_modules/three/src/renderers/WebGLArrayRenderTarget.js rename to site/game/node_modules/three/src/renderers/WebGLArrayRenderTarget.js diff --git a/site/node_modules/three/src/renderers/WebGLCubeRenderTarget.js b/site/game/node_modules/three/src/renderers/WebGLCubeRenderTarget.js similarity index 100% rename from site/node_modules/three/src/renderers/WebGLCubeRenderTarget.js rename to site/game/node_modules/three/src/renderers/WebGLCubeRenderTarget.js diff --git a/site/node_modules/three/src/renderers/WebGLRenderTarget.js b/site/game/node_modules/three/src/renderers/WebGLRenderTarget.js similarity index 100% rename from site/node_modules/three/src/renderers/WebGLRenderTarget.js rename to site/game/node_modules/three/src/renderers/WebGLRenderTarget.js diff --git a/site/node_modules/three/src/renderers/WebGLRenderer.js b/site/game/node_modules/three/src/renderers/WebGLRenderer.js similarity index 100% rename from site/node_modules/three/src/renderers/WebGLRenderer.js rename to site/game/node_modules/three/src/renderers/WebGLRenderer.js diff --git a/site/node_modules/three/src/renderers/common/Animation.js b/site/game/node_modules/three/src/renderers/common/Animation.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Animation.js rename to site/game/node_modules/three/src/renderers/common/Animation.js diff --git a/site/node_modules/three/src/renderers/common/Attributes.js b/site/game/node_modules/three/src/renderers/common/Attributes.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Attributes.js rename to site/game/node_modules/three/src/renderers/common/Attributes.js diff --git a/site/node_modules/three/src/renderers/common/Backend.js b/site/game/node_modules/three/src/renderers/common/Backend.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Backend.js rename to site/game/node_modules/three/src/renderers/common/Backend.js diff --git a/site/node_modules/three/src/renderers/common/Background.js b/site/game/node_modules/three/src/renderers/common/Background.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Background.js rename to site/game/node_modules/three/src/renderers/common/Background.js diff --git a/site/node_modules/three/src/renderers/common/BindGroup.js b/site/game/node_modules/three/src/renderers/common/BindGroup.js similarity index 100% rename from site/node_modules/three/src/renderers/common/BindGroup.js rename to site/game/node_modules/three/src/renderers/common/BindGroup.js diff --git a/site/node_modules/three/src/renderers/common/Binding.js b/site/game/node_modules/three/src/renderers/common/Binding.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Binding.js rename to site/game/node_modules/three/src/renderers/common/Binding.js diff --git a/site/node_modules/three/src/renderers/common/Bindings.js b/site/game/node_modules/three/src/renderers/common/Bindings.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Bindings.js rename to site/game/node_modules/three/src/renderers/common/Bindings.js diff --git a/site/node_modules/three/src/renderers/common/Buffer.js b/site/game/node_modules/three/src/renderers/common/Buffer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Buffer.js rename to site/game/node_modules/three/src/renderers/common/Buffer.js diff --git a/site/node_modules/three/src/renderers/common/BufferUtils.js b/site/game/node_modules/three/src/renderers/common/BufferUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/common/BufferUtils.js rename to site/game/node_modules/three/src/renderers/common/BufferUtils.js diff --git a/site/node_modules/three/src/renderers/common/ChainMap.js b/site/game/node_modules/three/src/renderers/common/ChainMap.js similarity index 100% rename from site/node_modules/three/src/renderers/common/ChainMap.js rename to site/game/node_modules/three/src/renderers/common/ChainMap.js diff --git a/site/node_modules/three/src/renderers/common/ClippingContext.js b/site/game/node_modules/three/src/renderers/common/ClippingContext.js similarity index 100% rename from site/node_modules/three/src/renderers/common/ClippingContext.js rename to site/game/node_modules/three/src/renderers/common/ClippingContext.js diff --git a/site/node_modules/three/src/renderers/common/Color4.js b/site/game/node_modules/three/src/renderers/common/Color4.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Color4.js rename to site/game/node_modules/three/src/renderers/common/Color4.js diff --git a/site/node_modules/three/src/renderers/common/ComputePipeline.js b/site/game/node_modules/three/src/renderers/common/ComputePipeline.js similarity index 100% rename from site/node_modules/three/src/renderers/common/ComputePipeline.js rename to site/game/node_modules/three/src/renderers/common/ComputePipeline.js diff --git a/site/node_modules/three/src/renderers/common/Constants.js b/site/game/node_modules/three/src/renderers/common/Constants.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Constants.js rename to site/game/node_modules/three/src/renderers/common/Constants.js diff --git a/site/node_modules/three/src/renderers/common/CubeRenderTarget.js b/site/game/node_modules/three/src/renderers/common/CubeRenderTarget.js similarity index 100% rename from site/node_modules/three/src/renderers/common/CubeRenderTarget.js rename to site/game/node_modules/three/src/renderers/common/CubeRenderTarget.js diff --git a/site/node_modules/three/src/renderers/common/DataMap.js b/site/game/node_modules/three/src/renderers/common/DataMap.js similarity index 100% rename from site/node_modules/three/src/renderers/common/DataMap.js rename to site/game/node_modules/three/src/renderers/common/DataMap.js diff --git a/site/node_modules/three/src/renderers/common/Geometries.js b/site/game/node_modules/three/src/renderers/common/Geometries.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Geometries.js rename to site/game/node_modules/three/src/renderers/common/Geometries.js diff --git a/site/node_modules/three/src/renderers/common/Info.js b/site/game/node_modules/three/src/renderers/common/Info.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Info.js rename to site/game/node_modules/three/src/renderers/common/Info.js diff --git a/site/node_modules/three/src/renderers/common/Pipeline.js b/site/game/node_modules/three/src/renderers/common/Pipeline.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Pipeline.js rename to site/game/node_modules/three/src/renderers/common/Pipeline.js diff --git a/site/node_modules/three/src/renderers/common/Pipelines.js b/site/game/node_modules/three/src/renderers/common/Pipelines.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Pipelines.js rename to site/game/node_modules/three/src/renderers/common/Pipelines.js diff --git a/site/node_modules/three/src/renderers/common/PostProcessing.js b/site/game/node_modules/three/src/renderers/common/PostProcessing.js similarity index 100% rename from site/node_modules/three/src/renderers/common/PostProcessing.js rename to site/game/node_modules/three/src/renderers/common/PostProcessing.js diff --git a/site/node_modules/three/src/renderers/common/ProgrammableStage.js b/site/game/node_modules/three/src/renderers/common/ProgrammableStage.js similarity index 100% rename from site/node_modules/three/src/renderers/common/ProgrammableStage.js rename to site/game/node_modules/three/src/renderers/common/ProgrammableStage.js diff --git a/site/node_modules/three/src/renderers/common/QuadMesh.js b/site/game/node_modules/three/src/renderers/common/QuadMesh.js similarity index 100% rename from site/node_modules/three/src/renderers/common/QuadMesh.js rename to site/game/node_modules/three/src/renderers/common/QuadMesh.js diff --git a/site/node_modules/three/src/renderers/common/RenderBundle.js b/site/game/node_modules/three/src/renderers/common/RenderBundle.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderBundle.js rename to site/game/node_modules/three/src/renderers/common/RenderBundle.js diff --git a/site/node_modules/three/src/renderers/common/RenderBundles.js b/site/game/node_modules/three/src/renderers/common/RenderBundles.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderBundles.js rename to site/game/node_modules/three/src/renderers/common/RenderBundles.js diff --git a/site/node_modules/three/src/renderers/common/RenderContext.js b/site/game/node_modules/three/src/renderers/common/RenderContext.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderContext.js rename to site/game/node_modules/three/src/renderers/common/RenderContext.js diff --git a/site/node_modules/three/src/renderers/common/RenderContexts.js b/site/game/node_modules/three/src/renderers/common/RenderContexts.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderContexts.js rename to site/game/node_modules/three/src/renderers/common/RenderContexts.js diff --git a/site/node_modules/three/src/renderers/common/RenderList.js b/site/game/node_modules/three/src/renderers/common/RenderList.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderList.js rename to site/game/node_modules/three/src/renderers/common/RenderList.js diff --git a/site/node_modules/three/src/renderers/common/RenderLists.js b/site/game/node_modules/three/src/renderers/common/RenderLists.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderLists.js rename to site/game/node_modules/three/src/renderers/common/RenderLists.js diff --git a/site/node_modules/three/src/renderers/common/RenderObject.js b/site/game/node_modules/three/src/renderers/common/RenderObject.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderObject.js rename to site/game/node_modules/three/src/renderers/common/RenderObject.js diff --git a/site/node_modules/three/src/renderers/common/RenderObjects.js b/site/game/node_modules/three/src/renderers/common/RenderObjects.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderObjects.js rename to site/game/node_modules/three/src/renderers/common/RenderObjects.js diff --git a/site/node_modules/three/src/renderers/common/RenderPipeline.js b/site/game/node_modules/three/src/renderers/common/RenderPipeline.js similarity index 100% rename from site/node_modules/three/src/renderers/common/RenderPipeline.js rename to site/game/node_modules/three/src/renderers/common/RenderPipeline.js diff --git a/site/node_modules/three/src/renderers/common/Renderer.js b/site/game/node_modules/three/src/renderers/common/Renderer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Renderer.js rename to site/game/node_modules/three/src/renderers/common/Renderer.js diff --git a/site/node_modules/three/src/renderers/common/SampledTexture.js b/site/game/node_modules/three/src/renderers/common/SampledTexture.js similarity index 100% rename from site/node_modules/three/src/renderers/common/SampledTexture.js rename to site/game/node_modules/three/src/renderers/common/SampledTexture.js diff --git a/site/node_modules/three/src/renderers/common/Sampler.js b/site/game/node_modules/three/src/renderers/common/Sampler.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Sampler.js rename to site/game/node_modules/three/src/renderers/common/Sampler.js diff --git a/site/node_modules/three/src/renderers/common/StorageBuffer.js b/site/game/node_modules/three/src/renderers/common/StorageBuffer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/StorageBuffer.js rename to site/game/node_modules/three/src/renderers/common/StorageBuffer.js diff --git a/site/node_modules/three/src/renderers/common/StorageBufferAttribute.js b/site/game/node_modules/three/src/renderers/common/StorageBufferAttribute.js similarity index 100% rename from site/node_modules/three/src/renderers/common/StorageBufferAttribute.js rename to site/game/node_modules/three/src/renderers/common/StorageBufferAttribute.js diff --git a/site/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js b/site/game/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js similarity index 100% rename from site/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js rename to site/game/node_modules/three/src/renderers/common/StorageInstancedBufferAttribute.js diff --git a/site/node_modules/three/src/renderers/common/StorageTexture.js b/site/game/node_modules/three/src/renderers/common/StorageTexture.js similarity index 100% rename from site/node_modules/three/src/renderers/common/StorageTexture.js rename to site/game/node_modules/three/src/renderers/common/StorageTexture.js diff --git a/site/node_modules/three/src/renderers/common/Textures.js b/site/game/node_modules/three/src/renderers/common/Textures.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Textures.js rename to site/game/node_modules/three/src/renderers/common/Textures.js diff --git a/site/node_modules/three/src/renderers/common/Uniform.js b/site/game/node_modules/three/src/renderers/common/Uniform.js similarity index 100% rename from site/node_modules/three/src/renderers/common/Uniform.js rename to site/game/node_modules/three/src/renderers/common/Uniform.js diff --git a/site/node_modules/three/src/renderers/common/UniformBuffer.js b/site/game/node_modules/three/src/renderers/common/UniformBuffer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/UniformBuffer.js rename to site/game/node_modules/three/src/renderers/common/UniformBuffer.js diff --git a/site/node_modules/three/src/renderers/common/UniformsGroup.js b/site/game/node_modules/three/src/renderers/common/UniformsGroup.js similarity index 100% rename from site/node_modules/three/src/renderers/common/UniformsGroup.js rename to site/game/node_modules/three/src/renderers/common/UniformsGroup.js diff --git a/site/node_modules/three/src/renderers/common/extras/PMREMGenerator.js b/site/game/node_modules/three/src/renderers/common/extras/PMREMGenerator.js similarity index 100% rename from site/node_modules/three/src/renderers/common/extras/PMREMGenerator.js rename to site/game/node_modules/three/src/renderers/common/extras/PMREMGenerator.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeBuilderState.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeSampledTexture.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeSampler.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeSampler.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeSampler.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeSampler.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeStorageBuffer.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeUniform.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeUniform.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeUniform.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeUniform.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeUniformBuffer.js diff --git a/site/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js b/site/game/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js rename to site/game/node_modules/three/src/renderers/common/nodes/NodeUniformsGroup.js diff --git a/site/node_modules/three/src/renderers/common/nodes/Nodes.js b/site/game/node_modules/three/src/renderers/common/nodes/Nodes.js similarity index 100% rename from site/node_modules/three/src/renderers/common/nodes/Nodes.js rename to site/game/node_modules/three/src/renderers/common/nodes/Nodes.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphamap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/alphatest_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/aomap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/batching_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/beginnormal_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_begin.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/clipping_planes_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/common.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/default_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/default_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/dithering_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/envmap_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/fog_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/iridescence_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lightmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/metalnessmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphcolor_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphinstance_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphnormal_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/morphtarget_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normal_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/opaque_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/packing.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/project_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/roughnessmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinbase_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinning_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/skinnormal_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/specularmap_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/background.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/cube.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/depth.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/equirect.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/linedashed.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshbasic.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshlambert.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshnormal.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshphong.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshphysical.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/meshtoon.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/points.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/shadow.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/sprite.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js b/site/game/node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js rename to site/game/node_modules/three/src/renderers/shaders/ShaderLib/vsm.glsl.js diff --git a/site/node_modules/three/src/renderers/shaders/UniformsLib.js b/site/game/node_modules/three/src/renderers/shaders/UniformsLib.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/UniformsLib.js rename to site/game/node_modules/three/src/renderers/shaders/UniformsLib.js diff --git a/site/node_modules/three/src/renderers/shaders/UniformsUtils.js b/site/game/node_modules/three/src/renderers/shaders/UniformsUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/shaders/UniformsUtils.js rename to site/game/node_modules/three/src/renderers/shaders/UniformsUtils.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js b/site/game/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/WebGLBackend.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js b/site/game/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/WebGLBufferRenderer.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js b/site/game/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLCapabilities.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLConstants.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLConstants.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLConstants.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLConstants.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLExtensions.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLState.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLState.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLState.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLState.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js diff --git a/site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLUtils.js b/site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl-fallback/utils/WebGLUtils.js rename to site/game/node_modules/three/src/renderers/webgl-fallback/utils/WebGLUtils.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLAnimation.js b/site/game/node_modules/three/src/renderers/webgl/WebGLAnimation.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLAnimation.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLAnimation.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLAttributes.js b/site/game/node_modules/three/src/renderers/webgl/WebGLAttributes.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLAttributes.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLAttributes.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLBackground.js b/site/game/node_modules/three/src/renderers/webgl/WebGLBackground.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLBackground.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLBackground.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLBindingStates.js b/site/game/node_modules/three/src/renderers/webgl/WebGLBindingStates.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLBindingStates.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLBindingStates.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js b/site/game/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLBufferRenderer.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLCapabilities.js b/site/game/node_modules/three/src/renderers/webgl/WebGLCapabilities.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLCapabilities.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLCapabilities.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLClipping.js b/site/game/node_modules/three/src/renderers/webgl/WebGLClipping.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLClipping.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLClipping.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLCubeMaps.js b/site/game/node_modules/three/src/renderers/webgl/WebGLCubeMaps.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLCubeMaps.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLCubeMaps.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js b/site/game/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLCubeUVMaps.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLExtensions.js b/site/game/node_modules/three/src/renderers/webgl/WebGLExtensions.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLExtensions.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLExtensions.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLGeometries.js b/site/game/node_modules/three/src/renderers/webgl/WebGLGeometries.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLGeometries.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLGeometries.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js b/site/game/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLIndexedBufferRenderer.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLInfo.js b/site/game/node_modules/three/src/renderers/webgl/WebGLInfo.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLInfo.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLInfo.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLLights.js b/site/game/node_modules/three/src/renderers/webgl/WebGLLights.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLLights.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLLights.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLMaterials.js b/site/game/node_modules/three/src/renderers/webgl/WebGLMaterials.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLMaterials.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLMaterials.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js b/site/game/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLMorphtargets.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLObjects.js b/site/game/node_modules/three/src/renderers/webgl/WebGLObjects.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLObjects.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLObjects.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLProgram.js b/site/game/node_modules/three/src/renderers/webgl/WebGLProgram.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLProgram.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLProgram.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLPrograms.js b/site/game/node_modules/three/src/renderers/webgl/WebGLPrograms.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLPrograms.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLPrograms.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLProperties.js b/site/game/node_modules/three/src/renderers/webgl/WebGLProperties.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLProperties.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLProperties.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLRenderLists.js b/site/game/node_modules/three/src/renderers/webgl/WebGLRenderLists.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLRenderLists.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLRenderLists.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLRenderStates.js b/site/game/node_modules/three/src/renderers/webgl/WebGLRenderStates.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLRenderStates.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLRenderStates.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLShader.js b/site/game/node_modules/three/src/renderers/webgl/WebGLShader.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLShader.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLShader.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLShaderCache.js b/site/game/node_modules/three/src/renderers/webgl/WebGLShaderCache.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLShaderCache.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLShaderCache.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLShadowMap.js b/site/game/node_modules/three/src/renderers/webgl/WebGLShadowMap.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLShadowMap.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLShadowMap.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLState.js b/site/game/node_modules/three/src/renderers/webgl/WebGLState.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLState.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLState.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLTextures.js b/site/game/node_modules/three/src/renderers/webgl/WebGLTextures.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLTextures.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLTextures.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLUniforms.js b/site/game/node_modules/three/src/renderers/webgl/WebGLUniforms.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLUniforms.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLUniforms.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js b/site/game/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLUniformsGroups.js diff --git a/site/node_modules/three/src/renderers/webgl/WebGLUtils.js b/site/game/node_modules/three/src/renderers/webgl/WebGLUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgl/WebGLUtils.js rename to site/game/node_modules/three/src/renderers/webgl/WebGLUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/WebGPUBackend.js b/site/game/node_modules/three/src/renderers/webgpu/WebGPUBackend.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/WebGPUBackend.js rename to site/game/node_modules/three/src/renderers/webgpu/WebGPUBackend.js diff --git a/site/node_modules/three/src/renderers/webgpu/WebGPURenderer.js b/site/game/node_modules/three/src/renderers/webgpu/WebGPURenderer.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/WebGPURenderer.js rename to site/game/node_modules/three/src/renderers/webgpu/WebGPURenderer.js diff --git a/site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js b/site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js rename to site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeBuilder.js diff --git a/site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js b/site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js rename to site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeFunction.js diff --git a/site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeParser.js b/site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeParser.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeParser.js rename to site/game/node_modules/three/src/renderers/webgpu/nodes/WGSLNodeParser.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUAttributeUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUBindingUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUConstants.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUConstants.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUConstants.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUConstants.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUPipelineUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUPipelineUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUPipelineUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUPipelineUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUTextureUtils.js diff --git a/site/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js b/site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js similarity index 100% rename from site/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js rename to site/game/node_modules/three/src/renderers/webgpu/utils/WebGPUUtils.js diff --git a/site/node_modules/three/src/renderers/webxr/WebXRController.js b/site/game/node_modules/three/src/renderers/webxr/WebXRController.js similarity index 100% rename from site/node_modules/three/src/renderers/webxr/WebXRController.js rename to site/game/node_modules/three/src/renderers/webxr/WebXRController.js diff --git a/site/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js b/site/game/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js similarity index 100% rename from site/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js rename to site/game/node_modules/three/src/renderers/webxr/WebXRDepthSensing.js diff --git a/site/node_modules/three/src/renderers/webxr/WebXRManager.js b/site/game/node_modules/three/src/renderers/webxr/WebXRManager.js similarity index 100% rename from site/node_modules/three/src/renderers/webxr/WebXRManager.js rename to site/game/node_modules/three/src/renderers/webxr/WebXRManager.js diff --git a/site/node_modules/three/src/scenes/Fog.js b/site/game/node_modules/three/src/scenes/Fog.js similarity index 100% rename from site/node_modules/three/src/scenes/Fog.js rename to site/game/node_modules/three/src/scenes/Fog.js diff --git a/site/node_modules/three/src/scenes/FogExp2.js b/site/game/node_modules/three/src/scenes/FogExp2.js similarity index 100% rename from site/node_modules/three/src/scenes/FogExp2.js rename to site/game/node_modules/three/src/scenes/FogExp2.js diff --git a/site/node_modules/three/src/scenes/Scene.js b/site/game/node_modules/three/src/scenes/Scene.js similarity index 100% rename from site/node_modules/three/src/scenes/Scene.js rename to site/game/node_modules/three/src/scenes/Scene.js diff --git a/site/node_modules/three/src/textures/CanvasTexture.js b/site/game/node_modules/three/src/textures/CanvasTexture.js similarity index 100% rename from site/node_modules/three/src/textures/CanvasTexture.js rename to site/game/node_modules/three/src/textures/CanvasTexture.js diff --git a/site/node_modules/three/src/textures/CompressedArrayTexture.js b/site/game/node_modules/three/src/textures/CompressedArrayTexture.js similarity index 100% rename from site/node_modules/three/src/textures/CompressedArrayTexture.js rename to site/game/node_modules/three/src/textures/CompressedArrayTexture.js diff --git a/site/node_modules/three/src/textures/CompressedCubeTexture.js b/site/game/node_modules/three/src/textures/CompressedCubeTexture.js similarity index 100% rename from site/node_modules/three/src/textures/CompressedCubeTexture.js rename to site/game/node_modules/three/src/textures/CompressedCubeTexture.js diff --git a/site/node_modules/three/src/textures/CompressedTexture.js b/site/game/node_modules/three/src/textures/CompressedTexture.js similarity index 100% rename from site/node_modules/three/src/textures/CompressedTexture.js rename to site/game/node_modules/three/src/textures/CompressedTexture.js diff --git a/site/node_modules/three/src/textures/CubeTexture.js b/site/game/node_modules/three/src/textures/CubeTexture.js similarity index 100% rename from site/node_modules/three/src/textures/CubeTexture.js rename to site/game/node_modules/three/src/textures/CubeTexture.js diff --git a/site/node_modules/three/src/textures/Data3DTexture.js b/site/game/node_modules/three/src/textures/Data3DTexture.js similarity index 100% rename from site/node_modules/three/src/textures/Data3DTexture.js rename to site/game/node_modules/three/src/textures/Data3DTexture.js diff --git a/site/node_modules/three/src/textures/DataArrayTexture.js b/site/game/node_modules/three/src/textures/DataArrayTexture.js similarity index 100% rename from site/node_modules/three/src/textures/DataArrayTexture.js rename to site/game/node_modules/three/src/textures/DataArrayTexture.js diff --git a/site/node_modules/three/src/textures/DataTexture.js b/site/game/node_modules/three/src/textures/DataTexture.js similarity index 100% rename from site/node_modules/three/src/textures/DataTexture.js rename to site/game/node_modules/three/src/textures/DataTexture.js diff --git a/site/node_modules/three/src/textures/DepthTexture.js b/site/game/node_modules/three/src/textures/DepthTexture.js similarity index 100% rename from site/node_modules/three/src/textures/DepthTexture.js rename to site/game/node_modules/three/src/textures/DepthTexture.js diff --git a/site/node_modules/three/src/textures/FramebufferTexture.js b/site/game/node_modules/three/src/textures/FramebufferTexture.js similarity index 100% rename from site/node_modules/three/src/textures/FramebufferTexture.js rename to site/game/node_modules/three/src/textures/FramebufferTexture.js diff --git a/site/node_modules/three/src/textures/Source.js b/site/game/node_modules/three/src/textures/Source.js similarity index 100% rename from site/node_modules/three/src/textures/Source.js rename to site/game/node_modules/three/src/textures/Source.js diff --git a/site/node_modules/three/src/textures/Texture.js b/site/game/node_modules/three/src/textures/Texture.js similarity index 100% rename from site/node_modules/three/src/textures/Texture.js rename to site/game/node_modules/three/src/textures/Texture.js diff --git a/site/node_modules/three/src/textures/VideoTexture.js b/site/game/node_modules/three/src/textures/VideoTexture.js similarity index 100% rename from site/node_modules/three/src/textures/VideoTexture.js rename to site/game/node_modules/three/src/textures/VideoTexture.js diff --git a/site/node_modules/three/src/utils.js b/site/game/node_modules/three/src/utils.js similarity index 100% rename from site/node_modules/three/src/utils.js rename to site/game/node_modules/three/src/utils.js diff --git a/site/node_modules/vite/LICENSE.md b/site/game/node_modules/vite/LICENSE.md similarity index 100% rename from site/node_modules/vite/LICENSE.md rename to site/game/node_modules/vite/LICENSE.md diff --git a/site/node_modules/vite/README.md b/site/game/node_modules/vite/README.md similarity index 100% rename from site/node_modules/vite/README.md rename to site/game/node_modules/vite/README.md diff --git a/site/node_modules/vite/bin/openChrome.applescript b/site/game/node_modules/vite/bin/openChrome.applescript similarity index 100% rename from site/node_modules/vite/bin/openChrome.applescript rename to site/game/node_modules/vite/bin/openChrome.applescript diff --git a/site/node_modules/vite/bin/vite.js b/site/game/node_modules/vite/bin/vite.js similarity index 100% rename from site/node_modules/vite/bin/vite.js rename to site/game/node_modules/vite/bin/vite.js diff --git a/site/node_modules/vite/client.d.ts b/site/game/node_modules/vite/client.d.ts similarity index 100% rename from site/node_modules/vite/client.d.ts rename to site/game/node_modules/vite/client.d.ts diff --git a/site/node_modules/vite/dist/client/client.mjs b/site/game/node_modules/vite/dist/client/client.mjs similarity index 100% rename from site/node_modules/vite/dist/client/client.mjs rename to site/game/node_modules/vite/dist/client/client.mjs diff --git a/site/node_modules/vite/dist/client/env.mjs b/site/game/node_modules/vite/dist/client/env.mjs similarity index 100% rename from site/node_modules/vite/dist/client/env.mjs rename to site/game/node_modules/vite/dist/client/env.mjs diff --git a/site/node_modules/vite/dist/node-cjs/publicUtils.cjs b/site/game/node_modules/vite/dist/node-cjs/publicUtils.cjs similarity index 100% rename from site/node_modules/vite/dist/node-cjs/publicUtils.cjs rename to site/game/node_modules/vite/dist/node-cjs/publicUtils.cjs diff --git a/site/node_modules/vite/dist/node/chunks/dep-CjZz522d.js b/site/game/node_modules/vite/dist/node/chunks/dep-CjZz522d.js similarity index 100% rename from site/node_modules/vite/dist/node/chunks/dep-CjZz522d.js rename to site/game/node_modules/vite/dist/node/chunks/dep-CjZz522d.js diff --git a/site/node_modules/vite/dist/node/chunks/dep-D-7KCb9p.js b/site/game/node_modules/vite/dist/node/chunks/dep-D-7KCb9p.js similarity index 100% rename from site/node_modules/vite/dist/node/chunks/dep-D-7KCb9p.js rename to site/game/node_modules/vite/dist/node/chunks/dep-D-7KCb9p.js diff --git a/site/node_modules/vite/dist/node/chunks/dep-IQS-Za7F.js b/site/game/node_modules/vite/dist/node/chunks/dep-IQS-Za7F.js similarity index 100% rename from site/node_modules/vite/dist/node/chunks/dep-IQS-Za7F.js rename to site/game/node_modules/vite/dist/node/chunks/dep-IQS-Za7F.js diff --git a/site/node_modules/vite/dist/node/chunks/dep-VqAwxVIc.js b/site/game/node_modules/vite/dist/node/chunks/dep-VqAwxVIc.js similarity index 100% rename from site/node_modules/vite/dist/node/chunks/dep-VqAwxVIc.js rename to site/game/node_modules/vite/dist/node/chunks/dep-VqAwxVIc.js diff --git a/site/node_modules/vite/dist/node/chunks/dep-mCdpKltl.js b/site/game/node_modules/vite/dist/node/chunks/dep-mCdpKltl.js similarity index 100% rename from site/node_modules/vite/dist/node/chunks/dep-mCdpKltl.js rename to site/game/node_modules/vite/dist/node/chunks/dep-mCdpKltl.js diff --git a/site/node_modules/vite/dist/node/cli.js b/site/game/node_modules/vite/dist/node/cli.js similarity index 100% rename from site/node_modules/vite/dist/node/cli.js rename to site/game/node_modules/vite/dist/node/cli.js diff --git a/site/node_modules/vite/dist/node/constants.js b/site/game/node_modules/vite/dist/node/constants.js similarity index 100% rename from site/node_modules/vite/dist/node/constants.js rename to site/game/node_modules/vite/dist/node/constants.js diff --git a/site/node_modules/vite/dist/node/index.d.ts b/site/game/node_modules/vite/dist/node/index.d.ts similarity index 100% rename from site/node_modules/vite/dist/node/index.d.ts rename to site/game/node_modules/vite/dist/node/index.d.ts diff --git a/site/node_modules/vite/dist/node/index.js b/site/game/node_modules/vite/dist/node/index.js similarity index 100% rename from site/node_modules/vite/dist/node/index.js rename to site/game/node_modules/vite/dist/node/index.js diff --git a/site/node_modules/vite/dist/node/runtime.d.ts b/site/game/node_modules/vite/dist/node/runtime.d.ts similarity index 100% rename from site/node_modules/vite/dist/node/runtime.d.ts rename to site/game/node_modules/vite/dist/node/runtime.d.ts diff --git a/site/node_modules/vite/dist/node/runtime.js b/site/game/node_modules/vite/dist/node/runtime.js similarity index 100% rename from site/node_modules/vite/dist/node/runtime.js rename to site/game/node_modules/vite/dist/node/runtime.js diff --git a/site/node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts b/site/game/node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts similarity index 100% rename from site/node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts rename to site/game/node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts diff --git a/site/node_modules/vite/index.cjs b/site/game/node_modules/vite/index.cjs similarity index 100% rename from site/node_modules/vite/index.cjs rename to site/game/node_modules/vite/index.cjs diff --git a/site/node_modules/vite/index.d.cts b/site/game/node_modules/vite/index.d.cts similarity index 100% rename from site/node_modules/vite/index.d.cts rename to site/game/node_modules/vite/index.d.cts diff --git a/site/node_modules/vite/package.json b/site/game/node_modules/vite/package.json similarity index 100% rename from site/node_modules/vite/package.json rename to site/game/node_modules/vite/package.json diff --git a/site/node_modules/vite/types/customEvent.d.ts b/site/game/node_modules/vite/types/customEvent.d.ts similarity index 100% rename from site/node_modules/vite/types/customEvent.d.ts rename to site/game/node_modules/vite/types/customEvent.d.ts diff --git a/site/node_modules/vite/types/hmrPayload.d.ts b/site/game/node_modules/vite/types/hmrPayload.d.ts similarity index 100% rename from site/node_modules/vite/types/hmrPayload.d.ts rename to site/game/node_modules/vite/types/hmrPayload.d.ts diff --git a/site/node_modules/vite/types/hot.d.ts b/site/game/node_modules/vite/types/hot.d.ts similarity index 100% rename from site/node_modules/vite/types/hot.d.ts rename to site/game/node_modules/vite/types/hot.d.ts diff --git a/site/node_modules/vite/types/import-meta.d.ts b/site/game/node_modules/vite/types/import-meta.d.ts similarity index 100% rename from site/node_modules/vite/types/import-meta.d.ts rename to site/game/node_modules/vite/types/import-meta.d.ts diff --git a/site/node_modules/vite/types/importGlob.d.ts b/site/game/node_modules/vite/types/importGlob.d.ts similarity index 100% rename from site/node_modules/vite/types/importGlob.d.ts rename to site/game/node_modules/vite/types/importGlob.d.ts diff --git a/site/node_modules/vite/types/importMeta.d.ts b/site/game/node_modules/vite/types/importMeta.d.ts similarity index 100% rename from site/node_modules/vite/types/importMeta.d.ts rename to site/game/node_modules/vite/types/importMeta.d.ts diff --git a/site/node_modules/vite/types/metadata.d.ts b/site/game/node_modules/vite/types/metadata.d.ts similarity index 100% rename from site/node_modules/vite/types/metadata.d.ts rename to site/game/node_modules/vite/types/metadata.d.ts diff --git a/site/node_modules/vite/types/package.json b/site/game/node_modules/vite/types/package.json similarity index 100% rename from site/node_modules/vite/types/package.json rename to site/game/node_modules/vite/types/package.json diff --git a/site/package-lock.json b/site/game/package-lock.json similarity index 99% rename from site/package-lock.json rename to site/game/package-lock.json index d987e28..37d68bd 100644 --- a/site/package-lock.json +++ b/site/game/package-lock.json @@ -1,5 +1,5 @@ { - "name": "Three.js_game", + "name": "site", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/site/package.json b/site/game/package.json similarity index 100% rename from site/package.json rename to site/game/package.json diff --git a/site/space.jpg b/site/game/space.jpg similarity index 100% rename from site/space.jpg rename to site/game/space.jpg diff --git a/site/space.tif b/site/game/space.tif similarity index 100% rename from site/space.tif rename to site/game/space.tif diff --git a/site/node_modules/.vite/deps/stats.js b/site/node_modules/.vite/deps/stats.js deleted file mode 100644 index 4b116ca..0000000 --- a/site/node_modules/.vite/deps/stats.js +++ /dev/null @@ -1,1586 +0,0 @@ -import { - __commonJS -} from "./chunk-BUSYA2B4.js"; - -// node_modules/stats/lib/uglify/parser.js -var require_parser = __commonJS({ - "node_modules/stats/lib/uglify/parser.js"(exports) { - var KEYWORDS = array_to_hash([ - "break", - "case", - "catch", - "const", - "continue", - "default", - "delete", - "do", - "else", - "finally", - "for", - "function", - "if", - "in", - "instanceof", - "new", - "return", - "switch", - "throw", - "try", - "typeof", - "var", - "void", - "while", - "with" - ]); - var RESERVED_WORDS = array_to_hash([ - "abstract", - "boolean", - "byte", - "char", - "class", - "debugger", - "double", - "enum", - "export", - "extends", - "final", - "float", - "goto", - "implements", - "import", - "int", - "interface", - "long", - "native", - "package", - "private", - "protected", - "public", - "short", - "static", - "super", - "synchronized", - "throws", - "transient", - "volatile" - ]); - var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([ - "return", - "new", - "delete", - "throw", - "else", - "case" - ]); - var KEYWORDS_ATOM = array_to_hash([ - "false", - "null", - "true", - "undefined" - ]); - var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^")); - var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i; - var RE_OCT_NUMBER = /^0[0-7]+$/; - var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i; - var OPERATORS = array_to_hash([ - "in", - "instanceof", - "typeof", - "new", - "void", - "delete", - "++", - "--", - "+", - "-", - "!", - "~", - "&", - "|", - "^", - "*", - "/", - "%", - ">>", - "<<", - ">>>", - "<", - ">", - "<=", - ">=", - "==", - "===", - "!=", - "!==", - "?", - "=", - "+=", - "-=", - "/=", - "*=", - "%=", - ">>=", - "<<=", - ">>>=", - "|=", - "^=", - "&=", - "&&", - "||" - ]); - var WHITESPACE_CHARS = array_to_hash(characters("  \n\r \f\v​")); - var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{}(,.;:")); - var PUNC_CHARS = array_to_hash(characters("[]{}(),;:")); - var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy")); - var UNICODE = { - letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"), - non_spacing_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"), - space_combining_mark: new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"), - connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]") - }; - function is_letter(ch) { - return UNICODE.letter.test(ch); - } - function is_digit(ch) { - ch = ch.charCodeAt(0); - return ch >= 48 && ch <= 57; - } - function is_alphanumeric_char(ch) { - return is_digit(ch) || is_letter(ch); - } - function is_unicode_combining_mark(ch) { - return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch); - } - function is_unicode_connector_punctuation(ch) { - return UNICODE.connector_punctuation.test(ch); - } - function is_identifier_start(ch) { - return ch == "$" || ch == "_" || is_letter(ch); - } - function is_identifier_char(ch) { - return is_identifier_start(ch) || is_unicode_combining_mark(ch) || is_digit(ch) || is_unicode_connector_punctuation(ch) || ch == "‌" || ch == "‍"; - } - function parse_js_number(num) { - if (RE_HEX_NUMBER.test(num)) { - return parseInt(num.substr(2), 16); - } else if (RE_OCT_NUMBER.test(num)) { - return parseInt(num.substr(1), 8); - } else if (RE_DEC_NUMBER.test(num)) { - return parseFloat(num); - } - } - function JS_Parse_Error(message, line, col, pos) { - this.message = message; - this.line = line; - this.col = col; - this.pos = pos; - try { - ({})(); - } catch (ex) { - this.stack = ex.stack; - } - ; - } - JS_Parse_Error.prototype.toString = function() { - return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")\n\n" + this.stack; - }; - function js_error(message, line, col, pos) { - throw new JS_Parse_Error(message, line, col, pos); - } - function is_token(token, type, val) { - return token.type == type && (val == null || token.value == val); - } - var EX_EOF = {}; - function tokenizer($TEXT) { - var S = { - text: $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ""), - pos: 0, - tokpos: 0, - line: 0, - tokline: 0, - col: 0, - tokcol: 0, - newline_before: false, - regex_allowed: false, - comments_before: [] - }; - function peek() { - return S.text.charAt(S.pos); - } - ; - function next(signal_eof) { - var ch = S.text.charAt(S.pos++); - if (signal_eof && !ch) - throw EX_EOF; - if (ch == "\n") { - S.newline_before = true; - ++S.line; - S.col = 0; - } else { - ++S.col; - } - return ch; - } - ; - function eof() { - return !S.peek(); - } - ; - function find(what, signal_eof) { - var pos = S.text.indexOf(what, S.pos); - if (signal_eof && pos == -1) throw EX_EOF; - return pos; - } - ; - function start_token() { - S.tokline = S.line; - S.tokcol = S.col; - S.tokpos = S.pos; - } - ; - function token(type, value, is_comment) { - S.regex_allowed = type == "operator" && !HOP(UNARY_POSTFIX, value) || type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value) || type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value); - var ret = { - type, - value, - line: S.tokline, - col: S.tokcol, - pos: S.tokpos, - nlb: S.newline_before - }; - if (!is_comment) { - ret.comments_before = S.comments_before; - S.comments_before = []; - } - S.newline_before = false; - return ret; - } - ; - function skip_whitespace() { - while (HOP(WHITESPACE_CHARS, peek())) - next(); - } - ; - function read_while(pred) { - var ret = "", ch = peek(), i = 0; - while (ch && pred(ch, i++)) { - ret += next(); - ch = peek(); - } - return ret; - } - ; - function parse_error(err) { - js_error(err, S.tokline, S.tokcol, S.tokpos); - } - ; - function read_num(prefix) { - var has_e = false, after_e = false, has_x = false, has_dot = prefix == "."; - var num = read_while(function(ch, i) { - if (ch == "x" || ch == "X") { - if (has_x) return false; - return has_x = true; - } - if (!has_x && (ch == "E" || ch == "e")) { - if (has_e) return false; - return has_e = after_e = true; - } - if (ch == "-") { - if (after_e || i == 0 && !prefix) return true; - return false; - } - if (ch == "+") return after_e; - after_e = false; - if (ch == ".") { - if (!has_dot && !has_x) - return has_dot = true; - return false; - } - return is_alphanumeric_char(ch); - }); - if (prefix) - num = prefix + num; - var valid = parse_js_number(num); - if (!isNaN(valid)) { - return token("num", valid); - } else { - parse_error("Invalid syntax: " + num); - } - } - ; - function read_escaped_char() { - var ch = next(true); - switch (ch) { - case "n": - return "\n"; - case "r": - return "\r"; - case "t": - return " "; - case "b": - return "\b"; - case "v": - return "\v"; - case "f": - return "\f"; - case "0": - return "\0"; - case "x": - return String.fromCharCode(hex_bytes(2)); - case "u": - return String.fromCharCode(hex_bytes(4)); - case "\n": - return ""; - default: - return ch; - } - } - ; - function hex_bytes(n) { - var num = 0; - for (; n > 0; --n) { - var digit = parseInt(next(true), 16); - if (isNaN(digit)) - parse_error("Invalid hex-character pattern in string"); - num = num << 4 | digit; - } - return num; - } - ; - function read_string() { - return with_eof_error("Unterminated string constant", function() { - var quote = next(), ret = ""; - for (; ; ) { - var ch = next(true); - if (ch == "\\") { - var octal_len = 0, first = null; - ch = read_while(function(ch2) { - if (ch2 >= "0" && ch2 <= "7") { - if (!first) { - first = ch2; - return ++octal_len; - } else if (first <= "3" && octal_len <= 2) return ++octal_len; - else if (first >= "4" && octal_len <= 1) return ++octal_len; - } - return false; - }); - if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8)); - else ch = read_escaped_char(); - } else if (ch == quote) break; - ret += ch; - } - return token("string", ret); - }); - } - ; - function read_line_comment() { - next(); - var i = find("\n"), ret; - if (i == -1) { - ret = S.text.substr(S.pos); - S.pos = S.text.length; - } else { - ret = S.text.substring(S.pos, i); - S.pos = i; - } - return token("comment1", ret, true); - } - ; - function read_multiline_comment() { - next(); - return with_eof_error("Unterminated multiline comment", function() { - var i = find("*/", true), text = S.text.substring(S.pos, i), tok = token("comment2", text, true); - S.pos = i + 2; - S.line += text.split("\n").length - 1; - S.newline_before = text.indexOf("\n") >= 0; - if (/^@cc_on/i.test(text)) { - warn("WARNING: at line " + S.line); - warn('*** Found "conditional comment": ' + text); - warn("*** UglifyJS DISCARDS ALL COMMENTS. This means your code might no longer work properly in Internet Explorer."); - } - return tok; - }); - } - ; - function read_name() { - var backslash = false, name = "", ch; - while ((ch = peek()) != null) { - if (!backslash) { - if (ch == "\\") backslash = true, next(); - else if (is_identifier_char(ch)) name += next(); - else break; - } else { - if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX"); - ch = read_escaped_char(); - if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier"); - name += ch; - backslash = false; - } - } - return name; - } - ; - function read_regexp() { - return with_eof_error("Unterminated regular expression", function() { - var prev_backslash = false, regexp = "", ch, in_class = false; - while (ch = next(true)) if (prev_backslash) { - regexp += "\\" + ch; - prev_backslash = false; - } else if (ch == "[") { - in_class = true; - regexp += ch; - } else if (ch == "]" && in_class) { - in_class = false; - regexp += ch; - } else if (ch == "/" && !in_class) { - break; - } else if (ch == "\\") { - prev_backslash = true; - } else { - regexp += ch; - } - var mods = read_name(); - return token("regexp", [regexp, mods]); - }); - } - ; - function read_operator(prefix) { - function grow(op) { - if (!peek()) return op; - var bigger = op + peek(); - if (HOP(OPERATORS, bigger)) { - next(); - return grow(bigger); - } else { - return op; - } - } - ; - return token("operator", grow(prefix || next())); - } - ; - function handle_slash() { - next(); - var regex_allowed = S.regex_allowed; - switch (peek()) { - case "/": - S.comments_before.push(read_line_comment()); - S.regex_allowed = regex_allowed; - return next_token(); - case "*": - S.comments_before.push(read_multiline_comment()); - S.regex_allowed = regex_allowed; - return next_token(); - } - return S.regex_allowed ? read_regexp() : read_operator("/"); - } - ; - function handle_dot() { - next(); - return is_digit(peek()) ? read_num(".") : token("punc", "."); - } - ; - function read_word() { - var word = read_name(); - return !HOP(KEYWORDS, word) ? token("name", word) : HOP(OPERATORS, word) ? token("operator", word) : HOP(KEYWORDS_ATOM, word) ? token("atom", word) : token("keyword", word); - } - ; - function with_eof_error(eof_error, cont) { - try { - return cont(); - } catch (ex) { - if (ex === EX_EOF) parse_error(eof_error); - else throw ex; - } - } - ; - function next_token(force_regexp) { - if (force_regexp) - return read_regexp(); - skip_whitespace(); - start_token(); - var ch = peek(); - if (!ch) return token("eof"); - if (is_digit(ch)) return read_num(); - if (ch == '"' || ch == "'") return read_string(); - if (HOP(PUNC_CHARS, ch)) return token("punc", next()); - if (ch == ".") return handle_dot(); - if (ch == "/") return handle_slash(); - if (HOP(OPERATOR_CHARS, ch)) return read_operator(); - if (ch == "\\" || is_identifier_start(ch)) return read_word(); - parse_error("Unexpected character '" + ch + "'"); - } - ; - next_token.context = function(nc) { - if (nc) S = nc; - return S; - }; - return next_token; - } - var UNARY_PREFIX = array_to_hash([ - "typeof", - "void", - "delete", - "--", - "++", - "!", - "~", - "-", - "+" - ]); - var UNARY_POSTFIX = array_to_hash(["--", "++"]); - var ASSIGNMENT = function(a, ret, i) { - while (i < a.length) { - ret[a[i]] = a[i].substr(0, a[i].length - 1); - i++; - } - return ret; - }( - ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="], - { "=": true }, - 0 - ); - var PRECEDENCE = function(a, ret) { - for (var i = 0, n = 1; i < a.length; ++i, ++n) { - var b = a[i]; - for (var j = 0; j < b.length; ++j) { - ret[b[j]] = n; - } - } - return ret; - }( - [ - ["||"], - ["&&"], - ["|"], - ["^"], - ["&"], - ["==", "===", "!=", "!=="], - ["<", ">", "<=", ">=", "in", "instanceof"], - [">>", "<<", ">>>"], - ["+", "-"], - ["*", "/", "%"] - ], - {} - ); - var STATEMENTS_WITH_LABELS = array_to_hash(["for", "do", "while", "switch"]); - var ATOMIC_START_TOKEN = array_to_hash(["atom", "num", "string", "regexp", "name"]); - function NodeWithToken(str, start, end) { - this.name = str; - this.start = start; - this.end = end; - } - NodeWithToken.prototype.toString = function() { - return this.name; - }; - function parse($TEXT, exigent_mode, embed_tokens) { - var S = { - input: typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT, - token: null, - prev: null, - peeked: null, - in_function: 0, - in_loop: 0, - labels: [] - }; - S.token = next(); - function is(type, value) { - return is_token(S.token, type, value); - } - ; - function peek() { - return S.peeked || (S.peeked = S.input()); - } - ; - function next() { - S.prev = S.token; - if (S.peeked) { - S.token = S.peeked; - S.peeked = null; - } else { - S.token = S.input(); - } - return S.token; - } - ; - function prev() { - return S.prev; - } - ; - function croak(msg, line, col, pos) { - var ctx = S.input.context(); - js_error( - msg, - line != null ? line : ctx.tokline, - col != null ? col : ctx.tokcol, - pos != null ? pos : ctx.tokpos - ); - } - ; - function token_error(token, msg) { - croak(msg, token.line, token.col); - } - ; - function unexpected(token) { - if (token == null) - token = S.token; - token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); - } - ; - function expect_token(type, val) { - if (is(type, val)) { - return next(); - } - token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type); - } - ; - function expect(punc) { - return expect_token("punc", punc); - } - ; - function can_insert_semicolon() { - return !exigent_mode && (S.token.nlb || is("eof") || is("punc", "}")); - } - ; - function semicolon() { - if (is("punc", ";")) next(); - else if (!can_insert_semicolon()) unexpected(); - } - ; - function as() { - var node = slice(arguments); - Object.defineProperty(node, "tok", { value: S.token }); - return node; - } - ; - function parenthesised() { - expect("("); - var ex = expression(); - expect(")"); - return ex; - } - ; - function add_tokens(str, start, end) { - return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end); - } - ; - function maybe_embed_tokens(parser) { - if (embed_tokens) return function() { - var start = S.token; - var ast = parser.apply(this, arguments); - ast[0] = add_tokens(ast[0], start, prev()); - return ast; - }; - else return parser; - } - ; - var statement = maybe_embed_tokens(function() { - if (is("operator", "/")) { - S.peeked = null; - S.token = S.input(true); - } - switch (S.token.type) { - case "num": - case "string": - case "regexp": - case "operator": - case "atom": - return simple_statement(); - case "name": - return is_token(peek(), "punc", ":") ? labeled_statement(prog1(S.token.value, next, next)) : simple_statement(); - case "punc": - switch (S.token.value) { - case "{": - return as("block", block_()); - case "[": - case "(": - return simple_statement(); - case ";": - next(); - return as("block"); - default: - unexpected(); - } - case "keyword": - switch (prog1(S.token.value, next)) { - case "break": - return break_cont("break"); - case "continue": - return break_cont("continue"); - case "debugger": - semicolon(); - return as("debugger"); - case "do": - return function(body) { - expect_token("keyword", "while"); - return as("do", prog1(parenthesised, semicolon), body); - }(in_loop(statement)); - case "for": - return for_(); - case "function": - return function_(true); - case "if": - return if_(); - case "return": - return as( - "return", - is("punc", ";") ? (next(), null) : can_insert_semicolon() ? null : prog1(expression, semicolon) - ); - case "switch": - return as("switch", parenthesised(), switch_block_()); - case "throw": - return as("throw", prog1(expression, semicolon)); - case "try": - return try_(); - case "var": - return prog1(var_, semicolon); - case "const": - return prog1(const_, semicolon); - case "while": - return as("while", parenthesised(), in_loop(statement)); - case "with": - return as("with", parenthesised(), statement()); - default: - unexpected(); - } - } - }); - function labeled_statement(label) { - S.labels.push(label); - var start = S.token, stat = statement(); - if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0])) - unexpected(start); - S.labels.pop(); - return as("label", label, stat); - } - ; - function simple_statement() { - return as("stat", prog1(expression, semicolon)); - } - ; - function break_cont(type) { - var name; - if (!can_insert_semicolon()) { - name = is("name") ? S.token.value : null; - } - if (name != null) { - next(); - if (!member(name, S.labels)) - croak("Label " + name + " without matching loop or statement"); - } else if (S.in_loop == 0) - croak(type + " not inside a loop or switch"); - semicolon(); - return as(type, name); - } - ; - function for_() { - expect("("); - var init = null; - if (!is("punc", ";")) { - init = is("keyword", "var") ? (next(), var_(true)) : expression(true, true); - if (is("operator", "in")) - return for_in(init); - } - return regular_for(init); - } - ; - function regular_for(init) { - expect(";"); - var test = is("punc", ";") ? null : expression(); - expect(";"); - var step = is("punc", ")") ? null : expression(); - expect(")"); - return as("for", init, test, step, in_loop(statement)); - } - ; - function for_in(init) { - var lhs = init[0] == "var" ? as("name", init[1][0]) : init; - next(); - var obj = expression(); - expect(")"); - return as("for-in", init, lhs, obj, in_loop(statement)); - } - ; - var function_ = maybe_embed_tokens(function(in_statement) { - var name = is("name") ? prog1(S.token.value, next) : null; - if (in_statement && !name) - unexpected(); - expect("("); - return as( - in_statement ? "defun" : "function", - name, - // arguments - function(first, a) { - while (!is("punc", ")")) { - if (first) first = false; - else expect(","); - if (!is("name")) unexpected(); - a.push(S.token.value); - next(); - } - next(); - return a; - }(true, []), - // body - function() { - ++S.in_function; - var loop = S.in_loop; - S.in_loop = 0; - var a = block_(); - --S.in_function; - S.in_loop = loop; - return a; - }() - ); - }); - function if_() { - var cond = parenthesised(), body = statement(), belse; - if (is("keyword", "else")) { - next(); - belse = statement(); - } - return as("if", cond, body, belse); - } - ; - function block_() { - expect("{"); - var a = []; - while (!is("punc", "}")) { - if (is("eof")) unexpected(); - a.push(statement()); - } - next(); - return a; - } - ; - var switch_block_ = curry(in_loop, function() { - expect("{"); - var a = [], cur = null; - while (!is("punc", "}")) { - if (is("eof")) unexpected(); - if (is("keyword", "case")) { - next(); - cur = []; - a.push([expression(), cur]); - expect(":"); - } else if (is("keyword", "default")) { - next(); - expect(":"); - cur = []; - a.push([null, cur]); - } else { - if (!cur) unexpected(); - cur.push(statement()); - } - } - next(); - return a; - }); - function try_() { - var body = block_(), bcatch, bfinally; - if (is("keyword", "catch")) { - next(); - expect("("); - if (!is("name")) - croak("Name expected"); - var name = S.token.value; - next(); - expect(")"); - bcatch = [name, block_()]; - } - if (is("keyword", "finally")) { - next(); - bfinally = block_(); - } - if (!bcatch && !bfinally) - croak("Missing catch/finally blocks"); - return as("try", body, bcatch, bfinally); - } - ; - function vardefs(no_in) { - var a = []; - for (; ; ) { - if (!is("name")) - unexpected(); - var name = S.token.value; - next(); - if (is("operator", "=")) { - next(); - a.push([name, expression(false, no_in)]); - } else { - a.push([name]); - } - if (!is("punc", ",")) - break; - next(); - } - return a; - } - ; - function var_(no_in) { - return as("var", vardefs(no_in)); - } - ; - function const_() { - return as("const", vardefs()); - } - ; - function new_() { - var newexp = expr_atom(false), args; - if (is("punc", "(")) { - next(); - args = expr_list(")"); - } else { - args = []; - } - return subscripts(as("new", newexp, args), true); - } - ; - var expr_atom = maybe_embed_tokens(function(allow_calls) { - if (is("operator", "new")) { - next(); - return new_(); - } - if (is("punc")) { - switch (S.token.value) { - case "(": - next(); - return subscripts(prog1(expression, curry(expect, ")")), allow_calls); - case "[": - next(); - return subscripts(array_(), allow_calls); - case "{": - next(); - return subscripts(object_(), allow_calls); - } - unexpected(); - } - if (is("keyword", "function")) { - next(); - return subscripts(function_(false), allow_calls); - } - if (HOP(ATOMIC_START_TOKEN, S.token.type)) { - var atom = S.token.type == "regexp" ? as("regexp", S.token.value[0], S.token.value[1]) : as(S.token.type, S.token.value); - return subscripts(prog1(atom, next), allow_calls); - } - unexpected(); - }); - function expr_list(closing, allow_trailing_comma, allow_empty) { - var first = true, a = []; - while (!is("punc", closing)) { - if (first) first = false; - else expect(","); - if (allow_trailing_comma && is("punc", closing)) break; - if (is("punc", ",") && allow_empty) { - a.push(["atom", "undefined"]); - } else { - a.push(expression(false)); - } - } - next(); - return a; - } - ; - function array_() { - return as("array", expr_list("]", !exigent_mode, true)); - } - ; - function object_() { - var first = true, a = []; - while (!is("punc", "}")) { - if (first) first = false; - else expect(","); - if (!exigent_mode && is("punc", "}")) - break; - var type = S.token.type; - var name = as_property_name(); - if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) { - a.push([as_name(), function_(false), name]); - } else { - expect(":"); - a.push([name, expression(false)]); - } - } - next(); - return as("object", a); - } - ; - function as_property_name() { - switch (S.token.type) { - case "num": - case "string": - return prog1(S.token.value, next); - } - return as_name(); - } - ; - function as_name() { - switch (S.token.type) { - case "name": - case "operator": - case "keyword": - case "atom": - return prog1(S.token.value, next); - default: - unexpected(); - } - } - ; - function subscripts(expr, allow_calls) { - if (is("punc", ".")) { - next(); - return subscripts(as("dot", expr, as_name()), allow_calls); - } - if (is("punc", "[")) { - next(); - return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls); - } - if (allow_calls && is("punc", "(")) { - next(); - return subscripts(as("call", expr, expr_list(")")), true); - } - return expr; - } - ; - function maybe_unary(allow_calls) { - if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) { - return make_unary( - "unary-prefix", - prog1(S.token.value, next), - maybe_unary(allow_calls) - ); - } - var val = expr_atom(allow_calls); - while (is("operator") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) { - val = make_unary("unary-postfix", S.token.value, val); - next(); - } - return val; - } - ; - function make_unary(tag, op, expr) { - if ((op == "++" || op == "--") && !is_assignable(expr)) - croak("Invalid use of " + op + " operator"); - return as(tag, op, expr); - } - ; - function expr_op(left, min_prec, no_in) { - var op = is("operator") ? S.token.value : null; - if (op && op == "in" && no_in) op = null; - var prec = op != null ? PRECEDENCE[op] : null; - if (prec != null && prec > min_prec) { - next(); - var right = expr_op(maybe_unary(true), prec, no_in); - return expr_op(as("binary", op, left, right), min_prec, no_in); - } - return left; - } - ; - function expr_ops(no_in) { - return expr_op(maybe_unary(true), 0, no_in); - } - ; - function maybe_conditional(no_in) { - var expr = expr_ops(no_in); - if (is("operator", "?")) { - next(); - var yes = expression(false); - expect(":"); - return as("conditional", expr, yes, expression(false, no_in)); - } - return expr; - } - ; - function is_assignable(expr) { - if (!exigent_mode) return true; - switch (expr[0]) { - case "dot": - case "sub": - case "new": - case "call": - return true; - case "name": - return expr[1] != "this"; - } - } - ; - function maybe_assign(no_in) { - var left = maybe_conditional(no_in), val = S.token.value; - if (is("operator") && HOP(ASSIGNMENT, val)) { - if (is_assignable(left)) { - next(); - return as("assign", ASSIGNMENT[val], left, maybe_assign(no_in)); - } - croak("Invalid assignment"); - } - return left; - } - ; - var expression = maybe_embed_tokens(function(commas, no_in) { - if (arguments.length == 0) - commas = true; - var expr = maybe_assign(no_in); - if (commas && is("punc", ",")) { - next(); - return as("seq", expr, expression(true, no_in)); - } - return expr; - }); - function in_loop(cont) { - try { - ++S.in_loop; - return cont(); - } finally { - --S.in_loop; - } - } - ; - return as("toplevel", function(a) { - while (!is("eof")) - a.push(statement()); - return a; - }([])); - } - function curry(f) { - var args = slice(arguments, 1); - return function() { - return f.apply(this, args.concat(slice(arguments))); - }; - } - function prog1(ret) { - if (ret instanceof Function) - ret = ret(); - for (var i = 1, n = arguments.length; --n > 0; ++i) - arguments[i](); - return ret; - } - function array_to_hash(a) { - var ret = {}; - for (var i = 0; i < a.length; ++i) - ret[a[i]] = true; - return ret; - } - function slice(a, start) { - return Array.prototype.slice.call(a, start == null ? 0 : start); - } - function characters(str) { - return str.split(""); - } - function member(name, array) { - for (var i = array.length; --i >= 0; ) - if (array[i] === name) - return true; - return false; - } - function HOP(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - } - var warn = function() { - }; - exports.tokenizer = tokenizer; - exports.parse = parse; - exports.slice = slice; - exports.curry = curry; - exports.member = member; - exports.array_to_hash = array_to_hash; - exports.PRECEDENCE = PRECEDENCE; - exports.KEYWORDS_ATOM = KEYWORDS_ATOM; - exports.RESERVED_WORDS = RESERVED_WORDS; - exports.KEYWORDS = KEYWORDS; - exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN; - exports.OPERATORS = OPERATORS; - exports.is_alphanumeric_char = is_alphanumeric_char; - exports.set_logger = function(logger) { - warn = logger; - }; - } -}); - -// browser-external:util -var require_util = __commonJS({ - "browser-external:util"(exports, module) { - module.exports = Object.create(new Proxy({}, { - get(_, key) { - if (key !== "__esModule" && key !== "__proto__" && key !== "constructor" && key !== "splice") { - console.warn(`Module "util" has been externalized for browser compatibility. Cannot access "util.${key}" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`); - } - } - })); - } -}); - -// node_modules/stats/lib/parser.js -var require_parser2 = __commonJS({ - "node_modules/stats/lib/parser.js"(exports, module) { - var parse = require_parser().parse; - var sys = require_util(); - module.exports = function(str, options) { - var options = options || {}, stats = { - loc: str.split("\n").length, - bytes: Buffer.byteLength(str), - statements: 0, - assignments: 0, - functions: 0, - stringBytes: 0, - arrayLiterals: 0, - objectLiterals: 0, - objectsCreated: 0, - regexpLiterals: 0, - strings: 0, - numbers: 0, - throws: 0 - }; - if ("#" == str[0]) str = str.slice(str.indexOf("\n")); - function visit(node) { - if (!node) return; - var name = node[0]; - if ("string" != typeof name) { - for (var i = 0, len = node.length; i < len; ++i) { - visit(node[i]); - } - return; - } - if ("name" == name) name = "ident"; - if (!visit[name]) throw new Error('no visitor implemented for "' + name + '"'); - visit[name](node); - } - visit["toplevel"] = function(node) { - visit(node[1]); - }; - visit["seq"] = function(node) { - visit(node[1]); - visit(node[2]); - }; - visit["for-in"] = function(node) { - visit(node[1]); - visit(node[2]); - visit(node[3]); - visit(node[4]); - }; - visit["switch"] = function(node) { - ++stats.statements; - visit(node[1]); - node[2].forEach(function(node2) { - visit(node2[1]); - visit(node2[2]); - }); - }; - visit["with"] = function(node) { - ++stats.statements; - visit(node[1]); - visit(node[2]); - }; - visit["try"] = function(node) { - ++stats.statements; - visit(node[1]); - node[2] && visit(node[2][1]); - }; - visit["conditional"] = function(node) { - visit(node[1]); - visit(node[2]); - visit(node[3]); - }; - visit["break"] = function(node) { - ++stats.statements; - }; - visit["array"] = function(node) { - ++stats.arrayLiterals; - visit(node[1]); - }; - visit["object"] = function(node) { - ++stats.objectLiterals; - node[1].forEach(function(pair) { - visit(pair[1]); - }); - }; - visit["var"] = visit["const"] = function(node) { - node[1].forEach(function(node2) { - if (node2[1]) ++stats.assignments; - visit(node2[1]); - }); - ++stats.statements; - }; - visit["regexp"] = function(node) { - ++stats.regexpLiterals; - }; - visit["num"] = function(node) { - ++stats.numbers; - }; - visit["do"] = function(node) { - ++stats.statements; - visit(node[1]); - visit(node[2]); - }; - visit["label"] = function(node) { - visit(node[2]); - }; - visit["atom"] = function(node) { - }; - visit["unary-prefix"] = function(node) { - }; - visit["unary-postfix"] = function(node) { - }; - visit["continue"] = function(node) { - }; - visit["return"] = function(node) { - }; - visit["binary"] = function(node) { - }; - visit["ident"] = function(node) { - }; - visit["new"] = function(node) { - ++stats.objectsCreated; - visit(node[1]); - visit(node[2]); - }; - visit["throw"] = function(node) { - ++stats.throws; - visit(node[1]); - }; - visit["for"] = function(node) { - visit(node[1]); - visit(node[2]); - visit(node[3]); - visit(node[4]); - }; - visit["sub"] = function(node) { - visit(node[1]); - visit(node[2]); - }; - visit["string"] = function(node) { - ++stats.strings; - stats.stringBytes += Buffer.byteLength(node[1]); - }; - visit["dot"] = function(node) { - visit(node[1]); - }; - visit["block"] = function(node) { - visit(node[1]); - }; - visit["while"] = function(node) { - ++stats.statements; - visit(node[2]); - }; - visit["if"] = function(node) { - ++stats.statements; - visit(node[1]); - visit(node[2]); - visit(node[3]); - }; - visit["defun"] = function(node) { - ++stats.functions; - ++stats.statements; - visit(node[3]); - }; - visit["function"] = function(node) { - ++stats.functions; - visit(node[3]); - }; - visit["call"] = function(node) { - visit(node[1]); - visit(node[2]); - }; - visit["assign"] = function(node) { - ++stats.assignments; - visit(node[3]); - }; - visit["stat"] = function(node) { - ++stats.statements; - visit(node[1]); - }; - try { - visit(parse(str)); - } catch (err) { - if ("JS_Parse_Error" != err.constructor.name) throw err; - var line = str.split("\n")[err.line]; - err = new SyntaxError(err.message + " on line " + err.line + ":" + err.col + ":\n " + sys.inspect(line)); - if (!options.ignoreParseErrors) throw err; - } - return stats; - }; - } -}); - -// browser-external:fs -var require_fs = __commonJS({ - "browser-external:fs"(exports, module) { - module.exports = Object.create(new Proxy({}, { - get(_, key) { - if (key !== "__esModule" && key !== "__proto__" && key !== "constructor" && key !== "splice") { - console.warn(`Module "fs" has been externalized for browser compatibility. Cannot access "fs.${key}" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`); - } - } - })); - } -}); - -// browser-external:path -var require_path = __commonJS({ - "browser-external:path"(exports, module) { - module.exports = Object.create(new Proxy({}, { - get(_, key) { - if (key !== "__esModule" && key !== "__proto__" && key !== "constructor" && key !== "splice") { - console.warn(`Module "path" has been externalized for browser compatibility. Cannot access "path.${key}" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`); - } - } - })); - } -}); - -// node_modules/stats/lib/find.js -var require_find = __commonJS({ - "node_modules/stats/lib/find.js"(exports, module) { - var fs = require_fs(); - var path = require_path(); - var join = path.join; - var extname = path.extname; - var noop = function() { - }; - module.exports = function(paths, fn) { - var pending = paths.length, ret = []; - function find(path2) { - fs.stat(path2, function(err, stat) { - if (err) { - fn(err); - fn = noop; - return; - } - if (stat.isFile() && isJavaScript(path2)) { - ret.push(path2); - --pending || fn(null, ret); - } else { - fs.readdir(path2, function(err2, files) { - if (err2) { - fn(err2); - fn = noop; - return; - } - files.forEach(function(file) { - file = join(path2, file); - if (isJavaScript(file)) { - ret.push(file); - } else { - ++pending; - fs.stat(file, function(err3, stat2) { - if (err3) return; - if (!stat2.isDirectory()) return --pending || fn(null, ret); - find(file); - }); - } - }); - --pending || fn(null, ret); - }); - } - }); - } - paths.forEach(find); - }; - function isJavaScript(file) { - return ".js" == extname(file); - } - } -}); - -// node_modules/stats/lib/formats/json.js -var require_json = __commonJS({ - "node_modules/stats/lib/formats/json.js"(exports, module) { - module.exports = function(stats) { - process.stdout.write(JSON.stringify(stats)); - }; - } -}); - -// node_modules/stats/lib/formats/text.js -var require_text = __commonJS({ - "node_modules/stats/lib/formats/text.js"(exports, module) { - exports = module.exports = function(files) { - Object.keys(files).forEach(function(file) { - var stats = files[file]; - console.log("\n \x1B[90m%s:\x1B[0m", file); - Object.keys(stats).forEach(function(name) { - var val = stats[name]; - if (exports[name]) val = exports[name](val); - console.log(" \x1B[90m%s: \x1B[36m%s\x1B[0m", name, val); - }); - }); - console.log(); - }; - exports.bytes = exports.stringBytes = function(n) { - var kb = 1024, mb = kb * 1024; - if (n < kb) return n + " bytes"; - if (n < mb) return (n / kb).toFixed(2) + " kb"; - return (n / mb).toFixed(2) + " mb"; - }; - } -}); - -// node_modules/stats/lib/formats/index.js -var require_formats = __commonJS({ - "node_modules/stats/lib/formats/index.js"(exports) { - exports.json = require_json(); - exports.text = require_text(); - } -}); - -// node_modules/stats/lib/stats.js -var require_stats = __commonJS({ - "node_modules/stats/lib/stats.js"(exports) { - exports.version = "0.0.6"; - exports.parse = require_parser2(); - exports.find = require_find(); - exports.formats = require_formats(); - } -}); - -// node_modules/stats/index.js -var require_stats2 = __commonJS({ - "node_modules/stats/index.js"(exports, module) { - module.exports = require_stats(); - } -}); -export default require_stats2(); -/*! Bundled license information: - -stats/lib/parser.js: - (*! - * stats - parser - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) - -stats/lib/find.js: - (*! - * stats - find - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) - -stats/lib/formats/json.js: - (*! - * stats - formats - json - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) - -stats/lib/formats/text.js: - (*! - * stats - formats - text - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) - -stats/lib/formats/index.js: - (*! - * stats - formats - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) - -stats/lib/stats.js: - (*! - * stats - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - *) -*/ -//# sourceMappingURL=stats.js.map diff --git a/site/node_modules/.vite/deps/stats.js.map b/site/node_modules/.vite/deps/stats.js.map deleted file mode 100644 index e2ea776..0000000 --- a/site/node_modules/.vite/deps/stats.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../stats/lib/uglify/parser.js", "browser-external:util", "../../stats/lib/parser.js", "browser-external:fs", "browser-external:path", "../../stats/lib/find.js", "../../stats/lib/formats/json.js", "../../stats/lib/formats/text.js", "../../stats/lib/formats/index.js", "../../stats/lib/stats.js", "../../stats/index.js"], - "sourcesContent": ["/***********************************************************************\n\n A JavaScript tokenizer / parser / beautifier / compressor.\n\n This version is suitable for Node.js. With minimal changes (the\n exports stuff) it should work on any JS platform.\n\n This file contains the tokenizer/parser. It is a port to JavaScript\n of parse-js [1], a JavaScript parser library written in Common Lisp\n by Marijn Haverbeke. Thank you Marijn!\n\n [1] http://marijn.haverbeke.nl/parse-js/\n\n Exported functions:\n\n - tokenizer(code) -- returns a function. Call the returned\n function to fetch the next token.\n\n - parse(code) -- returns an AST of the given JavaScript code.\n\n -------------------------------- (C) ---------------------------------\n\n Author: Mihai Bazon\n \n http://mihai.bazon.net/blog\n\n Distributed under the BSD license:\n\n Copyright 2010 (c) Mihai Bazon \n Based on parse-js (http://marijn.haverbeke.nl/parse-js/).\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n * Redistributions of source code must retain the above\n copyright notice, this list of conditions and the following\n disclaimer.\n\n * Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the following\n disclaimer in the documentation and/or other materials\n provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY\n EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,\n OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR\n TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF\n THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n SUCH DAMAGE.\n\n ***********************************************************************/\n\n/* -----[ Tokenizer (constants) ]----- */\n\nvar KEYWORDS = array_to_hash([\n \"break\",\n \"case\",\n \"catch\",\n \"const\",\n \"continue\",\n \"default\",\n \"delete\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"in\",\n \"instanceof\",\n \"new\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"typeof\",\n \"var\",\n \"void\",\n \"while\",\n \"with\"\n]);\n\nvar RESERVED_WORDS = array_to_hash([\n \"abstract\",\n \"boolean\",\n \"byte\",\n \"char\",\n \"class\",\n \"debugger\",\n \"double\",\n \"enum\",\n \"export\",\n \"extends\",\n \"final\",\n \"float\",\n \"goto\",\n \"implements\",\n \"import\",\n \"int\",\n \"interface\",\n \"long\",\n \"native\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"short\",\n \"static\",\n \"super\",\n \"synchronized\",\n \"throws\",\n \"transient\",\n \"volatile\"\n]);\n\nvar KEYWORDS_BEFORE_EXPRESSION = array_to_hash([\n \"return\",\n \"new\",\n \"delete\",\n \"throw\",\n \"else\",\n \"case\"\n]);\n\nvar KEYWORDS_ATOM = array_to_hash([\n \"false\",\n \"null\",\n \"true\",\n \"undefined\"\n]);\n\nvar OPERATOR_CHARS = array_to_hash(characters(\"+-*&%=<>!?|~^\"));\n\nvar RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;\nvar RE_OCT_NUMBER = /^0[0-7]+$/;\nvar RE_DEC_NUMBER = /^\\d*\\.?\\d*(?:e[+-]?\\d*(?:\\d\\.?|\\.?\\d)\\d*)?$/i;\n\nvar OPERATORS = array_to_hash([\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"new\",\n \"void\",\n \"delete\",\n \"++\",\n \"--\",\n \"+\",\n \"-\",\n \"!\",\n \"~\",\n \"&\",\n \"|\",\n \"^\",\n \"*\",\n \"/\",\n \"%\",\n \">>\",\n \"<<\",\n \">>>\",\n \"<\",\n \">\",\n \"<=\",\n \">=\",\n \"==\",\n \"===\",\n \"!=\",\n \"!==\",\n \"?\",\n \"=\",\n \"+=\",\n \"-=\",\n \"/=\",\n \"*=\",\n \"%=\",\n \">>=\",\n \"<<=\",\n \">>>=\",\n \"|=\",\n \"^=\",\n \"&=\",\n \"&&\",\n \"||\"\n]);\n\nvar WHITESPACE_CHARS = array_to_hash(characters(\" \\u00a0\\n\\r\\t\\f\\v\\u200b\"));\n\nvar PUNC_BEFORE_EXPRESSION = array_to_hash(characters(\"[{}(,.;:\"));\n\nvar PUNC_CHARS = array_to_hash(characters(\"[]{}(),;:\"));\n\nvar REGEXP_MODIFIERS = array_to_hash(characters(\"gmsiy\"));\n\n/* -----[ Tokenizer ]----- */\n\n// regexps adapted from http://xregexp.com/plugins/#unicode\nvar UNICODE = {\n letter: new RegExp(\"[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u0523\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0621-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971\\\\u0972\\\\u097B-\\\\u097F\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C33\\\\u0C35-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D28\\\\u0D2A-\\\\u0D39\\\\u0D3D\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC\\\\u0EDD\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8B\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10D0-\\\\u10FA\\\\u10FC\\\\u1100-\\\\u1159\\\\u115F-\\\\u11A2\\\\u11A8-\\\\u11F9\\\\u1200-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u1676\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u1900-\\\\u191C\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19A9\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u2094\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2183\\\\u2184\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2C6F\\\\u2C71-\\\\u2C7D\\\\u2C80-\\\\u2CE4\\\\u2D00-\\\\u2D25\\\\u2D30-\\\\u2D65\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005\\\\u3006\\\\u3031-\\\\u3035\\\\u303B\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31B7\\\\u31F0-\\\\u31FF\\\\u3400\\\\u4DB5\\\\u4E00\\\\u9FC3\\\\uA000-\\\\uA48C\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA65F\\\\uA662-\\\\uA66E\\\\uA67F-\\\\uA697\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B\\\\uA78C\\\\uA7FB-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAC00\\\\uD7A3\\\\uF900-\\\\uFA2D\\\\uFA30-\\\\uFA6A\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n non_spacing_mark: new RegExp(\"[\\\\u0300-\\\\u036F\\\\u0483-\\\\u0487\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u0610-\\\\u061A\\\\u064B-\\\\u065E\\\\u0670\\\\u06D6-\\\\u06DC\\\\u06DF-\\\\u06E4\\\\u06E7\\\\u06E8\\\\u06EA-\\\\u06ED\\\\u0711\\\\u0730-\\\\u074A\\\\u07A6-\\\\u07B0\\\\u07EB-\\\\u07F3\\\\u0816-\\\\u0819\\\\u081B-\\\\u0823\\\\u0825-\\\\u0827\\\\u0829-\\\\u082D\\\\u0900-\\\\u0902\\\\u093C\\\\u0941-\\\\u0948\\\\u094D\\\\u0951-\\\\u0955\\\\u0962\\\\u0963\\\\u0981\\\\u09BC\\\\u09C1-\\\\u09C4\\\\u09CD\\\\u09E2\\\\u09E3\\\\u0A01\\\\u0A02\\\\u0A3C\\\\u0A41\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A70\\\\u0A71\\\\u0A75\\\\u0A81\\\\u0A82\\\\u0ABC\\\\u0AC1-\\\\u0AC5\\\\u0AC7\\\\u0AC8\\\\u0ACD\\\\u0AE2\\\\u0AE3\\\\u0B01\\\\u0B3C\\\\u0B3F\\\\u0B41-\\\\u0B44\\\\u0B4D\\\\u0B56\\\\u0B62\\\\u0B63\\\\u0B82\\\\u0BC0\\\\u0BCD\\\\u0C3E-\\\\u0C40\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C62\\\\u0C63\\\\u0CBC\\\\u0CBF\\\\u0CC6\\\\u0CCC\\\\u0CCD\\\\u0CE2\\\\u0CE3\\\\u0D41-\\\\u0D44\\\\u0D4D\\\\u0D62\\\\u0D63\\\\u0DCA\\\\u0DD2-\\\\u0DD4\\\\u0DD6\\\\u0E31\\\\u0E34-\\\\u0E3A\\\\u0E47-\\\\u0E4E\\\\u0EB1\\\\u0EB4-\\\\u0EB9\\\\u0EBB\\\\u0EBC\\\\u0EC8-\\\\u0ECD\\\\u0F18\\\\u0F19\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F71-\\\\u0F7E\\\\u0F80-\\\\u0F84\\\\u0F86\\\\u0F87\\\\u0F90-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u102D-\\\\u1030\\\\u1032-\\\\u1037\\\\u1039\\\\u103A\\\\u103D\\\\u103E\\\\u1058\\\\u1059\\\\u105E-\\\\u1060\\\\u1071-\\\\u1074\\\\u1082\\\\u1085\\\\u1086\\\\u108D\\\\u109D\\\\u135F\\\\u1712-\\\\u1714\\\\u1732-\\\\u1734\\\\u1752\\\\u1753\\\\u1772\\\\u1773\\\\u17B7-\\\\u17BD\\\\u17C6\\\\u17C9-\\\\u17D3\\\\u17DD\\\\u180B-\\\\u180D\\\\u18A9\\\\u1920-\\\\u1922\\\\u1927\\\\u1928\\\\u1932\\\\u1939-\\\\u193B\\\\u1A17\\\\u1A18\\\\u1A56\\\\u1A58-\\\\u1A5E\\\\u1A60\\\\u1A62\\\\u1A65-\\\\u1A6C\\\\u1A73-\\\\u1A7C\\\\u1A7F\\\\u1B00-\\\\u1B03\\\\u1B34\\\\u1B36-\\\\u1B3A\\\\u1B3C\\\\u1B42\\\\u1B6B-\\\\u1B73\\\\u1B80\\\\u1B81\\\\u1BA2-\\\\u1BA5\\\\u1BA8\\\\u1BA9\\\\u1C2C-\\\\u1C33\\\\u1C36\\\\u1C37\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CE0\\\\u1CE2-\\\\u1CE8\\\\u1CED\\\\u1DC0-\\\\u1DE6\\\\u1DFD-\\\\u1DFF\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2CEF-\\\\u2CF1\\\\u2DE0-\\\\u2DFF\\\\u302A-\\\\u302F\\\\u3099\\\\u309A\\\\uA66F\\\\uA67C\\\\uA67D\\\\uA6F0\\\\uA6F1\\\\uA802\\\\uA806\\\\uA80B\\\\uA825\\\\uA826\\\\uA8C4\\\\uA8E0-\\\\uA8F1\\\\uA926-\\\\uA92D\\\\uA947-\\\\uA951\\\\uA980-\\\\uA982\\\\uA9B3\\\\uA9B6-\\\\uA9B9\\\\uA9BC\\\\uAA29-\\\\uAA2E\\\\uAA31\\\\uAA32\\\\uAA35\\\\uAA36\\\\uAA43\\\\uAA4C\\\\uAAB0\\\\uAAB2-\\\\uAAB4\\\\uAAB7\\\\uAAB8\\\\uAABE\\\\uAABF\\\\uAAC1\\\\uABE5\\\\uABE8\\\\uABED\\\\uFB1E\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE26]\"),\n space_combining_mark: new RegExp(\"[\\\\u0903\\\\u093E-\\\\u0940\\\\u0949-\\\\u094C\\\\u094E\\\\u0982\\\\u0983\\\\u09BE-\\\\u09C0\\\\u09C7\\\\u09C8\\\\u09CB\\\\u09CC\\\\u09D7\\\\u0A03\\\\u0A3E-\\\\u0A40\\\\u0A83\\\\u0ABE-\\\\u0AC0\\\\u0AC9\\\\u0ACB\\\\u0ACC\\\\u0B02\\\\u0B03\\\\u0B3E\\\\u0B40\\\\u0B47\\\\u0B48\\\\u0B4B\\\\u0B4C\\\\u0B57\\\\u0BBE\\\\u0BBF\\\\u0BC1\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCC\\\\u0BD7\\\\u0C01-\\\\u0C03\\\\u0C41-\\\\u0C44\\\\u0C82\\\\u0C83\\\\u0CBE\\\\u0CC0-\\\\u0CC4\\\\u0CC7\\\\u0CC8\\\\u0CCA\\\\u0CCB\\\\u0CD5\\\\u0CD6\\\\u0D02\\\\u0D03\\\\u0D3E-\\\\u0D40\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4C\\\\u0D57\\\\u0D82\\\\u0D83\\\\u0DCF-\\\\u0DD1\\\\u0DD8-\\\\u0DDF\\\\u0DF2\\\\u0DF3\\\\u0F3E\\\\u0F3F\\\\u0F7F\\\\u102B\\\\u102C\\\\u1031\\\\u1038\\\\u103B\\\\u103C\\\\u1056\\\\u1057\\\\u1062-\\\\u1064\\\\u1067-\\\\u106D\\\\u1083\\\\u1084\\\\u1087-\\\\u108C\\\\u108F\\\\u109A-\\\\u109C\\\\u17B6\\\\u17BE-\\\\u17C5\\\\u17C7\\\\u17C8\\\\u1923-\\\\u1926\\\\u1929-\\\\u192B\\\\u1930\\\\u1931\\\\u1933-\\\\u1938\\\\u19B0-\\\\u19C0\\\\u19C8\\\\u19C9\\\\u1A19-\\\\u1A1B\\\\u1A55\\\\u1A57\\\\u1A61\\\\u1A63\\\\u1A64\\\\u1A6D-\\\\u1A72\\\\u1B04\\\\u1B35\\\\u1B3B\\\\u1B3D-\\\\u1B41\\\\u1B43\\\\u1B44\\\\u1B82\\\\u1BA1\\\\u1BA6\\\\u1BA7\\\\u1BAA\\\\u1C24-\\\\u1C2B\\\\u1C34\\\\u1C35\\\\u1CE1\\\\u1CF2\\\\uA823\\\\uA824\\\\uA827\\\\uA880\\\\uA881\\\\uA8B4-\\\\uA8C3\\\\uA952\\\\uA953\\\\uA983\\\\uA9B4\\\\uA9B5\\\\uA9BA\\\\uA9BB\\\\uA9BD-\\\\uA9C0\\\\uAA2F\\\\uAA30\\\\uAA33\\\\uAA34\\\\uAA4D\\\\uAA7B\\\\uABE3\\\\uABE4\\\\uABE6\\\\uABE7\\\\uABE9\\\\uABEA\\\\uABEC]\"),\n connector_punctuation: new RegExp(\"[\\\\u005F\\\\u203F\\\\u2040\\\\u2054\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFF3F]\")\n};\n\nfunction is_letter(ch) {\n return UNICODE.letter.test(ch);\n};\n\nfunction is_digit(ch) {\n ch = ch.charCodeAt(0);\n return ch >= 48 && ch <= 57; //XXX: find out if \"UnicodeDigit\" means something else than 0..9\n};\n\nfunction is_alphanumeric_char(ch) {\n return is_digit(ch) || is_letter(ch);\n};\n\nfunction is_unicode_combining_mark(ch) {\n return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);\n};\n\nfunction is_unicode_connector_punctuation(ch) {\n return UNICODE.connector_punctuation.test(ch);\n};\n\nfunction is_identifier_start(ch) {\n return ch == \"$\" || ch == \"_\" || is_letter(ch);\n};\n\nfunction is_identifier_char(ch) {\n return is_identifier_start(ch)\n || is_unicode_combining_mark(ch)\n || is_digit(ch)\n || is_unicode_connector_punctuation(ch)\n || ch == \"\\u200c\" // zero-width non-joiner \n || ch == \"\\u200d\" // zero-width joiner (in my ECMA-262 PDF, this is also 200c)\n ;\n};\n\nfunction parse_js_number(num) {\n if (RE_HEX_NUMBER.test(num)) {\n return parseInt(num.substr(2), 16);\n } else if (RE_OCT_NUMBER.test(num)) {\n return parseInt(num.substr(1), 8);\n } else if (RE_DEC_NUMBER.test(num)) {\n return parseFloat(num);\n }\n};\n\nfunction JS_Parse_Error(message, line, col, pos) {\n this.message = message;\n this.line = line;\n this.col = col;\n this.pos = pos;\n try {\n ({})();\n } catch(ex) {\n this.stack = ex.stack;\n };\n};\n\nJS_Parse_Error.prototype.toString = function() {\n return this.message + \" (line: \" + this.line + \", col: \" + this.col + \", pos: \" + this.pos + \")\" + \"\\n\\n\" + this.stack;\n};\n\nfunction js_error(message, line, col, pos) {\n throw new JS_Parse_Error(message, line, col, pos);\n};\n\nfunction is_token(token, type, val) {\n return token.type == type && (val == null || token.value == val);\n};\n\nvar EX_EOF = {};\n\nfunction tokenizer($TEXT) {\n\n var S = {\n text : $TEXT.replace(/\\r\\n?|[\\n\\u2028\\u2029]/g, \"\\n\").replace(/^\\uFEFF/, ''),\n pos : 0,\n tokpos : 0,\n line : 0,\n tokline : 0,\n col : 0,\n tokcol : 0,\n newline_before : false,\n regex_allowed : false,\n comments_before : []\n };\n\n function peek() { return S.text.charAt(S.pos); };\n\n function next(signal_eof) {\n var ch = S.text.charAt(S.pos++);\n if (signal_eof && !ch)\n throw EX_EOF;\n if (ch == \"\\n\") {\n S.newline_before = true;\n ++S.line;\n S.col = 0;\n } else {\n ++S.col;\n }\n return ch;\n };\n\n function eof() {\n return !S.peek();\n };\n\n function find(what, signal_eof) {\n var pos = S.text.indexOf(what, S.pos);\n if (signal_eof && pos == -1) throw EX_EOF;\n return pos;\n };\n\n function start_token() {\n S.tokline = S.line;\n S.tokcol = S.col;\n S.tokpos = S.pos;\n };\n\n function token(type, value, is_comment) {\n S.regex_allowed = ((type == \"operator\" && !HOP(UNARY_POSTFIX, value)) ||\n (type == \"keyword\" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) ||\n (type == \"punc\" && HOP(PUNC_BEFORE_EXPRESSION, value)));\n var ret = {\n type : type,\n value : value,\n line : S.tokline,\n col : S.tokcol,\n pos : S.tokpos,\n nlb : S.newline_before\n };\n if (!is_comment) {\n ret.comments_before = S.comments_before;\n S.comments_before = [];\n }\n S.newline_before = false;\n return ret;\n };\n\n function skip_whitespace() {\n while (HOP(WHITESPACE_CHARS, peek()))\n next();\n };\n\n function read_while(pred) {\n var ret = \"\", ch = peek(), i = 0;\n while (ch && pred(ch, i++)) {\n ret += next();\n ch = peek();\n }\n return ret;\n };\n\n function parse_error(err) {\n js_error(err, S.tokline, S.tokcol, S.tokpos);\n };\n\n function read_num(prefix) {\n var has_e = false, after_e = false, has_x = false, has_dot = prefix == \".\";\n var num = read_while(function(ch, i){\n if (ch == \"x\" || ch == \"X\") {\n if (has_x) return false;\n return has_x = true;\n }\n if (!has_x && (ch == \"E\" || ch == \"e\")) {\n if (has_e) return false;\n return has_e = after_e = true;\n }\n if (ch == \"-\") {\n if (after_e || (i == 0 && !prefix)) return true;\n return false;\n }\n if (ch == \"+\") return after_e;\n after_e = false;\n if (ch == \".\") {\n if (!has_dot && !has_x)\n return has_dot = true;\n return false;\n }\n return is_alphanumeric_char(ch);\n });\n if (prefix)\n num = prefix + num;\n var valid = parse_js_number(num);\n if (!isNaN(valid)) {\n return token(\"num\", valid);\n } else {\n parse_error(\"Invalid syntax: \" + num);\n }\n };\n\n function read_escaped_char() {\n var ch = next(true);\n switch (ch) {\n case \"n\" : return \"\\n\";\n case \"r\" : return \"\\r\";\n case \"t\" : return \"\\t\";\n case \"b\" : return \"\\b\";\n case \"v\" : return \"\\v\";\n case \"f\" : return \"\\f\";\n case \"0\" : return \"\\0\";\n case \"x\" : return String.fromCharCode(hex_bytes(2));\n case \"u\" : return String.fromCharCode(hex_bytes(4));\n case \"\\n\": return \"\";\n default : return ch;\n }\n };\n\n function hex_bytes(n) {\n var num = 0;\n for (; n > 0; --n) {\n var digit = parseInt(next(true), 16);\n if (isNaN(digit))\n parse_error(\"Invalid hex-character pattern in string\");\n num = (num << 4) | digit;\n }\n return num;\n };\n\n function read_string() {\n return with_eof_error(\"Unterminated string constant\", function(){\n var quote = next(), ret = \"\";\n for (;;) {\n var ch = next(true);\n if (ch == \"\\\\\") {\n // read OctalEscapeSequence (XXX: deprecated if \"strict mode\")\n // https://github.com/mishoo/UglifyJS/issues/178\n var octal_len = 0, first = null;\n ch = read_while(function(ch){\n if (ch >= \"0\" && ch <= \"7\") {\n if (!first) {\n first = ch;\n return ++octal_len;\n }\n else if (first <= \"3\" && octal_len <= 2) return ++octal_len;\n else if (first >= \"4\" && octal_len <= 1) return ++octal_len;\n }\n return false;\n });\n if (octal_len > 0) ch = String.fromCharCode(parseInt(ch, 8));\n else ch = read_escaped_char();\n }\n else if (ch == quote) break;\n ret += ch;\n }\n return token(\"string\", ret);\n });\n };\n\n function read_line_comment() {\n next();\n var i = find(\"\\n\"), ret;\n if (i == -1) {\n ret = S.text.substr(S.pos);\n S.pos = S.text.length;\n } else {\n ret = S.text.substring(S.pos, i);\n S.pos = i;\n }\n return token(\"comment1\", ret, true);\n };\n\n function read_multiline_comment() {\n next();\n return with_eof_error(\"Unterminated multiline comment\", function(){\n var i = find(\"*/\", true),\n text = S.text.substring(S.pos, i),\n tok = token(\"comment2\", text, true);\n S.pos = i + 2;\n S.line += text.split(\"\\n\").length - 1;\n S.newline_before = text.indexOf(\"\\n\") >= 0;\n\n // https://github.com/mishoo/UglifyJS/issues/#issue/100\n if (/^@cc_on/i.test(text)) {\n warn(\"WARNING: at line \" + S.line);\n warn(\"*** Found \\\"conditional comment\\\": \" + text);\n warn(\"*** UglifyJS DISCARDS ALL COMMENTS. This means your code might no longer work properly in Internet Explorer.\");\n }\n\n return tok;\n });\n };\n\n function read_name() {\n var backslash = false, name = \"\", ch;\n while ((ch = peek()) != null) {\n if (!backslash) {\n if (ch == \"\\\\\") backslash = true, next();\n else if (is_identifier_char(ch)) name += next();\n else break;\n }\n else {\n if (ch != \"u\") parse_error(\"Expecting UnicodeEscapeSequence -- uXXXX\");\n ch = read_escaped_char();\n if (!is_identifier_char(ch)) parse_error(\"Unicode char: \" + ch.charCodeAt(0) + \" is not valid in identifier\");\n name += ch;\n backslash = false;\n }\n }\n return name;\n };\n\n function read_regexp() {\n return with_eof_error(\"Unterminated regular expression\", function(){\n var prev_backslash = false, regexp = \"\", ch, in_class = false;\n while ((ch = next(true))) if (prev_backslash) {\n regexp += \"\\\\\" + ch;\n prev_backslash = false;\n } else if (ch == \"[\") {\n in_class = true;\n regexp += ch;\n } else if (ch == \"]\" && in_class) {\n in_class = false;\n regexp += ch;\n } else if (ch == \"/\" && !in_class) {\n break;\n } else if (ch == \"\\\\\") {\n prev_backslash = true;\n } else {\n regexp += ch;\n }\n var mods = read_name();\n return token(\"regexp\", [ regexp, mods ]);\n });\n };\n\n function read_operator(prefix) {\n function grow(op) {\n if (!peek()) return op;\n var bigger = op + peek();\n if (HOP(OPERATORS, bigger)) {\n next();\n return grow(bigger);\n } else {\n return op;\n }\n };\n return token(\"operator\", grow(prefix || next()));\n };\n\n function handle_slash() {\n next();\n var regex_allowed = S.regex_allowed;\n switch (peek()) {\n case \"/\":\n S.comments_before.push(read_line_comment());\n S.regex_allowed = regex_allowed;\n return next_token();\n case \"*\":\n S.comments_before.push(read_multiline_comment());\n S.regex_allowed = regex_allowed;\n return next_token();\n }\n return S.regex_allowed ? read_regexp() : read_operator(\"/\");\n };\n\n function handle_dot() {\n next();\n return is_digit(peek())\n ? read_num(\".\")\n : token(\"punc\", \".\");\n };\n\n function read_word() {\n var word = read_name();\n return !HOP(KEYWORDS, word)\n ? token(\"name\", word)\n : HOP(OPERATORS, word)\n ? token(\"operator\", word)\n : HOP(KEYWORDS_ATOM, word)\n ? token(\"atom\", word)\n : token(\"keyword\", word);\n };\n\n function with_eof_error(eof_error, cont) {\n try {\n return cont();\n } catch(ex) {\n if (ex === EX_EOF) parse_error(eof_error);\n else throw ex;\n }\n };\n\n function next_token(force_regexp) {\n if (force_regexp)\n return read_regexp();\n skip_whitespace();\n start_token();\n var ch = peek();\n if (!ch) return token(\"eof\");\n if (is_digit(ch)) return read_num();\n if (ch == '\"' || ch == \"'\") return read_string();\n if (HOP(PUNC_CHARS, ch)) return token(\"punc\", next());\n if (ch == \".\") return handle_dot();\n if (ch == \"/\") return handle_slash();\n if (HOP(OPERATOR_CHARS, ch)) return read_operator();\n if (ch == \"\\\\\" || is_identifier_start(ch)) return read_word();\n parse_error(\"Unexpected character '\" + ch + \"'\");\n };\n\n next_token.context = function(nc) {\n if (nc) S = nc;\n return S;\n };\n\n return next_token;\n\n};\n\n/* -----[ Parser (constants) ]----- */\n\nvar UNARY_PREFIX = array_to_hash([\n \"typeof\",\n \"void\",\n \"delete\",\n \"--\",\n \"++\",\n \"!\",\n \"~\",\n \"-\",\n \"+\"\n]);\n\nvar UNARY_POSTFIX = array_to_hash([ \"--\", \"++\" ]);\n\nvar ASSIGNMENT = (function(a, ret, i){\n while (i < a.length) {\n ret[a[i]] = a[i].substr(0, a[i].length - 1);\n i++;\n }\n return ret;\n})(\n [\"+=\", \"-=\", \"/=\", \"*=\", \"%=\", \">>=\", \"<<=\", \">>>=\", \"|=\", \"^=\", \"&=\"],\n { \"=\": true },\n 0\n);\n\nvar PRECEDENCE = (function(a, ret){\n for (var i = 0, n = 1; i < a.length; ++i, ++n) {\n var b = a[i];\n for (var j = 0; j < b.length; ++j) {\n ret[b[j]] = n;\n }\n }\n return ret;\n})(\n [\n [\"||\"],\n [\"&&\"],\n [\"|\"],\n [\"^\"],\n [\"&\"],\n [\"==\", \"===\", \"!=\", \"!==\"],\n [\"<\", \">\", \"<=\", \">=\", \"in\", \"instanceof\"],\n [\">>\", \"<<\", \">>>\"],\n [\"+\", \"-\"],\n [\"*\", \"/\", \"%\"]\n ],\n {}\n);\n\nvar STATEMENTS_WITH_LABELS = array_to_hash([ \"for\", \"do\", \"while\", \"switch\" ]);\n\nvar ATOMIC_START_TOKEN = array_to_hash([ \"atom\", \"num\", \"string\", \"regexp\", \"name\" ]);\n\n/* -----[ Parser ]----- */\n\nfunction NodeWithToken(str, start, end) {\n this.name = str;\n this.start = start;\n this.end = end;\n};\n\nNodeWithToken.prototype.toString = function() { return this.name; };\n\nfunction parse($TEXT, exigent_mode, embed_tokens) {\n\n var S = {\n input : typeof $TEXT == \"string\" ? tokenizer($TEXT, true) : $TEXT,\n token : null,\n prev : null,\n peeked : null,\n in_function : 0,\n in_loop : 0,\n labels : []\n };\n\n S.token = next();\n\n function is(type, value) {\n return is_token(S.token, type, value);\n };\n\n function peek() { return S.peeked || (S.peeked = S.input()); };\n\n function next() {\n S.prev = S.token;\n if (S.peeked) {\n S.token = S.peeked;\n S.peeked = null;\n } else {\n S.token = S.input();\n }\n return S.token;\n };\n\n function prev() {\n return S.prev;\n };\n\n function croak(msg, line, col, pos) {\n var ctx = S.input.context();\n js_error(msg,\n line != null ? line : ctx.tokline,\n col != null ? col : ctx.tokcol,\n pos != null ? pos : ctx.tokpos);\n };\n\n function token_error(token, msg) {\n croak(msg, token.line, token.col);\n };\n\n function unexpected(token) {\n if (token == null)\n token = S.token;\n token_error(token, \"Unexpected token: \" + token.type + \" (\" + token.value + \")\");\n };\n\n function expect_token(type, val) {\n if (is(type, val)) {\n return next();\n }\n token_error(S.token, \"Unexpected token \" + S.token.type + \", expected \" + type);\n };\n\n function expect(punc) { return expect_token(\"punc\", punc); };\n\n function can_insert_semicolon() {\n return !exigent_mode && (\n S.token.nlb || is(\"eof\") || is(\"punc\", \"}\")\n );\n };\n\n function semicolon() {\n if (is(\"punc\", \";\")) next();\n else if (!can_insert_semicolon()) unexpected();\n };\n\n function as() {\n var node = slice(arguments);\n Object.defineProperty(node, 'tok', { value: S.token });\n return node;\n };\n\n function parenthesised() {\n expect(\"(\");\n var ex = expression();\n expect(\")\");\n return ex;\n };\n\n function add_tokens(str, start, end) {\n return str instanceof NodeWithToken ? str : new NodeWithToken(str, start, end);\n };\n\n function maybe_embed_tokens(parser) {\n if (embed_tokens) return function() {\n var start = S.token;\n var ast = parser.apply(this, arguments);\n ast[0] = add_tokens(ast[0], start, prev());\n return ast;\n };\n else return parser;\n };\n\n var statement = maybe_embed_tokens(function() {\n if (is(\"operator\", \"/\")) {\n S.peeked = null;\n S.token = S.input(true); // force regexp\n }\n switch (S.token.type) {\n case \"num\":\n case \"string\":\n case \"regexp\":\n case \"operator\":\n case \"atom\":\n return simple_statement();\n\n case \"name\":\n return is_token(peek(), \"punc\", \":\")\n ? labeled_statement(prog1(S.token.value, next, next))\n : simple_statement();\n\n case \"punc\":\n switch (S.token.value) {\n case \"{\":\n return as(\"block\", block_());\n case \"[\":\n case \"(\":\n return simple_statement();\n case \";\":\n next();\n return as(\"block\");\n default:\n unexpected();\n }\n\n case \"keyword\":\n switch (prog1(S.token.value, next)) {\n case \"break\":\n return break_cont(\"break\");\n\n case \"continue\":\n return break_cont(\"continue\");\n\n case \"debugger\":\n semicolon();\n return as(\"debugger\");\n\n case \"do\":\n return (function(body){\n expect_token(\"keyword\", \"while\");\n return as(\"do\", prog1(parenthesised, semicolon), body);\n })(in_loop(statement));\n\n case \"for\":\n return for_();\n\n case \"function\":\n return function_(true);\n\n case \"if\":\n return if_();\n\n case \"return\":\n return as(\"return\",\n is(\"punc\", \";\")\n ? (next(), null)\n : can_insert_semicolon()\n ? null\n : prog1(expression, semicolon));\n\n case \"switch\":\n return as(\"switch\", parenthesised(), switch_block_());\n\n case \"throw\":\n return as(\"throw\", prog1(expression, semicolon));\n\n case \"try\":\n return try_();\n\n case \"var\":\n return prog1(var_, semicolon);\n\n case \"const\":\n return prog1(const_, semicolon);\n\n case \"while\":\n return as(\"while\", parenthesised(), in_loop(statement));\n\n case \"with\":\n return as(\"with\", parenthesised(), statement());\n\n default:\n unexpected();\n }\n }\n });\n\n function labeled_statement(label) {\n S.labels.push(label);\n var start = S.token, stat = statement();\n if (exigent_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0]))\n unexpected(start);\n S.labels.pop();\n return as(\"label\", label, stat);\n };\n\n function simple_statement() {\n return as(\"stat\", prog1(expression, semicolon));\n };\n\n function break_cont(type) {\n var name;\n if (!can_insert_semicolon()) {\n name = is(\"name\") ? S.token.value : null;\n }\n if (name != null) {\n next();\n if (!member(name, S.labels))\n croak(\"Label \" + name + \" without matching loop or statement\");\n }\n else if (S.in_loop == 0)\n croak(type + \" not inside a loop or switch\");\n semicolon();\n return as(type, name);\n };\n\n function for_() {\n expect(\"(\");\n var init = null;\n if (!is(\"punc\", \";\")) {\n init = is(\"keyword\", \"var\")\n ? (next(), var_(true))\n : expression(true, true);\n if (is(\"operator\", \"in\"))\n return for_in(init);\n }\n return regular_for(init);\n };\n\n function regular_for(init) {\n expect(\";\");\n var test = is(\"punc\", \";\") ? null : expression();\n expect(\";\");\n var step = is(\"punc\", \")\") ? null : expression();\n expect(\")\");\n return as(\"for\", init, test, step, in_loop(statement));\n };\n\n function for_in(init) {\n var lhs = init[0] == \"var\" ? as(\"name\", init[1][0]) : init;\n next();\n var obj = expression();\n expect(\")\");\n return as(\"for-in\", init, lhs, obj, in_loop(statement));\n };\n\n var function_ = maybe_embed_tokens(function(in_statement) {\n var name = is(\"name\") ? prog1(S.token.value, next) : null;\n if (in_statement && !name)\n unexpected();\n expect(\"(\");\n return as(in_statement ? \"defun\" : \"function\",\n name,\n // arguments\n (function(first, a){\n while (!is(\"punc\", \")\")) {\n if (first) first = false; else expect(\",\");\n if (!is(\"name\")) unexpected();\n a.push(S.token.value);\n next();\n }\n next();\n return a;\n })(true, []),\n // body\n (function(){\n ++S.in_function;\n var loop = S.in_loop;\n S.in_loop = 0;\n var a = block_();\n --S.in_function;\n S.in_loop = loop;\n return a;\n })());\n });\n\n function if_() {\n var cond = parenthesised(), body = statement(), belse;\n if (is(\"keyword\", \"else\")) {\n next();\n belse = statement();\n }\n return as(\"if\", cond, body, belse);\n };\n\n function block_() {\n expect(\"{\");\n var a = [];\n while (!is(\"punc\", \"}\")) {\n if (is(\"eof\")) unexpected();\n a.push(statement());\n }\n next();\n return a;\n };\n\n var switch_block_ = curry(in_loop, function(){\n expect(\"{\");\n var a = [], cur = null;\n while (!is(\"punc\", \"}\")) {\n if (is(\"eof\")) unexpected();\n if (is(\"keyword\", \"case\")) {\n next();\n cur = [];\n a.push([ expression(), cur ]);\n expect(\":\");\n }\n else if (is(\"keyword\", \"default\")) {\n next();\n expect(\":\");\n cur = [];\n a.push([ null, cur ]);\n }\n else {\n if (!cur) unexpected();\n cur.push(statement());\n }\n }\n next();\n return a;\n });\n\n function try_() {\n var body = block_(), bcatch, bfinally;\n if (is(\"keyword\", \"catch\")) {\n next();\n expect(\"(\");\n if (!is(\"name\"))\n croak(\"Name expected\");\n var name = S.token.value;\n next();\n expect(\")\");\n bcatch = [ name, block_() ];\n }\n if (is(\"keyword\", \"finally\")) {\n next();\n bfinally = block_();\n }\n if (!bcatch && !bfinally)\n croak(\"Missing catch/finally blocks\");\n return as(\"try\", body, bcatch, bfinally);\n };\n\n function vardefs(no_in) {\n var a = [];\n for (;;) {\n if (!is(\"name\"))\n unexpected();\n var name = S.token.value;\n next();\n if (is(\"operator\", \"=\")) {\n next();\n a.push([ name, expression(false, no_in) ]);\n } else {\n a.push([ name ]);\n }\n if (!is(\"punc\", \",\"))\n break;\n next();\n }\n return a;\n };\n\n function var_(no_in) {\n return as(\"var\", vardefs(no_in));\n };\n\n function const_() {\n return as(\"const\", vardefs());\n };\n\n function new_() {\n var newexp = expr_atom(false), args;\n if (is(\"punc\", \"(\")) {\n next();\n args = expr_list(\")\");\n } else {\n args = [];\n }\n return subscripts(as(\"new\", newexp, args), true);\n };\n\n var expr_atom = maybe_embed_tokens(function(allow_calls) {\n if (is(\"operator\", \"new\")) {\n next();\n return new_();\n }\n if (is(\"punc\")) {\n switch (S.token.value) {\n case \"(\":\n next();\n return subscripts(prog1(expression, curry(expect, \")\")), allow_calls);\n case \"[\":\n next();\n return subscripts(array_(), allow_calls);\n case \"{\":\n next();\n return subscripts(object_(), allow_calls);\n }\n unexpected();\n }\n if (is(\"keyword\", \"function\")) {\n next();\n return subscripts(function_(false), allow_calls);\n }\n if (HOP(ATOMIC_START_TOKEN, S.token.type)) {\n var atom = S.token.type == \"regexp\"\n ? as(\"regexp\", S.token.value[0], S.token.value[1])\n : as(S.token.type, S.token.value);\n return subscripts(prog1(atom, next), allow_calls);\n }\n unexpected();\n });\n\n function expr_list(closing, allow_trailing_comma, allow_empty) {\n var first = true, a = [];\n while (!is(\"punc\", closing)) {\n if (first) first = false; else expect(\",\");\n if (allow_trailing_comma && is(\"punc\", closing)) break;\n if (is(\"punc\", \",\") && allow_empty) {\n a.push([ \"atom\", \"undefined\" ]);\n } else {\n a.push(expression(false));\n }\n }\n next();\n return a;\n };\n\n function array_() {\n return as(\"array\", expr_list(\"]\", !exigent_mode, true));\n };\n\n function object_() {\n var first = true, a = [];\n while (!is(\"punc\", \"}\")) {\n if (first) first = false; else expect(\",\");\n if (!exigent_mode && is(\"punc\", \"}\"))\n // allow trailing comma\n break;\n var type = S.token.type;\n var name = as_property_name();\n if (type == \"name\" && (name == \"get\" || name == \"set\") && !is(\"punc\", \":\")) {\n a.push([ as_name(), function_(false), name ]);\n } else {\n expect(\":\");\n a.push([ name, expression(false) ]);\n }\n }\n next();\n return as(\"object\", a);\n };\n\n function as_property_name() {\n switch (S.token.type) {\n case \"num\":\n case \"string\":\n return prog1(S.token.value, next);\n }\n return as_name();\n };\n\n function as_name() {\n switch (S.token.type) {\n case \"name\":\n case \"operator\":\n case \"keyword\":\n case \"atom\":\n return prog1(S.token.value, next);\n default:\n unexpected();\n }\n };\n\n function subscripts(expr, allow_calls) {\n if (is(\"punc\", \".\")) {\n next();\n return subscripts(as(\"dot\", expr, as_name()), allow_calls);\n }\n if (is(\"punc\", \"[\")) {\n next();\n return subscripts(as(\"sub\", expr, prog1(expression, curry(expect, \"]\"))), allow_calls);\n }\n if (allow_calls && is(\"punc\", \"(\")) {\n next();\n return subscripts(as(\"call\", expr, expr_list(\")\")), true);\n }\n return expr;\n };\n\n function maybe_unary(allow_calls) {\n if (is(\"operator\") && HOP(UNARY_PREFIX, S.token.value)) {\n return make_unary(\"unary-prefix\",\n prog1(S.token.value, next),\n maybe_unary(allow_calls));\n }\n var val = expr_atom(allow_calls);\n while (is(\"operator\") && HOP(UNARY_POSTFIX, S.token.value) && !S.token.nlb) {\n val = make_unary(\"unary-postfix\", S.token.value, val);\n next();\n }\n return val;\n };\n\n function make_unary(tag, op, expr) {\n if ((op == \"++\" || op == \"--\") && !is_assignable(expr))\n croak(\"Invalid use of \" + op + \" operator\");\n return as(tag, op, expr);\n };\n\n function expr_op(left, min_prec, no_in) {\n var op = is(\"operator\") ? S.token.value : null;\n if (op && op == \"in\" && no_in) op = null;\n var prec = op != null ? PRECEDENCE[op] : null;\n if (prec != null && prec > min_prec) {\n next();\n var right = expr_op(maybe_unary(true), prec, no_in);\n return expr_op(as(\"binary\", op, left, right), min_prec, no_in);\n }\n return left;\n };\n\n function expr_ops(no_in) {\n return expr_op(maybe_unary(true), 0, no_in);\n };\n\n function maybe_conditional(no_in) {\n var expr = expr_ops(no_in);\n if (is(\"operator\", \"?\")) {\n next();\n var yes = expression(false);\n expect(\":\");\n return as(\"conditional\", expr, yes, expression(false, no_in));\n }\n return expr;\n };\n\n function is_assignable(expr) {\n if (!exigent_mode) return true;\n switch (expr[0]) {\n case \"dot\":\n case \"sub\":\n case \"new\":\n case \"call\":\n return true;\n case \"name\":\n return expr[1] != \"this\";\n }\n };\n\n function maybe_assign(no_in) {\n var left = maybe_conditional(no_in), val = S.token.value;\n if (is(\"operator\") && HOP(ASSIGNMENT, val)) {\n if (is_assignable(left)) {\n next();\n return as(\"assign\", ASSIGNMENT[val], left, maybe_assign(no_in));\n }\n croak(\"Invalid assignment\");\n }\n return left;\n };\n\n var expression = maybe_embed_tokens(function(commas, no_in) {\n if (arguments.length == 0)\n commas = true;\n var expr = maybe_assign(no_in);\n if (commas && is(\"punc\", \",\")) {\n next();\n return as(\"seq\", expr, expression(true, no_in));\n }\n return expr;\n });\n\n function in_loop(cont) {\n try {\n ++S.in_loop;\n return cont();\n } finally {\n --S.in_loop;\n }\n };\n\n return as(\"toplevel\", (function(a){\n while (!is(\"eof\"))\n a.push(statement());\n return a;\n })([]));\n\n};\n\n/* -----[ Utilities ]----- */\n\nfunction curry(f) {\n var args = slice(arguments, 1);\n return function() { return f.apply(this, args.concat(slice(arguments))); };\n};\n\nfunction prog1(ret) {\n if (ret instanceof Function)\n ret = ret();\n for (var i = 1, n = arguments.length; --n > 0; ++i)\n arguments[i]();\n return ret;\n};\n\nfunction array_to_hash(a) {\n var ret = {};\n for (var i = 0; i < a.length; ++i)\n ret[a[i]] = true;\n return ret;\n};\n\nfunction slice(a, start) {\n return Array.prototype.slice.call(a, start == null ? 0 : start);\n};\n\nfunction characters(str) {\n return str.split(\"\");\n};\n\nfunction member(name, array) {\n for (var i = array.length; --i >= 0;)\n if (array[i] === name)\n return true;\n return false;\n};\n\nfunction HOP(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n};\n\nvar warn = function() {};\n\n/* -----[ Exports ]----- */\n\nexports.tokenizer = tokenizer;\nexports.parse = parse;\nexports.slice = slice;\nexports.curry = curry;\nexports.member = member;\nexports.array_to_hash = array_to_hash;\nexports.PRECEDENCE = PRECEDENCE;\nexports.KEYWORDS_ATOM = KEYWORDS_ATOM;\nexports.RESERVED_WORDS = RESERVED_WORDS;\nexports.KEYWORDS = KEYWORDS;\nexports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;\nexports.OPERATORS = OPERATORS;\nexports.is_alphanumeric_char = is_alphanumeric_char;\nexports.set_logger = function(logger) {\n warn = logger;\n};\n", "module.exports = Object.create(new Proxy({}, {\n get(_, key) {\n if (\n key !== '__esModule' &&\n key !== '__proto__' &&\n key !== 'constructor' &&\n key !== 'splice'\n ) {\n console.warn(`Module \"util\" has been externalized for browser compatibility. Cannot access \"util.${key}\" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`)\n }\n }\n}))", "\n/*!\n * stats - parser\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar parse = require('./uglify/parser').parse\n , sys = require('util');\n\n/**\n * Return stats for the given javascript `str`.\n *\n * @param {String} str\n * @param {Object} options\n * @return {Object}\n * @api public\n */\n\nmodule.exports = function(str, options){\n var options = options || {}\n , stats = {\n loc: str.split('\\n').length\n , bytes: Buffer.byteLength(str)\n , statements: 0\n , assignments: 0\n , functions: 0\n , stringBytes: 0\n , arrayLiterals: 0\n , objectLiterals: 0\n , objectsCreated: 0\n , regexpLiterals: 0\n , strings: 0\n , numbers: 0\n , throws: 0\n };\n\n // strip shebang\n if ('#' == str[0]) str = str.slice(str.indexOf('\\n'));\n\n function visit(node) {\n if (!node) return;\n var name = node[0];\n\n // array support\n if ('string' != typeof name) {\n for (var i = 0, len = node.length; i < len; ++i) {\n visit(node[i]);\n }\n return;\n }\n\n // rename \"name\" to \"ident\"\n if ('name' == name) name = 'ident';\n\n // visit the node\n if (!visit[name]) throw new Error('no visitor implemented for \"' + name + '\"');\n visit[name](node);\n }\n\n visit['toplevel'] = function(node){\n visit(node[1]);\n };\n\n visit['seq'] = function(node){\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['for-in'] = function(node){\n visit(node[1]);\n visit(node[2]);\n visit(node[3]);\n visit(node[4]);\n };\n\n visit['switch'] = function(node){\n ++stats.statements;\n visit(node[1]);\n node[2].forEach(function(node){\n visit(node[1]);\n visit(node[2]);\n });\n };\n\n visit['with'] = function(node){\n ++stats.statements;\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['try'] = function(node){\n ++stats.statements;\n visit(node[1]);\n node[2] && visit(node[2][1]);\n };\n\n visit['conditional'] = function(node){\n visit(node[1]);\n visit(node[2]);\n visit(node[3]);\n };\n\n visit['break'] = function(node){\n ++stats.statements;\n };\n\n visit['array'] = function(node){\n ++stats.arrayLiterals;\n visit(node[1]);\n };\n\n visit['object'] = function(node){\n ++stats.objectLiterals;\n node[1].forEach(function(pair){\n visit(pair[1]);\n });\n };\n\n visit['var'] = \n visit['const'] = function(node){\n node[1].forEach(function(node){\n if (node[1]) ++stats.assignments;\n visit(node[1]);\n });\n ++stats.statements;\n };\n\n visit['regexp'] = function(node){\n ++stats.regexpLiterals;\n };\n\n visit['num'] = function(node){\n ++stats.numbers;\n };\n\n visit['do'] = function(node){\n ++stats.statements;\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['label'] = function(node){\n visit(node[2]);\n };\n\n visit['atom'] = function(node){};\n\n visit['unary-prefix'] = function(node){};\n \n visit['unary-postfix'] = function(node){};\n\n visit['continue'] = function(node){};\n\n visit['return'] = function(node){};\n\n visit['binary'] = function(node){};\n\n visit['ident'] = function(node){};\n\n visit['new'] = function(node){\n ++stats.objectsCreated;\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['throw'] = function(node){\n ++stats.throws;\n visit(node[1]);\n };\n\n visit['for'] = function(node){\n visit(node[1]);\n visit(node[2]);\n visit(node[3]);\n visit(node[4]);\n };\n\n visit['sub'] = function(node){\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['string'] = function(node){\n ++stats.strings;\n stats.stringBytes += Buffer.byteLength(node[1]);\n };\n\n visit['dot'] = function(node){\n visit(node[1]);\n };\n\n visit['block'] = function(node){\n visit(node[1]);\n };\n\n visit['while'] = function(node){\n ++stats.statements;\n visit(node[2]);\n };\n\n visit['if'] = function(node){\n ++stats.statements;\n visit(node[1]);\n visit(node[2]);\n visit(node[3]);\n };\n\n visit['defun'] = function(node){\n ++stats.functions;\n ++stats.statements;\n visit(node[3]);\n };\n\n visit['function'] = function(node){\n ++stats.functions;\n visit(node[3]);\n };\n\n visit['call'] = function(node){\n visit(node[1]);\n visit(node[2]);\n };\n\n visit['assign'] = function(node){\n ++stats.assignments;\n visit(node[3]);\n };\n\n visit['stat'] = function(node){\n ++stats.statements;\n visit(node[1]);\n };\n\n try {\n visit(parse(str));\n } catch (err) {\n if ('JS_Parse_Error' != err.constructor.name) throw err;\n var line = str.split('\\n')[err.line];\n err = new SyntaxError(err.message\n + ' on line '\n + err.line\n + ':' + err.col\n + ':\\n ' + sys.inspect(line));\n if (!options.ignoreParseErrors) throw err; \n }\n\n return stats;\n};\n", "module.exports = Object.create(new Proxy({}, {\n get(_, key) {\n if (\n key !== '__esModule' &&\n key !== '__proto__' &&\n key !== 'constructor' &&\n key !== 'splice'\n ) {\n console.warn(`Module \"fs\" has been externalized for browser compatibility. Cannot access \"fs.${key}\" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`)\n }\n }\n}))", "module.exports = Object.create(new Proxy({}, {\n get(_, key) {\n if (\n key !== '__esModule' &&\n key !== '__proto__' &&\n key !== 'constructor' &&\n key !== 'splice'\n ) {\n console.warn(`Module \"path\" has been externalized for browser compatibility. Cannot access \"path.${key}\" in client code. See https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`)\n }\n }\n}))", "\n/*!\n * stats - find\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\n/**\n * Module dependencies.\n */\n\nvar fs = require('fs')\n , path = require('path')\n , join = path.join\n , extname = path.extname\n , noop = function(){};\n\n/**\n * Find JavaScript files by the given `paths`\n * and callback `fn(err, files)`.\n *\n * @param {Array} paths\n * @param {Function} fn\n * @api public\n */\n\nmodule.exports = function(paths, fn){\n var pending = paths.length\n , ret = [];\n\n function find(path) {\n fs.stat(path, function(err, stat) {\n if (err) {\n fn(err);\n fn = noop;\n return\n }\n \n if (stat.isFile() && isJavaScript(path)) {\n ret.push(path);\n --pending || fn(null, ret);\n } else {\n fs.readdir(path, function(err, files){\n if (err) {\n fn(err);\n fn = noop;\n return\n }\n\n files.forEach(function(file){\n file = join(path, file);\n if (isJavaScript(file)) {\n ret.push(file);\n } else {\n ++pending;\n fs.stat(file, function(err, stat){\n if (err) return;\n if (!stat.isDirectory()) return --pending || fn(null, ret);\n find(file);\n });\n }\n });\n\n --pending || fn(null, ret);\n });\n }\n });\n }\n\n paths.forEach(find);\n};\n\n/**\n * Filter `file` by \".js\" extension.\n *\n * @param {String} file\n * @return {Boolean}\n * @api private\n */\n\nfunction isJavaScript(file) {\n return '.js' == extname(file);\n}", "\n/*!\n * stats - formats - json\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\n/**\n * Output `stats` as JSON.\n *\n * @param {Object} stats\n * @api private\n */\n\nmodule.exports = function(stats){\n process.stdout.write(JSON.stringify(stats));\n};", "\n/*!\n * stats - formats - text\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\n/**\n * Output `stats` as plain-text.\n *\n * @param {Object} stats\n * @api private\n */\n\nexports = module.exports = function(files){\n Object.keys(files).forEach(function(file){\n var stats = files[file];\n console.log('\\n \\033[90m%s:\\033[0m', file);\n Object.keys(stats).forEach(function(name){\n var val = stats[name];\n if (exports[name]) val = exports[name](val);\n console.log(' \\033[90m%s: \\033[36m%s\\033[0m', name, val);\n });\n });\n console.log();\n};\n\n/**\n * Format bytes.\n */\n\nexports.bytes = \nexports.stringBytes = function(n){\n var kb = 1024\n , mb = kb * 1024;\n if (n < kb) return n + ' bytes';\n if (n < mb) return (n / kb).toFixed(2) + ' kb';\n return (n / mb).toFixed(2) + ' mb';\n};\n", "\n/*!\n * stats - formats\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\nexports.json = require('./json');\nexports.text = require('./text');", "\n/*!\n * stats\n * Copyright(c) 2011 TJ Holowaychuk \n * MIT Licensed\n */\n\n/**\n * Library version.\n */\n\nexports.version = '0.0.6';\n\n/**\n * Return stats for the given javascript `str`.\n *\n * @param {String} str\n * @return {Object}\n * @api public\n */\n\nexports.parse = require('./parser');\n\n/**\n * Find JavaScript files by the given `paths`\n * and callback `fn(err, files)`.\n *\n * @param {Array} paths\n * @param {Function} fn\n * @api public\n */\n\nexports.find = require('./find');\n\n/**\n * Expose formatters.\n */\n\nexports.formats = require('./formats');", "\nmodule.exports = require('./lib/stats');"], - "mappings": "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", - "names": ["ch", "require_parser", "node", "path", "err", "stat", "require_stats"] -} diff --git a/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js b/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js deleted file mode 100644 index 17b8085..0000000 --- a/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js +++ /dev/null @@ -1,2614 +0,0 @@ -import { - AnimationClip, - Bone, - Box3, - BufferAttribute, - BufferGeometry, - ClampToEdgeWrapping, - Color, - ColorManagement, - DirectionalLight, - DoubleSide, - FileLoader, - FrontSide, - Group, - ImageBitmapLoader, - InstancedBufferAttribute, - InstancedMesh, - InterleavedBuffer, - InterleavedBufferAttribute, - Interpolant, - InterpolateDiscrete, - InterpolateLinear, - Line, - LineBasicMaterial, - LineLoop, - LineSegments, - LinearFilter, - LinearMipmapLinearFilter, - LinearMipmapNearestFilter, - LinearSRGBColorSpace, - Loader, - LoaderUtils, - Material, - MathUtils, - Matrix4, - Mesh, - MeshBasicMaterial, - MeshPhysicalMaterial, - MeshStandardMaterial, - MirroredRepeatWrapping, - NearestFilter, - NearestMipmapLinearFilter, - NearestMipmapNearestFilter, - NumberKeyframeTrack, - Object3D, - OrthographicCamera, - PerspectiveCamera, - PointLight, - Points, - PointsMaterial, - PropertyBinding, - Quaternion, - QuaternionKeyframeTrack, - RepeatWrapping, - SRGBColorSpace, - Skeleton, - SkinnedMesh, - Sphere, - SpotLight, - Texture, - TextureLoader, - TriangleFanDrawMode, - TriangleStripDrawMode, - TrianglesDrawMode, - Vector2, - Vector3, - VectorKeyframeTrack -} from "./chunk-IS2ZBFBB.js"; -import "./chunk-BUSYA2B4.js"; - -// node_modules/three/examples/jsm/utils/BufferGeometryUtils.js -function toTrianglesDrawMode(geometry, drawMode) { - if (drawMode === TrianglesDrawMode) { - console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); - return geometry; - } - if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) { - let index = geometry.getIndex(); - if (index === null) { - const indices = []; - const position = geometry.getAttribute("position"); - if (position !== void 0) { - for (let i = 0; i < position.count; i++) { - indices.push(i); - } - geometry.setIndex(indices); - index = geometry.getIndex(); - } else { - console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); - return geometry; - } - } - const numberOfTriangles = index.count - 2; - const newIndices = []; - if (drawMode === TriangleFanDrawMode) { - for (let i = 1; i <= numberOfTriangles; i++) { - newIndices.push(index.getX(0)); - newIndices.push(index.getX(i)); - newIndices.push(index.getX(i + 1)); - } - } else { - for (let i = 0; i < numberOfTriangles; i++) { - if (i % 2 === 0) { - newIndices.push(index.getX(i)); - newIndices.push(index.getX(i + 1)); - newIndices.push(index.getX(i + 2)); - } else { - newIndices.push(index.getX(i + 2)); - newIndices.push(index.getX(i + 1)); - newIndices.push(index.getX(i)); - } - } - } - if (newIndices.length / 3 !== numberOfTriangles) { - console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); - } - const newGeometry = geometry.clone(); - newGeometry.setIndex(newIndices); - newGeometry.clearGroups(); - return newGeometry; - } else { - console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); - return geometry; - } -} - -// node_modules/three/examples/jsm/loaders/GLTFLoader.js -var GLTFLoader = class extends Loader { - constructor(manager) { - super(manager); - this.dracoLoader = null; - this.ktx2Loader = null; - this.meshoptDecoder = null; - this.pluginCallbacks = []; - this.register(function(parser) { - return new GLTFMaterialsClearcoatExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsDispersionExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureBasisUExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureWebPExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureAVIFExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsSheenExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsTransmissionExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsVolumeExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsIorExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsEmissiveStrengthExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsSpecularExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsIridescenceExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsAnisotropyExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsBumpExtension(parser); - }); - this.register(function(parser) { - return new GLTFLightsExtension(parser); - }); - this.register(function(parser) { - return new GLTFMeshoptCompression(parser); - }); - this.register(function(parser) { - return new GLTFMeshGpuInstancing(parser); - }); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - let resourcePath; - if (this.resourcePath !== "") { - resourcePath = this.resourcePath; - } else if (this.path !== "") { - const relativeUrl = LoaderUtils.extractUrlBase(url); - resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); - } else { - resourcePath = LoaderUtils.extractUrlBase(url); - } - this.manager.itemStart(url); - const _onError = function(e) { - if (onError) { - onError(e); - } else { - console.error(e); - } - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(data) { - try { - scope.parse(data, resourcePath, function(gltf) { - onLoad(gltf); - scope.manager.itemEnd(url); - }, _onError); - } catch (e) { - _onError(e); - } - }, onProgress, _onError); - } - setDRACOLoader(dracoLoader) { - this.dracoLoader = dracoLoader; - return this; - } - setDDSLoader() { - throw new Error( - 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".' - ); - } - setKTX2Loader(ktx2Loader) { - this.ktx2Loader = ktx2Loader; - return this; - } - setMeshoptDecoder(meshoptDecoder) { - this.meshoptDecoder = meshoptDecoder; - return this; - } - register(callback) { - if (this.pluginCallbacks.indexOf(callback) === -1) { - this.pluginCallbacks.push(callback); - } - return this; - } - unregister(callback) { - if (this.pluginCallbacks.indexOf(callback) !== -1) { - this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); - } - return this; - } - parse(data, path, onLoad, onError) { - let json; - const extensions = {}; - const plugins = {}; - const textDecoder = new TextDecoder(); - if (typeof data === "string") { - json = JSON.parse(data); - } else if (data instanceof ArrayBuffer) { - const magic = textDecoder.decode(new Uint8Array(data, 0, 4)); - if (magic === BINARY_EXTENSION_HEADER_MAGIC) { - try { - extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data); - } catch (error) { - if (onError) onError(error); - return; - } - json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); - } else { - json = JSON.parse(textDecoder.decode(data)); - } - } else { - json = data; - } - if (json.asset === void 0 || json.asset.version[0] < 2) { - if (onError) onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); - return; - } - const parser = new GLTFParser(json, { - path: path || this.resourcePath || "", - crossOrigin: this.crossOrigin, - requestHeader: this.requestHeader, - manager: this.manager, - ktx2Loader: this.ktx2Loader, - meshoptDecoder: this.meshoptDecoder - }); - parser.fileLoader.setRequestHeader(this.requestHeader); - for (let i = 0; i < this.pluginCallbacks.length; i++) { - const plugin = this.pluginCallbacks[i](parser); - if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); - plugins[plugin.name] = plugin; - extensions[plugin.name] = true; - } - if (json.extensionsUsed) { - for (let i = 0; i < json.extensionsUsed.length; ++i) { - const extensionName = json.extensionsUsed[i]; - const extensionsRequired = json.extensionsRequired || []; - switch (extensionName) { - case EXTENSIONS.KHR_MATERIALS_UNLIT: - extensions[extensionName] = new GLTFMaterialsUnlitExtension(); - break; - case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: - extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); - break; - case EXTENSIONS.KHR_TEXTURE_TRANSFORM: - extensions[extensionName] = new GLTFTextureTransformExtension(); - break; - case EXTENSIONS.KHR_MESH_QUANTIZATION: - extensions[extensionName] = new GLTFMeshQuantizationExtension(); - break; - default: - if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) { - console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".'); - } - } - } - } - parser.setExtensions(extensions); - parser.setPlugins(plugins); - parser.parse(onLoad, onError); - } - parseAsync(data, path) { - const scope = this; - return new Promise(function(resolve, reject) { - scope.parse(data, path, resolve, reject); - }); - } -}; -function GLTFRegistry() { - let objects = {}; - return { - get: function(key) { - return objects[key]; - }, - add: function(key, object) { - objects[key] = object; - }, - remove: function(key) { - delete objects[key]; - }, - removeAll: function() { - objects = {}; - } - }; -} -var EXTENSIONS = { - KHR_BINARY_GLTF: "KHR_binary_glTF", - KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", - KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", - KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", - KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", - KHR_MATERIALS_IOR: "KHR_materials_ior", - KHR_MATERIALS_SHEEN: "KHR_materials_sheen", - KHR_MATERIALS_SPECULAR: "KHR_materials_specular", - KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", - KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", - KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", - KHR_MATERIALS_UNLIT: "KHR_materials_unlit", - KHR_MATERIALS_VOLUME: "KHR_materials_volume", - KHR_TEXTURE_BASISU: "KHR_texture_basisu", - KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", - KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", - KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", - EXT_MATERIALS_BUMP: "EXT_materials_bump", - EXT_TEXTURE_WEBP: "EXT_texture_webp", - EXT_TEXTURE_AVIF: "EXT_texture_avif", - EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", - EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" -}; -var GLTFLightsExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; - this.cache = { refs: {}, uses: {} }; - } - _markDefs() { - const parser = this.parser; - const nodeDefs = this.parser.json.nodes || []; - for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { - const nodeDef = nodeDefs[nodeIndex]; - if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) { - parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); - } - } - } - _loadLight(lightIndex) { - const parser = this.parser; - const cacheKey = "light:" + lightIndex; - let dependency = parser.cache.get(cacheKey); - if (dependency) return dependency; - const json = parser.json; - const extensions = json.extensions && json.extensions[this.name] || {}; - const lightDefs = extensions.lights || []; - const lightDef = lightDefs[lightIndex]; - let lightNode; - const color = new Color(16777215); - if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace); - const range = lightDef.range !== void 0 ? lightDef.range : 0; - switch (lightDef.type) { - case "directional": - lightNode = new DirectionalLight(color); - lightNode.target.position.set(0, 0, -1); - lightNode.add(lightNode.target); - break; - case "point": - lightNode = new PointLight(color); - lightNode.distance = range; - break; - case "spot": - lightNode = new SpotLight(color); - lightNode.distance = range; - lightDef.spot = lightDef.spot || {}; - lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; - lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; - lightNode.angle = lightDef.spot.outerConeAngle; - lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; - lightNode.target.position.set(0, 0, -1); - lightNode.add(lightNode.target); - break; - default: - throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); - } - lightNode.position.set(0, 0, 0); - lightNode.decay = 2; - assignExtrasToUserData(lightNode, lightDef); - if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; - lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); - dependency = Promise.resolve(lightNode); - parser.cache.add(cacheKey, dependency); - return dependency; - } - getDependency(type, index) { - if (type !== "light") return; - return this._loadLight(index); - } - createNodeAttachment(nodeIndex) { - const self2 = this; - const parser = this.parser; - const json = parser.json; - const nodeDef = json.nodes[nodeIndex]; - const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {}; - const lightIndex = lightDef.light; - if (lightIndex === void 0) return null; - return this._loadLight(lightIndex).then(function(light) { - return parser._getNodeRef(self2.cache, lightIndex, light); - }); - } -}; -var GLTFMaterialsUnlitExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; - } - getMaterialType() { - return MeshBasicMaterial; - } - extendParams(materialParams, materialDef, parser) { - const pending = []; - materialParams.color = new Color(1, 1, 1); - materialParams.opacity = 1; - const metallicRoughness = materialDef.pbrMetallicRoughness; - if (metallicRoughness) { - if (Array.isArray(metallicRoughness.baseColorFactor)) { - const array = metallicRoughness.baseColorFactor; - materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); - materialParams.opacity = array[3]; - } - if (metallicRoughness.baseColorTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); - } - } - return Promise.all(pending); - } -}; -var GLTFMaterialsEmissiveStrengthExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; - if (emissiveStrength !== void 0) { - materialParams.emissiveIntensity = emissiveStrength; - } - return Promise.resolve(); - } -}; -var GLTFMaterialsClearcoatExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.clearcoatFactor !== void 0) { - materialParams.clearcoat = extension.clearcoatFactor; - } - if (extension.clearcoatTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); - } - if (extension.clearcoatRoughnessFactor !== void 0) { - materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; - } - if (extension.clearcoatRoughnessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); - } - if (extension.clearcoatNormalTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); - if (extension.clearcoatNormalTexture.scale !== void 0) { - const scale = extension.clearcoatNormalTexture.scale; - materialParams.clearcoatNormalScale = new Vector2(scale, scale); - } - } - return Promise.all(pending); - } -}; -var GLTFMaterialsDispersionExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const extension = materialDef.extensions[this.name]; - materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; - return Promise.resolve(); - } -}; -var GLTFMaterialsIridescenceExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.iridescenceFactor !== void 0) { - materialParams.iridescence = extension.iridescenceFactor; - } - if (extension.iridescenceTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); - } - if (extension.iridescenceIor !== void 0) { - materialParams.iridescenceIOR = extension.iridescenceIor; - } - if (materialParams.iridescenceThicknessRange === void 0) { - materialParams.iridescenceThicknessRange = [100, 400]; - } - if (extension.iridescenceThicknessMinimum !== void 0) { - materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; - } - if (extension.iridescenceThicknessMaximum !== void 0) { - materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; - } - if (extension.iridescenceThicknessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsSheenExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - materialParams.sheenColor = new Color(0, 0, 0); - materialParams.sheenRoughness = 0; - materialParams.sheen = 1; - const extension = materialDef.extensions[this.name]; - if (extension.sheenColorFactor !== void 0) { - const colorFactor = extension.sheenColorFactor; - materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace); - } - if (extension.sheenRoughnessFactor !== void 0) { - materialParams.sheenRoughness = extension.sheenRoughnessFactor; - } - if (extension.sheenColorTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace)); - } - if (extension.sheenRoughnessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsTransmissionExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.transmissionFactor !== void 0) { - materialParams.transmission = extension.transmissionFactor; - } - if (extension.transmissionTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsVolumeExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; - if (extension.thicknessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); - } - materialParams.attenuationDistance = extension.attenuationDistance || Infinity; - const colorArray = extension.attenuationColor || [1, 1, 1]; - materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); - return Promise.all(pending); - } -}; -var GLTFMaterialsIorExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_IOR; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const extension = materialDef.extensions[this.name]; - materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; - return Promise.resolve(); - } -}; -var GLTFMaterialsSpecularExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; - if (extension.specularTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); - } - const colorArray = extension.specularColorFactor || [1, 1, 1]; - materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace); - if (extension.specularColorTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsBumpExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_MATERIALS_BUMP; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; - if (extension.bumpTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsAnisotropyExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; - } - getMaterialType(materialIndex) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) { - return Promise.resolve(); - } - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.anisotropyStrength !== void 0) { - materialParams.anisotropy = extension.anisotropyStrength; - } - if (extension.anisotropyRotation !== void 0) { - materialParams.anisotropyRotation = extension.anisotropyRotation; - } - if (extension.anisotropyTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); - } - return Promise.all(pending); - } -}; -var GLTFTextureBasisUExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_TEXTURE_BASISU; - } - loadTexture(textureIndex) { - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[this.name]) { - return null; - } - const extension = textureDef.extensions[this.name]; - const loader = parser.options.ktx2Loader; - if (!loader) { - if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { - throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); - } else { - return null; - } - } - return parser.loadTextureImage(textureIndex, extension.source, loader); - } -}; -var GLTFTextureWebPExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_TEXTURE_WEBP; - this.isSupported = null; - } - loadTexture(textureIndex) { - const name = this.name; - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[name]) { - return null; - } - const extension = textureDef.extensions[name]; - const source = json.images[extension.source]; - let loader = parser.textureLoader; - if (source.uri) { - const handler = parser.options.manager.getHandler(source.uri); - if (handler !== null) loader = handler; - } - return this.detectSupport().then(function(isSupported) { - if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); - if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { - throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); - } - return parser.loadTexture(textureIndex); - }); - } - detectSupport() { - if (!this.isSupported) { - this.isSupported = new Promise(function(resolve) { - const image = new Image(); - image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; - image.onload = image.onerror = function() { - resolve(image.height === 1); - }; - }); - } - return this.isSupported; - } -}; -var GLTFTextureAVIFExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_TEXTURE_AVIF; - this.isSupported = null; - } - loadTexture(textureIndex) { - const name = this.name; - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[name]) { - return null; - } - const extension = textureDef.extensions[name]; - const source = json.images[extension.source]; - let loader = parser.textureLoader; - if (source.uri) { - const handler = parser.options.manager.getHandler(source.uri); - if (handler !== null) loader = handler; - } - return this.detectSupport().then(function(isSupported) { - if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); - if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) { - throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); - } - return parser.loadTexture(textureIndex); - }); - } - detectSupport() { - if (!this.isSupported) { - this.isSupported = new Promise(function(resolve) { - const image = new Image(); - image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; - image.onload = image.onerror = function() { - resolve(image.height === 1); - }; - }); - } - return this.isSupported; - } -}; -var GLTFMeshoptCompression = class { - constructor(parser) { - this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; - this.parser = parser; - } - loadBufferView(index) { - const json = this.parser.json; - const bufferView = json.bufferViews[index]; - if (bufferView.extensions && bufferView.extensions[this.name]) { - const extensionDef = bufferView.extensions[this.name]; - const buffer = this.parser.getDependency("buffer", extensionDef.buffer); - const decoder = this.parser.options.meshoptDecoder; - if (!decoder || !decoder.supported) { - if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) { - throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); - } else { - return null; - } - } - return buffer.then(function(res) { - const byteOffset = extensionDef.byteOffset || 0; - const byteLength = extensionDef.byteLength || 0; - const count = extensionDef.count; - const stride = extensionDef.byteStride; - const source = new Uint8Array(res, byteOffset, byteLength); - if (decoder.decodeGltfBufferAsync) { - return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { - return res2.buffer; - }); - } else { - return decoder.ready.then(function() { - const result = new ArrayBuffer(count * stride); - decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); - return result; - }); - } - }); - } else { - return null; - } - } -}; -var GLTFMeshGpuInstancing = class { - constructor(parser) { - this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; - this.parser = parser; - } - createNodeMesh(nodeIndex) { - const json = this.parser.json; - const nodeDef = json.nodes[nodeIndex]; - if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) { - return null; - } - const meshDef = json.meshes[nodeDef.mesh]; - for (const primitive of meshDef.primitives) { - if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) { - return null; - } - } - const extensionDef = nodeDef.extensions[this.name]; - const attributesDef = extensionDef.attributes; - const pending = []; - const attributes = {}; - for (const key in attributesDef) { - pending.push(this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => { - attributes[key] = accessor; - return attributes[key]; - })); - } - if (pending.length < 1) { - return null; - } - pending.push(this.parser.createNodeMesh(nodeIndex)); - return Promise.all(pending).then((results) => { - const nodeObject = results.pop(); - const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; - const count = results[0].count; - const instancedMeshes = []; - for (const mesh of meshes) { - const m = new Matrix4(); - const p = new Vector3(); - const q = new Quaternion(); - const s = new Vector3(1, 1, 1); - const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); - for (let i = 0; i < count; i++) { - if (attributes.TRANSLATION) { - p.fromBufferAttribute(attributes.TRANSLATION, i); - } - if (attributes.ROTATION) { - q.fromBufferAttribute(attributes.ROTATION, i); - } - if (attributes.SCALE) { - s.fromBufferAttribute(attributes.SCALE, i); - } - instancedMesh.setMatrixAt(i, m.compose(p, q, s)); - } - for (const attributeName in attributes) { - if (attributeName === "_COLOR_0") { - const attr = attributes[attributeName]; - instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); - } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") { - mesh.geometry.setAttribute(attributeName, attributes[attributeName]); - } - } - Object3D.prototype.copy.call(instancedMesh, mesh); - this.parser.assignFinalMaterial(instancedMesh); - instancedMeshes.push(instancedMesh); - } - if (nodeObject.isGroup) { - nodeObject.clear(); - nodeObject.add(...instancedMeshes); - return nodeObject; - } - return instancedMeshes[0]; - }); - } -}; -var BINARY_EXTENSION_HEADER_MAGIC = "glTF"; -var BINARY_EXTENSION_HEADER_LENGTH = 12; -var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 }; -var GLTFBinaryExtension = class { - constructor(data) { - this.name = EXTENSIONS.KHR_BINARY_GLTF; - this.content = null; - this.body = null; - const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH); - const textDecoder = new TextDecoder(); - this.header = { - magic: textDecoder.decode(new Uint8Array(data.slice(0, 4))), - version: headerView.getUint32(4, true), - length: headerView.getUint32(8, true) - }; - if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) { - throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); - } else if (this.header.version < 2) { - throw new Error("THREE.GLTFLoader: Legacy binary file detected."); - } - const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; - const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH); - let chunkIndex = 0; - while (chunkIndex < chunkContentsLength) { - const chunkLength = chunkView.getUint32(chunkIndex, true); - chunkIndex += 4; - const chunkType = chunkView.getUint32(chunkIndex, true); - chunkIndex += 4; - if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { - const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); - this.content = textDecoder.decode(contentArray); - } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { - const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; - this.body = data.slice(byteOffset, byteOffset + chunkLength); - } - chunkIndex += chunkLength; - } - if (this.content === null) { - throw new Error("THREE.GLTFLoader: JSON content not found."); - } - } -}; -var GLTFDracoMeshCompressionExtension = class { - constructor(json, dracoLoader) { - if (!dracoLoader) { - throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); - } - this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; - this.json = json; - this.dracoLoader = dracoLoader; - this.dracoLoader.preload(); - } - decodePrimitive(primitive, parser) { - const json = this.json; - const dracoLoader = this.dracoLoader; - const bufferViewIndex = primitive.extensions[this.name].bufferView; - const gltfAttributeMap = primitive.extensions[this.name].attributes; - const threeAttributeMap = {}; - const attributeNormalizedMap = {}; - const attributeTypeMap = {}; - for (const attributeName in gltfAttributeMap) { - const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); - threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; - } - for (const attributeName in primitive.attributes) { - const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); - if (gltfAttributeMap[attributeName] !== void 0) { - const accessorDef = json.accessors[primitive.attributes[attributeName]]; - const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; - attributeTypeMap[threeAttributeName] = componentType.name; - attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; - } - } - return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { - return new Promise(function(resolve, reject) { - dracoLoader.decodeDracoFile(bufferView, function(geometry) { - for (const attributeName in geometry.attributes) { - const attribute = geometry.attributes[attributeName]; - const normalized = attributeNormalizedMap[attributeName]; - if (normalized !== void 0) attribute.normalized = normalized; - } - resolve(geometry); - }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject); - }); - }); - } -}; -var GLTFTextureTransformExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; - } - extendTexture(texture, transform) { - if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) { - return texture; - } - texture = texture.clone(); - if (transform.texCoord !== void 0) { - texture.channel = transform.texCoord; - } - if (transform.offset !== void 0) { - texture.offset.fromArray(transform.offset); - } - if (transform.rotation !== void 0) { - texture.rotation = transform.rotation; - } - if (transform.scale !== void 0) { - texture.repeat.fromArray(transform.scale); - } - texture.needsUpdate = true; - return texture; - } -}; -var GLTFMeshQuantizationExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; - } -}; -var GLTFCubicSplineInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - copySampleValue_(index) { - const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; - for (let i = 0; i !== valueSize; i++) { - result[i] = values[offset + i]; - } - return result; - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer; - const values = this.sampleValues; - const stride = this.valueSize; - const stride2 = stride * 2; - const stride3 = stride * 3; - const td = t1 - t0; - const p = (t - t0) / td; - const pp = p * p; - const ppp = pp * p; - const offset1 = i1 * stride3; - const offset0 = offset1 - stride3; - const s2 = -2 * ppp + 3 * pp; - const s3 = ppp - pp; - const s0 = 1 - s2; - const s1 = s3 - pp + p; - for (let i = 0; i !== stride; i++) { - const p0 = values[offset0 + i + stride]; - const m0 = values[offset0 + i + stride2] * td; - const p1 = values[offset1 + i + stride]; - const m1 = values[offset1 + i] * td; - result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; - } - return result; - } -}; -var _q = new Quaternion(); -var GLTFCubicSplineQuaternionInterpolant = class extends GLTFCubicSplineInterpolant { - interpolate_(i1, t0, t, t1) { - const result = super.interpolate_(i1, t0, t, t1); - _q.fromArray(result).normalize().toArray(result); - return result; - } -}; -var WEBGL_CONSTANTS = { - FLOAT: 5126, - //FLOAT_MAT2: 35674, - FLOAT_MAT3: 35675, - FLOAT_MAT4: 35676, - FLOAT_VEC2: 35664, - FLOAT_VEC3: 35665, - FLOAT_VEC4: 35666, - LINEAR: 9729, - REPEAT: 10497, - SAMPLER_2D: 35678, - POINTS: 0, - LINES: 1, - LINE_LOOP: 2, - LINE_STRIP: 3, - TRIANGLES: 4, - TRIANGLE_STRIP: 5, - TRIANGLE_FAN: 6, - UNSIGNED_BYTE: 5121, - UNSIGNED_SHORT: 5123 -}; -var WEBGL_COMPONENT_TYPES = { - 5120: Int8Array, - 5121: Uint8Array, - 5122: Int16Array, - 5123: Uint16Array, - 5125: Uint32Array, - 5126: Float32Array -}; -var WEBGL_FILTERS = { - 9728: NearestFilter, - 9729: LinearFilter, - 9984: NearestMipmapNearestFilter, - 9985: LinearMipmapNearestFilter, - 9986: NearestMipmapLinearFilter, - 9987: LinearMipmapLinearFilter -}; -var WEBGL_WRAPPINGS = { - 33071: ClampToEdgeWrapping, - 33648: MirroredRepeatWrapping, - 10497: RepeatWrapping -}; -var WEBGL_TYPE_SIZES = { - "SCALAR": 1, - "VEC2": 2, - "VEC3": 3, - "VEC4": 4, - "MAT2": 4, - "MAT3": 9, - "MAT4": 16 -}; -var ATTRIBUTES = { - POSITION: "position", - NORMAL: "normal", - TANGENT: "tangent", - TEXCOORD_0: "uv", - TEXCOORD_1: "uv1", - TEXCOORD_2: "uv2", - TEXCOORD_3: "uv3", - COLOR_0: "color", - WEIGHTS_0: "skinWeight", - JOINTS_0: "skinIndex" -}; -var PATH_PROPERTIES = { - scale: "scale", - translation: "position", - rotation: "quaternion", - weights: "morphTargetInfluences" -}; -var INTERPOLATION = { - CUBICSPLINE: void 0, - // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each - // keyframe track will be initialized with a default interpolation type, then modified. - LINEAR: InterpolateLinear, - STEP: InterpolateDiscrete -}; -var ALPHA_MODES = { - OPAQUE: "OPAQUE", - MASK: "MASK", - BLEND: "BLEND" -}; -function createDefaultMaterial(cache) { - if (cache["DefaultMaterial"] === void 0) { - cache["DefaultMaterial"] = new MeshStandardMaterial({ - color: 16777215, - emissive: 0, - metalness: 1, - roughness: 1, - transparent: false, - depthTest: true, - side: FrontSide - }); - } - return cache["DefaultMaterial"]; -} -function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { - for (const name in objectDef.extensions) { - if (knownExtensions[name] === void 0) { - object.userData.gltfExtensions = object.userData.gltfExtensions || {}; - object.userData.gltfExtensions[name] = objectDef.extensions[name]; - } - } -} -function assignExtrasToUserData(object, gltfDef) { - if (gltfDef.extras !== void 0) { - if (typeof gltfDef.extras === "object") { - Object.assign(object.userData, gltfDef.extras); - } else { - console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); - } - } -} -function addMorphTargets(geometry, targets, parser) { - let hasMorphPosition = false; - let hasMorphNormal = false; - let hasMorphColor = false; - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (target.POSITION !== void 0) hasMorphPosition = true; - if (target.NORMAL !== void 0) hasMorphNormal = true; - if (target.COLOR_0 !== void 0) hasMorphColor = true; - if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; - } - if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); - const pendingPositionAccessors = []; - const pendingNormalAccessors = []; - const pendingColorAccessors = []; - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (hasMorphPosition) { - const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; - pendingPositionAccessors.push(pendingAccessor); - } - if (hasMorphNormal) { - const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; - pendingNormalAccessors.push(pendingAccessor); - } - if (hasMorphColor) { - const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; - pendingColorAccessors.push(pendingAccessor); - } - } - return Promise.all([ - Promise.all(pendingPositionAccessors), - Promise.all(pendingNormalAccessors), - Promise.all(pendingColorAccessors) - ]).then(function(accessors) { - const morphPositions = accessors[0]; - const morphNormals = accessors[1]; - const morphColors = accessors[2]; - if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; - if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; - if (hasMorphColor) geometry.morphAttributes.color = morphColors; - geometry.morphTargetsRelative = true; - return geometry; - }); -} -function updateMorphTargets(mesh, meshDef) { - mesh.updateMorphTargets(); - if (meshDef.weights !== void 0) { - for (let i = 0, il = meshDef.weights.length; i < il; i++) { - mesh.morphTargetInfluences[i] = meshDef.weights[i]; - } - } - if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { - const targetNames = meshDef.extras.targetNames; - if (mesh.morphTargetInfluences.length === targetNames.length) { - mesh.morphTargetDictionary = {}; - for (let i = 0, il = targetNames.length; i < il; i++) { - mesh.morphTargetDictionary[targetNames[i]] = i; - } - } else { - console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); - } - } -} -function createPrimitiveKey(primitiveDef) { - let geometryKey; - const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; - if (dracoExtension) { - geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); - } else { - geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; - } - if (primitiveDef.targets !== void 0) { - for (let i = 0, il = primitiveDef.targets.length; i < il; i++) { - geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); - } - } - return geometryKey; -} -function createAttributesKey(attributes) { - let attributesKey = ""; - const keys = Object.keys(attributes).sort(); - for (let i = 0, il = keys.length; i < il; i++) { - attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"; - } - return attributesKey; -} -function getNormalizedComponentScale(constructor) { - switch (constructor) { - case Int8Array: - return 1 / 127; - case Uint8Array: - return 1 / 255; - case Int16Array: - return 1 / 32767; - case Uint16Array: - return 1 / 65535; - default: - throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); - } -} -function getImageURIMimeType(uri) { - if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; - if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; - return "image/png"; -} -var _identityMatrix = new Matrix4(); -var GLTFParser = class { - constructor(json = {}, options = {}) { - this.json = json; - this.extensions = {}; - this.plugins = {}; - this.options = options; - this.cache = new GLTFRegistry(); - this.associations = /* @__PURE__ */ new Map(); - this.primitiveCache = {}; - this.nodeCache = {}; - this.meshCache = { refs: {}, uses: {} }; - this.cameraCache = { refs: {}, uses: {} }; - this.lightCache = { refs: {}, uses: {} }; - this.sourceCache = {}; - this.textureCache = {}; - this.nodeNamesUsed = {}; - let isSafari = false; - let safariVersion = -1; - let isFirefox = false; - let firefoxVersion = -1; - if (typeof navigator !== "undefined") { - const userAgent = navigator.userAgent; - isSafari = /^((?!chrome|android).)*safari/i.test(userAgent) === true; - const safariMatch = userAgent.match(/Version\/(\d+)/); - safariVersion = isSafari && safariMatch ? parseInt(safariMatch[1], 10) : -1; - isFirefox = userAgent.indexOf("Firefox") > -1; - firefoxVersion = isFirefox ? userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; - } - if (typeof createImageBitmap === "undefined" || isSafari && safariVersion < 17 || isFirefox && firefoxVersion < 98) { - this.textureLoader = new TextureLoader(this.options.manager); - } else { - this.textureLoader = new ImageBitmapLoader(this.options.manager); - } - this.textureLoader.setCrossOrigin(this.options.crossOrigin); - this.textureLoader.setRequestHeader(this.options.requestHeader); - this.fileLoader = new FileLoader(this.options.manager); - this.fileLoader.setResponseType("arraybuffer"); - if (this.options.crossOrigin === "use-credentials") { - this.fileLoader.setWithCredentials(true); - } - } - setExtensions(extensions) { - this.extensions = extensions; - } - setPlugins(plugins) { - this.plugins = plugins; - } - parse(onLoad, onError) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - this.cache.removeAll(); - this.nodeCache = {}; - this._invokeAll(function(ext) { - return ext._markDefs && ext._markDefs(); - }); - Promise.all(this._invokeAll(function(ext) { - return ext.beforeRoot && ext.beforeRoot(); - })).then(function() { - return Promise.all([ - parser.getDependencies("scene"), - parser.getDependencies("animation"), - parser.getDependencies("camera") - ]); - }).then(function(dependencies) { - const result = { - scene: dependencies[0][json.scene || 0], - scenes: dependencies[0], - animations: dependencies[1], - cameras: dependencies[2], - asset: json.asset, - parser, - userData: {} - }; - addUnknownExtensionsToUserData(extensions, result, json); - assignExtrasToUserData(result, json); - return Promise.all(parser._invokeAll(function(ext) { - return ext.afterRoot && ext.afterRoot(result); - })).then(function() { - for (const scene of result.scenes) { - scene.updateMatrixWorld(); - } - onLoad(result); - }); - }).catch(onError); - } - /** - * Marks the special nodes/meshes in json for efficient parse. - */ - _markDefs() { - const nodeDefs = this.json.nodes || []; - const skinDefs = this.json.skins || []; - const meshDefs = this.json.meshes || []; - for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { - const joints = skinDefs[skinIndex].joints; - for (let i = 0, il = joints.length; i < il; i++) { - nodeDefs[joints[i]].isBone = true; - } - } - for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { - const nodeDef = nodeDefs[nodeIndex]; - if (nodeDef.mesh !== void 0) { - this._addNodeRef(this.meshCache, nodeDef.mesh); - if (nodeDef.skin !== void 0) { - meshDefs[nodeDef.mesh].isSkinnedMesh = true; - } - } - if (nodeDef.camera !== void 0) { - this._addNodeRef(this.cameraCache, nodeDef.camera); - } - } - } - /** - * Counts references to shared node / Object3D resources. These resources - * can be reused, or "instantiated", at multiple nodes in the scene - * hierarchy. Mesh, Camera, and Light instances are instantiated and must - * be marked. Non-scenegraph resources (like Materials, Geometries, and - * Textures) can be reused directly and are not marked here. - * - * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. - */ - _addNodeRef(cache, index) { - if (index === void 0) return; - if (cache.refs[index] === void 0) { - cache.refs[index] = cache.uses[index] = 0; - } - cache.refs[index]++; - } - /** Returns a reference to a shared resource, cloning it if necessary. */ - _getNodeRef(cache, index, object) { - if (cache.refs[index] <= 1) return object; - const ref = object.clone(); - const updateMappings = (original, clone) => { - const mappings = this.associations.get(original); - if (mappings != null) { - this.associations.set(clone, mappings); - } - for (const [i, child] of original.children.entries()) { - updateMappings(child, clone.children[i]); - } - }; - updateMappings(object, ref); - ref.name += "_instance_" + cache.uses[index]++; - return ref; - } - _invokeOne(func) { - const extensions = Object.values(this.plugins); - extensions.push(this); - for (let i = 0; i < extensions.length; i++) { - const result = func(extensions[i]); - if (result) return result; - } - return null; - } - _invokeAll(func) { - const extensions = Object.values(this.plugins); - extensions.unshift(this); - const pending = []; - for (let i = 0; i < extensions.length; i++) { - const result = func(extensions[i]); - if (result) pending.push(result); - } - return pending; - } - /** - * Requests the specified dependency asynchronously, with caching. - * @param {string} type - * @param {number} index - * @return {Promise} - */ - getDependency(type, index) { - const cacheKey = type + ":" + index; - let dependency = this.cache.get(cacheKey); - if (!dependency) { - switch (type) { - case "scene": - dependency = this.loadScene(index); - break; - case "node": - dependency = this._invokeOne(function(ext) { - return ext.loadNode && ext.loadNode(index); - }); - break; - case "mesh": - dependency = this._invokeOne(function(ext) { - return ext.loadMesh && ext.loadMesh(index); - }); - break; - case "accessor": - dependency = this.loadAccessor(index); - break; - case "bufferView": - dependency = this._invokeOne(function(ext) { - return ext.loadBufferView && ext.loadBufferView(index); - }); - break; - case "buffer": - dependency = this.loadBuffer(index); - break; - case "material": - dependency = this._invokeOne(function(ext) { - return ext.loadMaterial && ext.loadMaterial(index); - }); - break; - case "texture": - dependency = this._invokeOne(function(ext) { - return ext.loadTexture && ext.loadTexture(index); - }); - break; - case "skin": - dependency = this.loadSkin(index); - break; - case "animation": - dependency = this._invokeOne(function(ext) { - return ext.loadAnimation && ext.loadAnimation(index); - }); - break; - case "camera": - dependency = this.loadCamera(index); - break; - default: - dependency = this._invokeOne(function(ext) { - return ext != this && ext.getDependency && ext.getDependency(type, index); - }); - if (!dependency) { - throw new Error("Unknown type: " + type); - } - break; - } - this.cache.add(cacheKey, dependency); - } - return dependency; - } - /** - * Requests all dependencies of the specified type asynchronously, with caching. - * @param {string} type - * @return {Promise>} - */ - getDependencies(type) { - let dependencies = this.cache.get(type); - if (!dependencies) { - const parser = this; - const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; - dependencies = Promise.all(defs.map(function(def, index) { - return parser.getDependency(type, index); - })); - this.cache.add(type, dependencies); - } - return dependencies; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views - * @param {number} bufferIndex - * @return {Promise} - */ - loadBuffer(bufferIndex) { - const bufferDef = this.json.buffers[bufferIndex]; - const loader = this.fileLoader; - if (bufferDef.type && bufferDef.type !== "arraybuffer") { - throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); - } - if (bufferDef.uri === void 0 && bufferIndex === 0) { - return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); - } - const options = this.options; - return new Promise(function(resolve, reject) { - loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { - reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".')); - }); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views - * @param {number} bufferViewIndex - * @return {Promise} - */ - loadBufferView(bufferViewIndex) { - const bufferViewDef = this.json.bufferViews[bufferViewIndex]; - return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { - const byteLength = bufferViewDef.byteLength || 0; - const byteOffset = bufferViewDef.byteOffset || 0; - return buffer.slice(byteOffset, byteOffset + byteLength); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors - * @param {number} accessorIndex - * @return {Promise} - */ - loadAccessor(accessorIndex) { - const parser = this; - const json = this.json; - const accessorDef = this.json.accessors[accessorIndex]; - if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { - const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; - const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; - const normalized = accessorDef.normalized === true; - const array = new TypedArray(accessorDef.count * itemSize); - return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); - } - const pendingBufferViews = []; - if (accessorDef.bufferView !== void 0) { - pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); - } else { - pendingBufferViews.push(null); - } - if (accessorDef.sparse !== void 0) { - pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); - pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); - } - return Promise.all(pendingBufferViews).then(function(bufferViews) { - const bufferView = bufferViews[0]; - const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; - const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; - const elementBytes = TypedArray.BYTES_PER_ELEMENT; - const itemBytes = elementBytes * itemSize; - const byteOffset = accessorDef.byteOffset || 0; - const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; - const normalized = accessorDef.normalized === true; - let array, bufferAttribute; - if (byteStride && byteStride !== itemBytes) { - const ibSlice = Math.floor(byteOffset / byteStride); - const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; - let ib = parser.cache.get(ibCacheKey); - if (!ib) { - array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); - ib = new InterleavedBuffer(array, byteStride / elementBytes); - parser.cache.add(ibCacheKey, ib); - } - bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); - } else { - if (bufferView === null) { - array = new TypedArray(accessorDef.count * itemSize); - } else { - array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); - } - bufferAttribute = new BufferAttribute(array, itemSize, normalized); - } - if (accessorDef.sparse !== void 0) { - const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; - const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; - const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; - const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; - const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); - const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); - if (bufferView !== null) { - bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); - } - for (let i = 0, il = sparseIndices.length; i < il; i++) { - const index = sparseIndices[i]; - bufferAttribute.setX(index, sparseValues[i * itemSize]); - if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]); - if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]); - if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]); - if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); - } - } - return bufferAttribute; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures - * @param {number} textureIndex - * @return {Promise} - */ - loadTexture(textureIndex) { - const json = this.json; - const options = this.options; - const textureDef = json.textures[textureIndex]; - const sourceIndex = textureDef.source; - const sourceDef = json.images[sourceIndex]; - let loader = this.textureLoader; - if (sourceDef.uri) { - const handler = options.manager.getHandler(sourceDef.uri); - if (handler !== null) loader = handler; - } - return this.loadTextureImage(textureIndex, sourceIndex, loader); - } - loadTextureImage(textureIndex, sourceIndex, loader) { - const parser = this; - const json = this.json; - const textureDef = json.textures[textureIndex]; - const sourceDef = json.images[sourceIndex]; - const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; - if (this.textureCache[cacheKey]) { - return this.textureCache[cacheKey]; - } - const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { - texture.flipY = false; - texture.name = textureDef.name || sourceDef.name || ""; - if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) { - texture.name = sourceDef.uri; - } - const samplers = json.samplers || {}; - const sampler = samplers[textureDef.sampler] || {}; - texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter; - texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter; - texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping; - texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping; - parser.associations.set(texture, { textures: textureIndex }); - return texture; - }).catch(function() { - return null; - }); - this.textureCache[cacheKey] = promise; - return promise; - } - loadImageSource(sourceIndex, loader) { - const parser = this; - const json = this.json; - const options = this.options; - if (this.sourceCache[sourceIndex] !== void 0) { - return this.sourceCache[sourceIndex].then((texture) => texture.clone()); - } - const sourceDef = json.images[sourceIndex]; - const URL = self.URL || self.webkitURL; - let sourceURI = sourceDef.uri || ""; - let isObjectURL = false; - if (sourceDef.bufferView !== void 0) { - sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { - isObjectURL = true; - const blob = new Blob([bufferView], { type: sourceDef.mimeType }); - sourceURI = URL.createObjectURL(blob); - return sourceURI; - }); - } else if (sourceDef.uri === void 0) { - throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); - } - const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { - return new Promise(function(resolve, reject) { - let onLoad = resolve; - if (loader.isImageBitmapLoader === true) { - onLoad = function(imageBitmap) { - const texture = new Texture(imageBitmap); - texture.needsUpdate = true; - resolve(texture); - }; - } - loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject); - }); - }).then(function(texture) { - if (isObjectURL === true) { - URL.revokeObjectURL(sourceURI); - } - assignExtrasToUserData(texture, sourceDef); - texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); - return texture; - }).catch(function(error) { - console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); - throw error; - }); - this.sourceCache[sourceIndex] = promise; - return promise; - } - /** - * Asynchronously assigns a texture to the given material parameters. - * @param {Object} materialParams - * @param {string} mapName - * @param {Object} mapDef - * @return {Promise} - */ - assignTexture(materialParams, mapName, mapDef, colorSpace) { - const parser = this; - return this.getDependency("texture", mapDef.index).then(function(texture) { - if (!texture) return null; - if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { - texture = texture.clone(); - texture.channel = mapDef.texCoord; - } - if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { - const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; - if (transform) { - const gltfReference = parser.associations.get(texture); - texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform); - parser.associations.set(texture, gltfReference); - } - } - if (colorSpace !== void 0) { - texture.colorSpace = colorSpace; - } - materialParams[mapName] = texture; - return texture; - }); - } - /** - * Assigns final material to a Mesh, Line, or Points instance. The instance - * already has a material (generated from the glTF material options alone) - * but reuse of the same glTF material may require multiple threejs materials - * to accommodate different primitive types, defines, etc. New materials will - * be created if necessary, and reused from a cache. - * @param {Object3D} mesh Mesh, Line, or Points instance. - */ - assignFinalMaterial(mesh) { - const geometry = mesh.geometry; - let material = mesh.material; - const useDerivativeTangents = geometry.attributes.tangent === void 0; - const useVertexColors = geometry.attributes.color !== void 0; - const useFlatShading = geometry.attributes.normal === void 0; - if (mesh.isPoints) { - const cacheKey = "PointsMaterial:" + material.uuid; - let pointsMaterial = this.cache.get(cacheKey); - if (!pointsMaterial) { - pointsMaterial = new PointsMaterial(); - Material.prototype.copy.call(pointsMaterial, material); - pointsMaterial.color.copy(material.color); - pointsMaterial.map = material.map; - pointsMaterial.sizeAttenuation = false; - this.cache.add(cacheKey, pointsMaterial); - } - material = pointsMaterial; - } else if (mesh.isLine) { - const cacheKey = "LineBasicMaterial:" + material.uuid; - let lineMaterial = this.cache.get(cacheKey); - if (!lineMaterial) { - lineMaterial = new LineBasicMaterial(); - Material.prototype.copy.call(lineMaterial, material); - lineMaterial.color.copy(material.color); - lineMaterial.map = material.map; - this.cache.add(cacheKey, lineMaterial); - } - material = lineMaterial; - } - if (useDerivativeTangents || useVertexColors || useFlatShading) { - let cacheKey = "ClonedMaterial:" + material.uuid + ":"; - if (useDerivativeTangents) cacheKey += "derivative-tangents:"; - if (useVertexColors) cacheKey += "vertex-colors:"; - if (useFlatShading) cacheKey += "flat-shading:"; - let cachedMaterial = this.cache.get(cacheKey); - if (!cachedMaterial) { - cachedMaterial = material.clone(); - if (useVertexColors) cachedMaterial.vertexColors = true; - if (useFlatShading) cachedMaterial.flatShading = true; - if (useDerivativeTangents) { - if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; - if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; - } - this.cache.add(cacheKey, cachedMaterial); - this.associations.set(cachedMaterial, this.associations.get(material)); - } - material = cachedMaterial; - } - mesh.material = material; - } - getMaterialType() { - return MeshStandardMaterial; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials - * @param {number} materialIndex - * @return {Promise} - */ - loadMaterial(materialIndex) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - const materialDef = json.materials[materialIndex]; - let materialType; - const materialParams = {}; - const materialExtensions = materialDef.extensions || {}; - const pending = []; - if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { - const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; - materialType = kmuExtension.getMaterialType(); - pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); - } else { - const metallicRoughness = materialDef.pbrMetallicRoughness || {}; - materialParams.color = new Color(1, 1, 1); - materialParams.opacity = 1; - if (Array.isArray(metallicRoughness.baseColorFactor)) { - const array = metallicRoughness.baseColorFactor; - materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace); - materialParams.opacity = array[3]; - } - if (metallicRoughness.baseColorTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace)); - } - materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; - materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; - if (metallicRoughness.metallicRoughnessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); - pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); - } - materialType = this._invokeOne(function(ext) { - return ext.getMaterialType && ext.getMaterialType(materialIndex); - }); - pending.push(Promise.all(this._invokeAll(function(ext) { - return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams); - }))); - } - if (materialDef.doubleSided === true) { - materialParams.side = DoubleSide; - } - const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; - if (alphaMode === ALPHA_MODES.BLEND) { - materialParams.transparent = true; - materialParams.depthWrite = false; - } else { - materialParams.transparent = false; - if (alphaMode === ALPHA_MODES.MASK) { - materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5; - } - } - if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { - pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); - materialParams.normalScale = new Vector2(1, 1); - if (materialDef.normalTexture.scale !== void 0) { - const scale = materialDef.normalTexture.scale; - materialParams.normalScale.set(scale, scale); - } - } - if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { - pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); - if (materialDef.occlusionTexture.strength !== void 0) { - materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; - } - } - if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { - const emissiveFactor = materialDef.emissiveFactor; - materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace); - } - if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) { - pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace)); - } - return Promise.all(pending).then(function() { - const material = new materialType(materialParams); - if (materialDef.name) material.name = materialDef.name; - assignExtrasToUserData(material, materialDef); - parser.associations.set(material, { materials: materialIndex }); - if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); - return material; - }); - } - /** When Object3D instances are targeted by animation, they need unique names. */ - createUniqueName(originalName) { - const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); - if (sanitizedName in this.nodeNamesUsed) { - return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; - } else { - this.nodeNamesUsed[sanitizedName] = 0; - return sanitizedName; - } - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry - * - * Creates BufferGeometries from primitives. - * - * @param {Array} primitives - * @return {Promise>} - */ - loadGeometries(primitives) { - const parser = this; - const extensions = this.extensions; - const cache = this.primitiveCache; - function createDracoPrimitive(primitive) { - return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { - return addPrimitiveAttributes(geometry, primitive, parser); - }); - } - const pending = []; - for (let i = 0, il = primitives.length; i < il; i++) { - const primitive = primitives[i]; - const cacheKey = createPrimitiveKey(primitive); - const cached = cache[cacheKey]; - if (cached) { - pending.push(cached.promise); - } else { - let geometryPromise; - if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) { - geometryPromise = createDracoPrimitive(primitive); - } else { - geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); - } - cache[cacheKey] = { primitive, promise: geometryPromise }; - pending.push(geometryPromise); - } - } - return Promise.all(pending); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes - * @param {number} meshIndex - * @return {Promise} - */ - loadMesh(meshIndex) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - const meshDef = json.meshes[meshIndex]; - const primitives = meshDef.primitives; - const pending = []; - for (let i = 0, il = primitives.length; i < il; i++) { - const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); - pending.push(material); - } - pending.push(parser.loadGeometries(primitives)); - return Promise.all(pending).then(function(results) { - const materials = results.slice(0, results.length - 1); - const geometries = results[results.length - 1]; - const meshes = []; - for (let i = 0, il = geometries.length; i < il; i++) { - const geometry = geometries[i]; - const primitive = primitives[i]; - let mesh; - const material = materials[i]; - if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) { - mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); - if (mesh.isSkinnedMesh === true) { - mesh.normalizeSkinWeights(); - } - if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) { - mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode); - } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) { - mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode); - } - } else if (primitive.mode === WEBGL_CONSTANTS.LINES) { - mesh = new LineSegments(geometry, material); - } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) { - mesh = new Line(geometry, material); - } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) { - mesh = new LineLoop(geometry, material); - } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) { - mesh = new Points(geometry, material); - } else { - throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); - } - if (Object.keys(mesh.geometry.morphAttributes).length > 0) { - updateMorphTargets(mesh, meshDef); - } - mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); - assignExtrasToUserData(mesh, meshDef); - if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); - parser.assignFinalMaterial(mesh); - meshes.push(mesh); - } - for (let i = 0, il = meshes.length; i < il; i++) { - parser.associations.set(meshes[i], { - meshes: meshIndex, - primitives: i - }); - } - if (meshes.length === 1) { - if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); - return meshes[0]; - } - const group = new Group(); - if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); - parser.associations.set(group, { meshes: meshIndex }); - for (let i = 0, il = meshes.length; i < il; i++) { - group.add(meshes[i]); - } - return group; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras - * @param {number} cameraIndex - * @return {Promise} - */ - loadCamera(cameraIndex) { - let camera; - const cameraDef = this.json.cameras[cameraIndex]; - const params = cameraDef[cameraDef.type]; - if (!params) { - console.warn("THREE.GLTFLoader: Missing camera parameters."); - return; - } - if (cameraDef.type === "perspective") { - camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); - } else if (cameraDef.type === "orthographic") { - camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); - } - if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); - assignExtrasToUserData(camera, cameraDef); - return Promise.resolve(camera); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins - * @param {number} skinIndex - * @return {Promise} - */ - loadSkin(skinIndex) { - const skinDef = this.json.skins[skinIndex]; - const pending = []; - for (let i = 0, il = skinDef.joints.length; i < il; i++) { - pending.push(this._loadNodeShallow(skinDef.joints[i])); - } - if (skinDef.inverseBindMatrices !== void 0) { - pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); - } else { - pending.push(null); - } - return Promise.all(pending).then(function(results) { - const inverseBindMatrices = results.pop(); - const jointNodes = results; - const bones = []; - const boneInverses = []; - for (let i = 0, il = jointNodes.length; i < il; i++) { - const jointNode = jointNodes[i]; - if (jointNode) { - bones.push(jointNode); - const mat = new Matrix4(); - if (inverseBindMatrices !== null) { - mat.fromArray(inverseBindMatrices.array, i * 16); - } - boneInverses.push(mat); - } else { - console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]); - } - } - return new Skeleton(bones, boneInverses); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations - * @param {number} animationIndex - * @return {Promise} - */ - loadAnimation(animationIndex) { - const json = this.json; - const parser = this; - const animationDef = json.animations[animationIndex]; - const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; - const pendingNodes = []; - const pendingInputAccessors = []; - const pendingOutputAccessors = []; - const pendingSamplers = []; - const pendingTargets = []; - for (let i = 0, il = animationDef.channels.length; i < il; i++) { - const channel = animationDef.channels[i]; - const sampler = animationDef.samplers[channel.sampler]; - const target = channel.target; - const name = target.node; - const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; - const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; - if (target.node === void 0) continue; - pendingNodes.push(this.getDependency("node", name)); - pendingInputAccessors.push(this.getDependency("accessor", input)); - pendingOutputAccessors.push(this.getDependency("accessor", output)); - pendingSamplers.push(sampler); - pendingTargets.push(target); - } - return Promise.all([ - Promise.all(pendingNodes), - Promise.all(pendingInputAccessors), - Promise.all(pendingOutputAccessors), - Promise.all(pendingSamplers), - Promise.all(pendingTargets) - ]).then(function(dependencies) { - const nodes = dependencies[0]; - const inputAccessors = dependencies[1]; - const outputAccessors = dependencies[2]; - const samplers = dependencies[3]; - const targets = dependencies[4]; - const tracks = []; - for (let i = 0, il = nodes.length; i < il; i++) { - const node = nodes[i]; - const inputAccessor = inputAccessors[i]; - const outputAccessor = outputAccessors[i]; - const sampler = samplers[i]; - const target = targets[i]; - if (node === void 0) continue; - if (node.updateMatrix) { - node.updateMatrix(); - } - const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); - if (createdTracks) { - for (let k = 0; k < createdTracks.length; k++) { - tracks.push(createdTracks[k]); - } - } - } - return new AnimationClip(animationName, void 0, tracks); - }); - } - createNodeMesh(nodeIndex) { - const json = this.json; - const parser = this; - const nodeDef = json.nodes[nodeIndex]; - if (nodeDef.mesh === void 0) return null; - return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { - const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); - if (nodeDef.weights !== void 0) { - node.traverse(function(o) { - if (!o.isMesh) return; - for (let i = 0, il = nodeDef.weights.length; i < il; i++) { - o.morphTargetInfluences[i] = nodeDef.weights[i]; - } - }); - } - return node; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy - * @param {number} nodeIndex - * @return {Promise} - */ - loadNode(nodeIndex) { - const json = this.json; - const parser = this; - const nodeDef = json.nodes[nodeIndex]; - const nodePending = parser._loadNodeShallow(nodeIndex); - const childPending = []; - const childrenDef = nodeDef.children || []; - for (let i = 0, il = childrenDef.length; i < il; i++) { - childPending.push(parser.getDependency("node", childrenDef[i])); - } - const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); - return Promise.all([ - nodePending, - Promise.all(childPending), - skeletonPending - ]).then(function(results) { - const node = results[0]; - const children = results[1]; - const skeleton = results[2]; - if (skeleton !== null) { - node.traverse(function(mesh) { - if (!mesh.isSkinnedMesh) return; - mesh.bind(skeleton, _identityMatrix); - }); - } - for (let i = 0, il = children.length; i < il; i++) { - node.add(children[i]); - } - return node; - }); - } - // ._loadNodeShallow() parses a single node. - // skin and child nodes are created and added in .loadNode() (no '_' prefix). - _loadNodeShallow(nodeIndex) { - const json = this.json; - const extensions = this.extensions; - const parser = this; - if (this.nodeCache[nodeIndex] !== void 0) { - return this.nodeCache[nodeIndex]; - } - const nodeDef = json.nodes[nodeIndex]; - const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; - const pending = []; - const meshPromise = parser._invokeOne(function(ext) { - return ext.createNodeMesh && ext.createNodeMesh(nodeIndex); - }); - if (meshPromise) { - pending.push(meshPromise); - } - if (nodeDef.camera !== void 0) { - pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { - return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); - })); - } - parser._invokeAll(function(ext) { - return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex); - }).forEach(function(promise) { - pending.push(promise); - }); - this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { - let node; - if (nodeDef.isBone === true) { - node = new Bone(); - } else if (objects.length > 1) { - node = new Group(); - } else if (objects.length === 1) { - node = objects[0]; - } else { - node = new Object3D(); - } - if (node !== objects[0]) { - for (let i = 0, il = objects.length; i < il; i++) { - node.add(objects[i]); - } - } - if (nodeDef.name) { - node.userData.name = nodeDef.name; - node.name = nodeName; - } - assignExtrasToUserData(node, nodeDef); - if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); - if (nodeDef.matrix !== void 0) { - const matrix = new Matrix4(); - matrix.fromArray(nodeDef.matrix); - node.applyMatrix4(matrix); - } else { - if (nodeDef.translation !== void 0) { - node.position.fromArray(nodeDef.translation); - } - if (nodeDef.rotation !== void 0) { - node.quaternion.fromArray(nodeDef.rotation); - } - if (nodeDef.scale !== void 0) { - node.scale.fromArray(nodeDef.scale); - } - } - if (!parser.associations.has(node)) { - parser.associations.set(node, {}); - } - parser.associations.get(node).nodes = nodeIndex; - return node; - }); - return this.nodeCache[nodeIndex]; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes - * @param {number} sceneIndex - * @return {Promise} - */ - loadScene(sceneIndex) { - const extensions = this.extensions; - const sceneDef = this.json.scenes[sceneIndex]; - const parser = this; - const scene = new Group(); - if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); - assignExtrasToUserData(scene, sceneDef); - if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); - const nodeIds = sceneDef.nodes || []; - const pending = []; - for (let i = 0, il = nodeIds.length; i < il; i++) { - pending.push(parser.getDependency("node", nodeIds[i])); - } - return Promise.all(pending).then(function(nodes) { - for (let i = 0, il = nodes.length; i < il; i++) { - scene.add(nodes[i]); - } - const reduceAssociations = (node) => { - const reducedAssociations = /* @__PURE__ */ new Map(); - for (const [key, value] of parser.associations) { - if (key instanceof Material || key instanceof Texture) { - reducedAssociations.set(key, value); - } - } - node.traverse((node2) => { - const mappings = parser.associations.get(node2); - if (mappings != null) { - reducedAssociations.set(node2, mappings); - } - }); - return reducedAssociations; - }; - parser.associations = reduceAssociations(scene); - return scene; - }); - } - _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { - const tracks = []; - const targetName = node.name ? node.name : node.uuid; - const targetNames = []; - if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) { - node.traverse(function(object) { - if (object.morphTargetInfluences) { - targetNames.push(object.name ? object.name : object.uuid); - } - }); - } else { - targetNames.push(targetName); - } - let TypedKeyframeTrack; - switch (PATH_PROPERTIES[target.path]) { - case PATH_PROPERTIES.weights: - TypedKeyframeTrack = NumberKeyframeTrack; - break; - case PATH_PROPERTIES.rotation: - TypedKeyframeTrack = QuaternionKeyframeTrack; - break; - case PATH_PROPERTIES.position: - case PATH_PROPERTIES.scale: - TypedKeyframeTrack = VectorKeyframeTrack; - break; - default: - switch (outputAccessor.itemSize) { - case 1: - TypedKeyframeTrack = NumberKeyframeTrack; - break; - case 2: - case 3: - default: - TypedKeyframeTrack = VectorKeyframeTrack; - break; - } - break; - } - const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; - const outputArray = this._getArrayFromAccessor(outputAccessor); - for (let j = 0, jl = targetNames.length; j < jl; j++) { - const track = new TypedKeyframeTrack( - targetNames[j] + "." + PATH_PROPERTIES[target.path], - inputAccessor.array, - outputArray, - interpolation - ); - if (sampler.interpolation === "CUBICSPLINE") { - this._createCubicSplineTrackInterpolant(track); - } - tracks.push(track); - } - return tracks; - } - _getArrayFromAccessor(accessor) { - let outputArray = accessor.array; - if (accessor.normalized) { - const scale = getNormalizedComponentScale(outputArray.constructor); - const scaled = new Float32Array(outputArray.length); - for (let j = 0, jl = outputArray.length; j < jl; j++) { - scaled[j] = outputArray[j] * scale; - } - outputArray = scaled; - } - return outputArray; - } - _createCubicSplineTrackInterpolant(track) { - track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) { - const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant; - return new interpolantType(this.times, this.values, this.getValueSize() / 3, result); - }; - track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; - } -}; -function computeBounds(geometry, primitiveDef, parser) { - const attributes = primitiveDef.attributes; - const box = new Box3(); - if (attributes.POSITION !== void 0) { - const accessor = parser.json.accessors[attributes.POSITION]; - const min = accessor.min; - const max = accessor.max; - if (min !== void 0 && max !== void 0) { - box.set( - new Vector3(min[0], min[1], min[2]), - new Vector3(max[0], max[1], max[2]) - ); - if (accessor.normalized) { - const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); - box.min.multiplyScalar(boxScale); - box.max.multiplyScalar(boxScale); - } - } else { - console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); - return; - } - } else { - return; - } - const targets = primitiveDef.targets; - if (targets !== void 0) { - const maxDisplacement = new Vector3(); - const vector = new Vector3(); - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (target.POSITION !== void 0) { - const accessor = parser.json.accessors[target.POSITION]; - const min = accessor.min; - const max = accessor.max; - if (min !== void 0 && max !== void 0) { - vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0]))); - vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1]))); - vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2]))); - if (accessor.normalized) { - const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); - vector.multiplyScalar(boxScale); - } - maxDisplacement.max(vector); - } else { - console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); - } - } - } - box.expandByVector(maxDisplacement); - } - geometry.boundingBox = box; - const sphere = new Sphere(); - box.getCenter(sphere.center); - sphere.radius = box.min.distanceTo(box.max) / 2; - geometry.boundingSphere = sphere; -} -function addPrimitiveAttributes(geometry, primitiveDef, parser) { - const attributes = primitiveDef.attributes; - const pending = []; - function assignAttributeAccessor(accessorIndex, attributeName) { - return parser.getDependency("accessor", accessorIndex).then(function(accessor) { - geometry.setAttribute(attributeName, accessor); - }); - } - for (const gltfAttributeName in attributes) { - const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); - if (threeAttributeName in geometry.attributes) continue; - pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); - } - if (primitiveDef.indices !== void 0 && !geometry.index) { - const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { - geometry.setIndex(accessor2); - }); - pending.push(accessor); - } - if (ColorManagement.workingColorSpace !== LinearSRGBColorSpace && "COLOR_0" in attributes) { - console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ColorManagement.workingColorSpace}" not supported.`); - } - assignExtrasToUserData(geometry, primitiveDef); - computeBounds(geometry, primitiveDef, parser); - return Promise.all(pending).then(function() { - return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; - }); -} -export { - GLTFLoader -}; -//# sourceMappingURL=three_addons_loaders_GLTFLoader__js.js.map diff --git a/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map b/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map deleted file mode 100644 index 00c3ed9..0000000 --- a/site/node_modules/.vite/deps/three_addons_loaders_GLTFLoader__js.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../three/examples/jsm/utils/BufferGeometryUtils.js", "../../three/examples/jsm/loaders/GLTFLoader.js"], - "sourcesContent": ["import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n", "import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n"], - "mappings": "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", - "names": ["self", "res", "sourceURI", "node", "accessor"] -}